• SpringbBoot之JPA批量更新


    菜鸟学习,不对之处,还请纠正。

    需要批量更新数据库的某些数据,项目使用的是JPA,刚对mybatis熟悉一点,又换成了JPA。。。

    有点懵。

    查询了一番之后,发现可以使用

    In findByIdIn(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<Position,Long> {

    // @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<String> 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<String> 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
    ---------------------
     
    原文:https://blog.csdn.net/jdd92/article/details/81533353
     

  • 相关阅读:
    [Angular2 Form] Build Select Dropdowns for Angular 2 Forms
    [Angular2 Form] Create Radio Buttons for Angular 2 Forms
    [Angular2 Router] Exiting an Angular 2 Route
    [Angular2 Router] Optional Route Query Parameters
    JS 实现地区,省份,城市,县区4级联动
    Linux web工程部署远程必备软件安装
    [置顶] 白话01背包
    APUE读书笔记-第17章-高级进程间通信
    UVA 10779 Collectors Problem(最大流)
    (二) win8+XAML Binding(数据绑定)
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/11088841.html
Copyright © 2020-2023  润新知