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提供的一个查询规范,要作复杂的查询,只需围绕这个规范来设置查询条件便可