JPA是一個Java編程語言接口規範,Hibernate ORM是JPA規範的一個實現。
在開始以前,先舉個簡單的例子.html
一張表user有三個字段,id、name和age,要查找指定姓氏在某年齡以上的user,在傳統的spring+hibernate中,dao層咱們是這樣寫的:java
UserDao:spring
- public interface UserDao{
- List<User> findByNameLikeAndAgeGreaterThan(String firstName,Integer age);
- }
UserDaoImpl(已是相對簡單的HibernateTemplate方式了):
- public class UserDaoImpl implements UserDao{
- @Override
- public List<User> findByFirstNameAndAge(String firstName, Integer age) {
-
- return hibernateTemplateMysql.execute(new HibernateCallback() {
- @Override
- public Object doInHibernate(Session session) throws HibernateException {
- String hql = "from User where name like '?' and age > ?";
- Query query = session.createQuery(hql);
- query.setParameter(0, firstName+"");
- query.setParameter(1, age);
- return query.uniqueResult();
- }
- });
- }
- }
然而,若是咱們用Spring Data JPA呢:
- public interface UserDao extends JpaRepository<User, Serializable>{
- List<User> findByNameLikeAndAgeGreaterThan(String firstName,Integer age);
- }
對,就這樣,已經沒有了,連實現都不須要寫的!service直接調用UserDao.findByNameLikeAndAgeGreaterThan(firstName+"%",age)便可。sql
因此,spring data jpa能夠極大的簡化JPA的寫法,能夠在幾乎不用寫具體代碼的狀況下,實現對數據的訪問和操做。除了CRUD外,還包括如分頁、排序等一些經常使用的功能。
Spring Data JPA有什麼
主要來看看Spring Data JPA提供的接口,也是Spring Data JPA的核心概念:
1:Repository:最頂層的接口,是一個空的接口,目的是爲了統一全部Repository的類型,且能讓組件掃描的時候自動識別。
2:CrudRepository :是Repository的子接口,提供CRUD的功能
3:PagingAndSortingRepository:是CrudRepository的子接口,添加分頁和排序的功能
4:JpaRepository:是PagingAndSortingRepository的子接口,增長了一些實用的功能,好比:批量操做等。
5:JpaSpecificationExecutor:用來作負責查詢的接口
6:Specification:是Spring Data JPA提供的一個查詢規範,要作複雜的查詢,只需圍繞這個規範來設置查詢條件便可