SpringDataJPA 多种查询方式
java
it书童
2020-11-19 16:31:48
0赞
0踩
967阅读
0评论
使用JPQL的方式查询
使用Spring Data JPA提供的查询方法已经可以解决大部分的应用场景,但是对于某些业务来说,我们还需要灵活的构造查询条件,这时就可以使用@Query注解,结合JPQL的语句方式完成查询
@Query 注解的使用非常简单,只需在方法上面标注该注解,同时提供一个JPQL查询语句即可
dao 层
@Query(value = "from Customer where custName = ?")
public Customer findJpql(String custName);
调用
@Test
public void testFindJPQL() {
Customer customer = customerDao.findJpql("卡卡罗特");
System.out.println(customer);
}
更新操作
dao 层
// 默认情况下,占位符与参数顺序一一对应,也可用数字指定对应关系
@Query(value = "update Customer set custName = ?2 where custId = ?1")
@Modifying // 表明当前执行的是一个更新操作
public void updateCustomer(long custId, String custName);
springDataJpa中使用jpql完成更新/删除操作时,需要手动添加事务的支持。由于事务默认会在执行结束之后自动回滚,因此需要用 @Rollback
设置不自动回滚
@Test
@Transactional // 事务支持
@Rollback(value = false) // 不自动回滚
public void testUpdateCustomer() {
customerDao.updateCustomer(4L, "王子");
}
使用原生 sql
Spring Data JPA 同样也支持原生 sql 语句的查询,用 nativeQuery 作为标识即可
@Query(value = "select * from cst_customer where cust_name like ?1", nativeQuery = true)
public List<Object []> findSql(String name);
@Test
public void testFindSql() {
List<Object[]> list = customerDao.findSql("王%");
for (Object[] obj : list) {
System.out.println(Arrays.toString(obj));
}
}
方法命名规则查询
顾名思义,方法命名规则查询就是根据方法的名字,就能创建查询。只需要按照Spring Data JPA提供的方法命名规则定义方法的名称,就可以完成查询工作。Spring Data JPA在程序执行的时候会根据方法名称进行解析,并自动生成查询语句进行查询
按照Spring Data JPA 定义的规则,查询方法以findBy开头,涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性首字母需大写。框架在进行方法名解析时,会先把方法名多余的前缀截取掉,然后对剩下部分进行解析。
dao 层
public Customer findByCustName(String custName);
public List<Customer> findByCustNameLike(String custName);
// 使用客户名称模糊匹配和客户所属行业精准匹配的查询
public Customer findByCustNameLikeAndCustIndustry(String custName, String custIndustry);
调用
@Test
public void testFindByCustName() {
Customer customer = customerDao.findByCustName("孙悟空");
System.out.println(customer);
}
@Test
public void testFindByCustNameLike() {
List<Customer> list = customerDao.findByCustNameLike("王%");
for (Customer customer : list) {
System.out.println(customer);
}
}
@Test
public void findByCustNameLikeAndCustIndustry() {
Customer customer = customerDao.findByCustNameLikeAndCustIndustry("卡%", "保卫地球");
System.out.println(customer);
}
- 上一篇: Spring Data JPA 的实现过程
- 下一篇: Specifications动态查询

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/832
精品付费
个人开发者通过payjs接入微信支付
4928
0
这一次,真正掌握composer
2679
0
相关推荐
maven 的安装与配置
743
0
Java String 字符串详解
758
0
Java 案例:模拟电脑连接usb设备
957
0
Java System 类如何使用
739
0
Java 转换流解决编码乱码问题
752
0
Java 网络编程入门
876
0
Mybatis 二级缓存
580
0
使用Jpql实现在JPA中的复杂查询
1542
0
Hystrix 服务降级
1039
0
centos 部署多个 tomcat
638
0