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注解标识命名参数。这种方式不用管参数的顺序。
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
菜鸟学习,不对之处,还请纠正。 需要批量更新数据库的某些数据,项目使用的是JPA,刚对mybatis熟悉一点,又换成了JPA。。。有点懵。查询了一番之后,发现可以使用In findByIdIn(Collection&lt;?&gt; c) where id in (?) 试验了一下,可以满足我的需求。先贴代码package com.yd.lipstick....
本文出处:https://www.jianshu.com/p/c84a91992c32
SpringDataJPA到目前为止已经解决了大量的问题,但依然还有一些比较重要的问题没有解决:
…批量删除和更新的操作
…事务处理问题
Spring最大的一个优点就是声明式的事务,在原来的开发环境中我们需要在beans.xml中配置事务在哪些类上有作用,现在SpringBoot已经帮助我们完成了这些配置,我们仅仅需要加几个Annotation就可以解决问题。
我们假设我们的开发环境是这样的:有两个类,一个是Classr
Jpa实现批量存储的方法
springdata jpa 实现批量存储、更新
使用springdata jpa的save()方法在存储数据时,都会先执行select语句,在执行insert语句,相当于每存储一条数据,就会执行两次sql,效率非常慢
在properties配置文件中加入
spring.jpa.properties.hibernate.jdbc.batch_size=5000
@Repository
public interface PersonDao extends JpaRepository<PersonPO,String>, JpaSpecificationExecutor<PersonPO>{
在controller层注入该类,并调用即可
默认的删除方法有:
delete(实体),只能传入一个可以对应到数据库的实体,即数据库中存在一样的数据
jpa 批量更新数据
1、在@Query注解中编写JPQL实现DELETE和UPDATE操作的时候必须加上@modifying注解,以通知Spring Data 这是一个DELETE或UPDATE操作
2、UPDATE或者DELETE操作需要使用事务,此时需要 定义Service层,在Serv...
在使用JPA中,发现JPA实现了一些方法,如find,save等,但是没有update。经过学习后,提供两种update的方式:
一、使用@Query,编写nativeSQL,通过原生的SQLupdate。优点,可以自己定制,缺点,SQL语句繁琐,不灵活,不能实现动态更改某个属性。
二、通过set方法加save方法。直接find出要修改的数据,通过set方法先把对象的某个属性更新,然后调用sa...
本文将研究如何使用Hibernate/JPA进行批量插入或更新实体。批量处理使我们可以在单个网络调用中向数据库发送一组SQL语句。这样,可以优化应用程序的网络和内存使用率。
1、创建实体
首先,创建一个School实体:
@Entity
@Data
public class School {
@GeneratedValue(strategy = Generati...
您好,关于 JPA 实现不同字段批量更新的问题,可以通过使用 CriteriaUpdate 对象来实现。具体步骤如下:
1. 创建 CriteriaBuilder 对象,用于构建 CriteriaUpdate 对象。
2. 创建 CriteriaUpdate 对象,并指定要更新的实体类。
3. 使用 CriteriaBuilder 对象创建更新条件,并设置要更新的字段和值。
4. 使用 EntityManager 对象执行更新操作。
希望这个回答能够帮到您。
UICollectionView the item height must be less than the height of the UICollectionView minus the sect
UITableview滚动到指定位置需要注意的