SpringbBoot之JPA批量更新 |
您所在的位置:网站首页 › jpa批量删除数据 › SpringbBoot之JPA批量更新 |
菜鸟学习,不对之处,还请纠正。
需要批量更新数据库的某些数据,项目使用的是JPA,刚对mybatis熟悉一点,又换成了JPA。。。 有点懵。 查询了一番之后,发现可以使用 InfindByIdIn(Collection c)where id in (?)试验了一下,可以满足我的需求。先贴代码 package com.yd.lipstick.dao.write; import com.yd.lipstick.entity.Position; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import java.util.Collection; @Repository public interface PositionWriteDao extends JpaRepository { // @Modifying // @Transactional // @Query(value = "update Position p set p.status=2 where p.deviceId=?1 and p.positionId in (?2)") // int update(String deviceId, Collection collection); @Modifying @Transactional @Query(value = "update Position p set p.status=2 where p.deviceId=:deviceId and p.positionId in (:collection)") int update(@Param("deviceId") String deviceId, @Param("collection") Collection collection); }贴出来的两种update实现的功能是一样的。 第一种使用的是索引参数:索引值从1开始,查询中"?X"个数需要与方法定义的参数个数相一致,并且顺序也要一致。 注释:上面代码中的?1,?2表示参数的占位符,需要和方法中所传递的参数顺序一致。X是从1开始。 第二种使用的是命名参数(推荐使用此方式):可以定义好参数名,赋值时使用@Param("参数名"),而不用管顺序。 注释:上面代码中:devideId ,:collection 表示为参数命名,方法中所传递的参数使用@Param注解标识命名参数。这种方式不用管参数的顺序。 @Modifying注解 1、在@Query注解中编写JPQL实现DELETE和UPDATE操作的时候必须加上@modifying注解,以通知Spring Data 这是一个DELETE或UPDATE操作。 2、UPDATE或者DELETE操作需要使用事务,此时需要 定义Service层,在Service层的方法上添加事务操作。 3、注意JPQL不支持INSERT操作。
参考自https://www.cnblogs.com/zhaobingqing/p/6864223.html https://blog.csdn.net/java_ying/article/details/80511452 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |