Spring-Data-JPA 自定义查询方法底层如何处理
public interface UserDao extends JpaRepository<User, Integer>{
//自定义查询
/**
* 方法签名已经告诉spring-data-jpa足够的信息来创建这个方法的实现了
* spring-data会检查Repository接口中所有的方法,解析方法的名称,并且基于
* 被持久化的对象来试图推测方法的目的。
*
* findUserByName 是如何映射的在springdata中的,springdata允许在方法名称使用四个动词:get,find,read
* 和count.其中get,find,read是同义的,这个是三个动词对应Repository方法都会查询数据并且
* 返回对象,而动词count则会返回匹配的对象数量,而不是对象本身。
*
* findUserByName方法非常简单,需要属性name来匹配查询User,springdata的处理也更加有意思,
* Repository方法有有个动词,一个可选的主题(Subject),关键词By以及一个断言所组成
*
* find是查询动词 User为主题 Name为断言,对于大多数场景主题是会省略的
*
* findUserByName中by后面的Name为断言也就是查询的参数,在断言中会有一个或多个限制结果的条件。如果没有就默认按照等于去查询。
*
*
*/
User findUserByName(String name);
/**
* 功能:通过姓名进行模糊查询集合
* 此时参数传递的形式为 "%李四%"
*/
List<User> findByNameIsLike(String name);
/**
* 功能:查询大于或等于参数为年龄的集合
*
* findByAgeIsGreaterThanEqual:中断言为Age属性也就是查询的查询,限制条件是IsGreaterThanEqual大于或等于
*/
List<User> findByAgeIsGreaterThanEqual(Integer age);
/**
* 功能:通过id降序排列
* 不能写成findByIdOrderByDesc:这样写的话,是通过id查询对象集合,并且结果以id的降序排列
*/
List<User> findByOrderByIdDesc();
}
以下来自官方手册:
JAVA程序猿成长之路
分享学习资源,学习方法,记录程序员生活。