| 全查询 | findAll() | list集合 |
| 主键查询 | findById() | Optional< UserEntity>实体对象 |
| 自定义条件查询 | findByNameAndPassword(String name, Long password) | UserEntity实体 |
| 自定义模糊查询 | findByNameLike(“%”+name+“%”) | list集合 |
| 自定义查询 | 需要在jpa中声明自定义的方法,确保命名规范! | 可自定义 |
四、在spring data jpa中有4种查询方式:
1、@Query注解查询
-
简介:在dao中增加接口方法并在方法上增加@Query注解并在注解中写hql语句来进行查询
-
示例:
public interface TestDao extends JpaRepository<Test, Long> {
@Query(“select t from Test t where t.name = :keyWord”)
List findTest(@Param(“keyWord”) String keyWord);
}
@Query参数说明:
| 名称 | 简介 |
| — | — |
| value | 指定JPQL语句,当nativeQuery=true时是原生的sql语句 |
| countQuery | 指定count的JPQL语句,不指定则自动生成,当nativeQuery=true时是原生的sql语句 |
| countProjection | 依据哪个字段来count一般默认即可 |
| nativeQuery | 默认是false,表示value 里面是不是原生的Sql 语句 |
| name | 指定一个query 的名字,必须是唯一的。 如果不指定,默认的生成规则是:{$domainClass}.${queryMethodName}
|
| countName | 指定一个count 的query 名字,必须是唯一的。如果不指定,默认的生成规则是:{$domainClass}.${queryMethodName}.count
|
2、自定义简单查询
-
简介:在dao中增加接口方法,并按照spring data jpa支持的模式命名方法,spring data jpa会按照指定规则生成sql语句
-
示例:
public interface TestDao extends JpaRepository<Test, Long> {
List findByKeyword(String keyword);
}
3、通过Example查询
-
简介:JpaRepository接口中包含了QueryByExampleExecutor,这个接口支持将实体作为参考进行查询
-
示例:
//service中(前提是testDao继承了JpaRepository接口)
public List findTests() {
Test test = new Test();
test.setName(“aaa”);
return testDao.findAll(Example.of(test));
}
- 注意事项:实体中只要有值的内容都会被放进查询条件中,若实体中包含基础类型例如int 就会以0进行匹配。
五、查询结果格式
1、Entity-List 使用默认形式即可
2、Map-List
- 注意:其中as name必须写,不写则map中key为下标。
@Query(“select new map(t.name as name,t.value as value) from Test t where t.name = :keyWord”)
List<Map<String,Object>> findTest(@Param(“keyWord”) String keyWord);
3、Vo-List
- 注意:与Map类似,使用构造方法的形式进行初始化,传入顺序必须与构造函数顺序一致
@Query(“select new TestVo(t.name as name,t.value as value) from Test t where t.name = :keyWord”)
List findTest(@Param(“keyWord”) String keyWord);
4、Projection-List
- 注意:TestProjection为接口,有对应的get 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 方法,这种模式就不需要使用new的方式传值,支持@value注解来指定getAll的数据来源。