Spring Data Jpa系列教程(一)--------入门
现在开始,我们来学习船新的一门技术,SpringDataJpa,它是一个。。额。。(我百度一下)
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营的局面。值得注意的是,JPA是在充分吸收了现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从目前的开发社区的反应上看,JPA受到了极大的支持和赞扬,其中就包括了Spring与EJB3.0的开发团队。
注意:JPA是一套规范,不是一套产品,那么像Hibernate,TopLink,JDO他们是一套产品,如果说这些产品实现了这个JPA规范,那么我们就可以叫他们为JPA的实现产品
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!
spring data jpa让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现
好了,以上就是Spring Data JPA的介绍,现在直接开搞
-------首先在spring data jpa中基本的CRUD其实不用自己去做,你只需要
public interface UserRepository extends JpaRepository<User, Integer>{}
这样就具备了基础的CRUD功能,而且不需要写实现类,spring-data-jpa实现了上面的能力,那他是怎么实现的呢?这里我们通过源代码的方式来呈现他的来龙去脉,这个过程中cglib发挥了杰出的作用。 在spring-data-jpa内部,有一个类,叫做
public class SimpleJpaRepository<T, ID extends Serializable> implements JpaRepository<T, ID>, JpaSpecificationExecutor<T>
我们可以看到这个类是实现了JpaRepository接口的,事实上如果我们按照上面的配置,在同一个包下面有UserRepository,但是没有UserRepositoryImpl这个类的话,在运行时期UserRepository这个接口的实现就是上面的SimpleJpaRepository这个接口。而如果有UserRepositoryImpl这个文件的话,那么UserRepository的实现类就是UserRepositoryImpl,而UserRepositoryImpl这个类又是SimpleJpaRepository的子类,如此一来就很好的解决了上面的这个不用写implements的问题。我们通过阅读这个类的源代码可以发现,里面包装了entityManager,底层的调用关系是entityManager在进行CRUD。
-------简单查询
Spring Data JPA的独特之处就是简单查询根本不用写实现类,直接写接口就好,它能根据你的接口去生成sql,很酷炫吧
按照方法名解析规则如下:
find+全局修饰+By+实体属性名称+限定词+连接词+(其他实体属性)+OrderBy+排序属性+排序方向
例如:
findDistinctByFirstNameIgnoreCaseAndLastNameOrderByAgeDesc(String firstName,String lastName)
(哇,好长的方法啊!!好神奇)
全局修饰符:distinct,top,first
关键词(限定词+连接词):IsNull,IsNotNull,Like,NotLike,Containing,In,NotIn,IgnoreCase,Between,Equals,
LessThan,GreaterThan,After,Before
排序方向:Asc,Desc
嵌套实体方法命名规则:
例如:
List<Person> findByAddress_ZipCode(ZipCode zipCode)
构词法:主实体中的子实体名称+_+子实体属性名称
通过关键词构造方法如下:
// 对应sql: select * from user where phone like '136%' and address like '%路%'
findByPhoneStartingWithAndAdressContaining(String phone, String address);
所有支持的关键词:
这张主要了解一下jpa的定义和最基础的用法。
标签:Jpa,Spring,接口,jpa,JPA,Data,实现 From: https://blog.51cto.com/u_16082902/6214170