Spring Data Jpa 接口方法名

本文介绍了Spring Data JPA,它是Spring对JPA规范的封装,提供简便的数据访问操作。通过接口定义即可实现CRUD功能,无需实现类。详细探讨了SimpleJpaRepository的作用以及方法名自动映射到SQL查询的规则,包括全局修饰符、关键词、排序方向和嵌套实体方法命名。示例展示了如何通过方法名进行复杂查询。
摘要由CSDN通过智能技术生成

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的定义和最基础的用法。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洪君.

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值