首页>>后端>>Spring->spring

spring

时间:2023-11-30 本站 点击:0

一、 方法名定义查询

Defining Query Methods(方法名定义查询)简称DQM,是MyBatis中没有的,Spring Data JPA中的一大特性,其功能是根据指定规则的方法名定义即可对数据库进行查询、条件过滤、筛选、统计等基本功能,具有统一命名规范,减少SQL编写提高开发效率等好处。

其优点如下:

统一命名规范

减少SQL编写、提高开发效率

不用死磕方法名

1.1 方法名查询使用方式

通过根据定义方法名的方式来对数据库进行查询的操作,只需继承JPA中的顶级接口Repository或者其任意子接口即可实现此功能。

示例代码如下

publicinterfaceUserRepositoryextendsJpaRepository<User,Long>{//AND的关系List<User>getUsersByUsernameAndAge(@Param(value="username")Stringusername,@Param(value="age")intage);//OR的关系List<User>getUserByEmailOrPhone(@Param(value="email")Stringemail,@Param(value="phone")Stringphone);//distinct过滤重复List<User>getDistinctByUsername(@Param(value="username")Stringusername);//StartsWith:以...开头的List<User>getUserByUsernameStartsWith(@Param(value="username")Stringusername);//使倒序排序List<User>getUserByUsernameOrderByAgeDesc(@Param(value="username")Stringusername);}

以上根据方法名语义定义的方法在测试时只需要调用即可,它们分别能实现以下的功能。

getUsersByUsernameAndAge

根据用户名和年龄两个参数查询出用户的所有数据

getUserByEmailOrPhone

根据邮箱或者电话查询出用户的所有数据

getDistinctByUsername

根据用户名查询出不重复用户的所有数据

getUserByUsernameStartsWith

查询以用户名指定字符开头的所有用户数据

getUserByUsernameOrderByAgeDesc

根据用户名查询出用户的所有数据,并根据age进行倒序排序

下面的表格是DQM语法中常用的关键字列表,方便使用时查阅

图片来源:拉勾教育

除了表格中以find开头的关键字,JPA还支持readgetquerystreamcountexistsdeleteremove 等前缀的方法名语义

Simple Examples ↓

LongcountUserByUserId(LonguserId);//根据用户id统计用户总数voidremoveByUserId(LonguserId);//根据用户id删除用户UserqueryUserByAge(intage);//根据用户年龄查询用户

1.2 特殊查询(First、Top)

当只需要查询个别数据或前几条数据时,可以使用FirstTop关键字来定义方法名,使其达到限制的目的。

Code Example

List<User>getFirst3ByOrderByAgeDesc();//查询用户前三条数据,并根据倒序排序List<User>getTop2ByUsername(Stringusername);//根据相同的用户名获取前两条数据

在以上代码中:数字表示查询数据的条目,如果不指定查询的数量,则查询的限制结果默认为1

限制表达式也支持 Distinct 去重复关键字 ?‍?

方法名查询策略配置

DQM的语法有两种,一种是通过方法名语义判断,还有一种是通过@Query注解实现。这两种方式可以通过@EnableJpaRepositories 来自由切换这两种模式,来决定是使用@Query还是方法名语义推断

要配置查询策略只需要在启动类上添加@EnableJpaRepositories注解,并指明配置即可。

//使用了默认策略@EnableJpaRepositories(queryLookupStrategy=QueryLookupStrategy.Key.CREATE_IF_NOT_FOUND)@SpringBootApplicationpublicclassSpringDataJpaApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringDataJpaApplication.class,args);}}

注解里面的QueryLookupStrategy.Key属性一共有以下三个值

Create:使用根据方法名语义推断,如果方法名不符合规则,启动的时候会报异常,并且不能使用 @Query注解,否则会报错。

USE_DECLARED_QUERY:使用@Query注解创建,必须要至少有一个或多个@Query注解相关的方法,如果没有找到将会报错,使用了这种策略就不能使用方法名语义推断的方式了,和CREATE策略相反。

CREATE_IF_NOT_FOUND:默认配置,先用声明方式@Query进行查找,如果没找到相关注解,则会用 Create 的方法名创建规则创建一个查询(语义要符合规范)如果两种都不满足,启动就会报错。


Done.


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Spring/4486.html