Mybatis的批量查询,批量更新

批量查询操作

0. 前言

忽略controller、service、repository等逻辑层代码。

1. mapper层定义查询方法

注@Param参数是绑定xml里面的collection参数

List<TestDTO> queryByIds(@Param("idList") List<Long> idList);

2. xml文件中写SQL语句

<select id="queryByIds" resultType="TestDTO">
   select * from test_table
   <where>
      <if test="idList != null and idList.size() > 0">
         id in
        <foreach collection="idList" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
      </if>
  </where>
</select>

批量更新操作

0. 前言

假设项目已经连接好数据库,定义好了实体类 且实体类名为MybatisDTO;

id主键
address地址

实现需求为通过id批量更新地址信息。

Class MybatisDTO{
    Integer id;
    String address;
}

1. Controller层

@ApiOperation("批量更新")
@PutMapping(value = "/batchUpdate")
public ResponseEntity batchUpdate(@PathVariable("organizationId") Long tenantId,
                                  String defaultAddress,
                                  @RequestBody List<MybatisDTO> mybatisDTOS){
        mybatisService.batchUpdate(mybatisDTOS,defaultAddress);
        return ResponseEntity.ok(HttpStatus.OK);
    }

2. service层

public interface BatchUpdateService{
    void batchUpdate(List<MybatisDTO> mybatisDTOS, String defaultAddress);
}

public class BatchUpdateServiceImpl extends BatchUpdateService{
    @Autowird
    private BatchUpdateMapper batchUpdateMapper;
    public void batchUpdate(List<MybatisDTOS> mybatisDTOS,String defaultAddress){
        batchUpdateMapper.batchUpdate(mybatisDTOS,defaultAddress);
    }
}

3. mapper层

public interface BatchUpdateMapper{
    void batchUpdate(List<MybatisDTO> mybatisDTOS,String defaultAddress);
}

4. XML文件

    <update id="batchUpdate" parameterType="com.org.test.dto.MybatisDTO">
        update hcbm_sign_archive
        <trim prefix="set archive_address =">
        <if test="defaultAddress !=null and defaultAddress !=''">
                #{defaultAddress}
        </if>
        <if test="defaultAddress == null">
        <trim prefix="(case id" suffix="end)">
            <foreach collection="MybatisDTOS" item="a" index="index">
                when #{a.id} then #{a.archiveAddress}
            </foreach>
        </trim>
        </if>
        </trim>
        where
        <foreach collection="MybatisDTOs" separator="or" item="a" index="index">
            id=#{a.id}
        </foreach>
    </update>
//这种方式一直报错 未解决
<!--        <foreach collection="MybatisDTOs" item="item" index="index">-->
<!--            set archive_address = #{item.archiveAddress}-->
<!--            where id = #{item.id};-->
<!--        </foreach>-->
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

璃墟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值