SSM Mybatis 中传入List实现 批量插入、批量更新、批量删除

简介: SSM Mybatis 中传入List实现 批量插入、批量更新、批量删除

上代码(Service和ServiceImpl 省略):

 

1. 批量插入



Mapper层:


int insertList(List<UsersModel> list);


对应的mapper.xml


  <!--批量插入信息-->
  <insert id="insertList" parameterType="java.util.List">
    insert into users(
    id, name
    )
    values
    <foreach collection="list" item="item" index="index" separator=",">
      (
      #{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}
      )
    </foreach>
  </insert>


如果List数据量比较大,可以考虑将List分批次插入


2. 批量更新:



批量更新只提供更新单个字段的,因为更新多个字段无论哪种批量更新方案,我都用起来很不舒服,所以不做提供。


Mapper层:


 int updateList(List<AgentApply> list);


对应的mapper.xml:


<!--批量更新-->
  <update id="updateList" parameterType="java.util.List">
    update agent_apply
    set apply_time=
    <foreach collection="list" item="item" index="index"
             separator=" " open="case" close="end">
      when id=#{item.id} then #{item.applyTime}
    </foreach>
    where id in
    <foreach collection="list" index="index" item="item"
             separator="," open="(" close=")">
      #{item.id,jdbcType=INTEGER}
    </foreach>
  </update>

3. 批量删除:



PS:一般查询出来的List都是包含对象在里面的,那么怎么清理出单独包含ID的list呢?


可以参考下面方式,第一个listData是从数据库查询出来的list数据,每个元素都是一个对象;


然后单独把里面每个元素的id给取出来放入新的list(ids)。


 List<AgentRechargeOrder> listData = agentRechargeOrderServiceImpl.getListByXXXX(XXXX);
 List<Integer> ids = listData.stream().map(AgentRechargeOrder::getId).collect(Collectors.toList());


如果不想清除出单独的id的list,直接传整个List也是可以的, 这样mapper层传值就改成对应的包含对象的List即可。


Mapper层:


int deleteMany(List<Integer> ids);


对应的mapper.xml:


    <delete id="deleteMany">
        delete  from agent_recharge_order where id in
        <foreach collection="list" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </delete>


最后补充个提醒:


因为批量操作会拼接成很长很长的mysql语句,所以mysql server在接收数据包的时候,对这个数据包的大小是有设置项限制的。


如果超过设置的值,就会报错:


 Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large


那么就需要修改这个设置项,所以推荐提前先把对应的设置值稍微弄大一点

相关文章
|
8月前
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
|
8月前
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
|
5月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
7月前
|
缓存 NoSQL Java
在 SSM 架构(Spring + SpringMVC + MyBatis)中,可以通过 Spring 的注解式缓存来实现 Redis 缓存功能
【6月更文挑战第18天】在SSM(Spring+SpringMVC+MyBatis)中集成Redis缓存,涉及以下步骤:添加Spring Boot的`spring-boot-starter-data-redis`依赖;配置Redis连接池(如JedisPoolConfig)和连接工厂;在Service层使用`@Cacheable`注解标记缓存方法,指定缓存名和键生成策略;最后,在主配置类启用缓存注解。通过这些步骤,可以利用Spring的注解实现Redis缓存。
90 2
|
7月前
|
Java 数据库连接 Android开发
SSM框架——使用MyBatis Generator自动创建代码
SSM框架——使用MyBatis Generator自动创建代码
80 2
|
8月前
|
Java 关系型数据库 MySQL
SpringBoot整合JUnit、MyBatis、SSM
SpringBoot整合JUnit、MyBatis、SSM
55 4
|
7月前
|
SQL Java 数据库连接
MyBatis SQL 批量更新(代码➕案例)
MyBatis SQL 批量更新(代码➕案例)
966 0
|
8月前
ssm(Spring+Spring mvc+mybatis)——web.xml
ssm(Spring+Spring mvc+mybatis)——web.xml
|
8月前
|
Java Spring
ssm(Spring+Spring mvc+mybatis)Spring配置文件——applicationContext.xml
ssm(Spring+Spring mvc+mybatis)Spring配置文件——applicationContext.xml
|
8月前
ssm(Spring+Spring mvc+mybatis)Service层实现类——DeptServiceImpl
ssm(Spring+Spring mvc+mybatis)Service层实现类——DeptServiceImpl