Spring Boot Jpa自定义查询

🎈博客主页:🌈我的主页🌈
🎈欢迎点赞 👍 收藏 🌟留言 📝 欢迎讨论!👏
🎈本文由 【泠青沼~】 原创,首发于 CSDN🚩🚩🚩
🎈由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!🌠个人主页



有的时候,这里提供的查询关键字并不能满足我们的查询需求,这个时候就可以使用 @Query 关键字,来自定义查询 SQL

🌟 一、查询 Id 最大的 User

public interface UserDao extends JpaRepository<User,Integer> {

    @Query(nativeQuery = true,value = "select * from user where id =(select max(id) from user)")
    User Maxuser();
}

🌟 二、查询有参数的方式

  • 利用下标索引传参,索引参数如下所示,索引值从1开始,查询中 ”?X” 个数需要与方法定义的参数个数相一致,并且顺序也要一致:
@Query("select u from user u where id>?1 and username like ?2")
List<User> selectUserByParam(int id, String name);
  • 命名参数这种方式可以定义好参数名,赋值时采用@Param(“参数名”),而不用管顺序:
@Query("select u from user u where id>:id and username like :name")
List<User> selectUserByParam2(@Param("name") String name, @Param("id") int id);

🌟 三、 @Modifying 注解与@Transactional 注解

涉及到数据修改操作,可以使用 @Modifying 注解,@Query 与 @Modifying 这两个 annotation 一起声明,可定义个性化更新操作,例如涉及某些字段更新时最为常用,示例如下:

@Modifying
@Query("update user set age=:age where id>:id")
int updateUserById(@Param("age") int age, @Param("id") int id);

注意:

  • 可以通过自定义的 JPQL 完成 UPDATE 和 DELETE 操作. 注意: JPQL 不支持使用 INSERT
  • 方法的返回值应该是 int,表示更新语句所影响的行数
  • 在调用的地方必须加事务,没有事务不能正常执行
  • 默认情况下, Spring Data 的每个方法上有事务, 但都是一个只读事务. 他们不能完成修改操作

Spring Data 中的事务问题:

  • Spring Data 提供了默认的事务处理方式,即所有的查询均声明为只读事务
  • 对于自定义的方法,如需改变 Spring Data 提供的事务默认方式,可以在方法上添加 @Transactional 注解
  • 进行多个 Repository 操作时,也应该使它们在同一个事务中处理,按照分层架构的思想,这部分属于业务逻辑层,需要在Service 层实现对多个 Repository 的调用,并在相应的方法上声明事务
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值