mybatis动态更新及批量动态插入

本文介绍了在MyBatis中如何进行动态更新和批量动态插入操作,特别提醒在批量插入时需要注意的数据拼接问题,并提供了解决方案。修订方法包括优化实体类、DAO层以及Mapper.xml配置,通过工具类计算对象非空属性数量,实现动态插入并返回主键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态更新

<update id="updateElevator" parameterType="com.diantijiang.saas.data.elevator.Elevator" >
    update dc_elevator
    <set>
      <if test="inspectionCode != null">inspection_code = #{inspectionCode,jdbcType=VARCHAR},</if>
      <if test="brandCode!=null">brand_code = #{brandCode},</if>
      <if test="modelSpecs!=null">model_specs = #{modelSpecs},</if>
      <if test="elevatorType!=null">elevator_type=#{elevatorType},</if>
      <if test="idDistrict!=null">id_district=#{idDistrict},</if>
      <if test="idPropertyCompany!=null">id_property_company=#{idPropertyCompany},</if>
      <if test="idServiceCompany!=null">id_service_company=#{idServiceCompany},</if>
      <if test="idServiceManager!=null">id_service_manager=#{idServiceManager},</if>
      <if test="contractCode!=null">contract_code=#{contractCode},</if>
      <if test="runStatus!=null">run_status=#{runStatus},</if>
      <if test="qrCodeCheck!=null">qr_code_check=#{qrCodeCheck},</if>
      <if test="qrCodeProduct!=null">qr_code_product=#{qrCodeProduct},</if>
      <if test="lastAnnualDate!=null">last_annual_date=#{lastAnnualDate},</if>
      <if test="nextAnnualDate!=null">next_annual_date=#{nextAnnualDate},</if>
      <if test="lastMaintainDate!=null">last_maintain_date=#{lastMaintainDate},</if>
      <if test="nextMaintainDate!=null">next_maintain_date=#{nextMaintainDate},</if>
      <if test="repairTimes!=null">repair_times=#{repairTimes},</if>
      <if test="maintainTimes!=null">maintain_times=#{maintainTimes},</if>
      <if test="accessoriesExchanges!=null">accessories_exchanges=#{accessoriesExchanges},</if>
      <if test="installDate!=null">Install_date=#{installDate},</if>
      <if test="status!=null">status=#{status},</if>
      <if test="createdBy!=null">created_by=#{createdBy},
MyBatis批量操作主要是为了提高数据处理的效率,特别是当需要一次性更新插入大量记录时。它通过将一系列SQL语句组织成批处理(Batch Operation)的方式,减少了与数据库交互的次数,降低了网络开销。 1. **批量更新**:在 MyBatis 中,可以使用 `update` 或者 `batch` 元素配合 `foreach` 进行批量更新。首先,在 XML 映射文件中定义一个包含 `update` 语句的元素,并设置 `parameterType` 和 `resultType`。然后,使用 `foreach` 遍历一个 Java 对象列表,每个对象对应一条更新记录,生成多个 `UPDATE` 语句一起发送到数据库。 ```xml <update id="updateBatch" parameterType="java.util.List"> UPDATE table <set> <if test="field != null">field = #{field},</if> <!-- 条件判断 --> <!-- 可以添加更多字段... --> </set> WHERE id IN <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item.id} </foreach> </update> ``` 2. **批量插入**:类似地,使用 `insert` 和 `foreach` 可以批量插入数据。XML 映射文件中的 `insert` 元素不需要 `resultType`,因为插入通常不会返回值。插入操作会将整个列表作为参数一次性发送到数据库: ```xml <insert id="insertBatch" parameterType="java.util.List"> INSERT INTO table (field1, field2, ...) VALUES <foreach item="item" index="index" collection="list" open="(" separator=")," close=")"> (#{item.field1}, #{item.field2}, ...), </foreach> </insert> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凌兮~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值