Mybatis的foreach实现批量sql写法

 

目录

使用原因:

foreach标签介绍:

代码示例:

1.oracle数据库写法

2.mysql数据库写法

总结:


使用原因:

 批量新增和批量修改在业务中是很常见的,一条sql访问数据库和通过代码循环体中循环访问数据库做单个数据新增修改相比较下:一条sql访问数据库性能上明显提升,代码且简洁明了

foreach标签介绍:

  - collection:必填,值为要迭代循环的属性名。这个属性值的情况有很多
  - item :变量名,值为从迭代对象中取出来的每一个值
  - index: 索引的属性名,在集合数组情况下值为当前索引值,当迭代循环的对象时Map类型时,这个值为map的key值
  - open: 整个循环内容开头的字符串
  - close:整个循环内容结尾的字符串
  - separator: 每次循环的分隔符

代码示例:

1.oracle数据库写法

 <insert id="insertCustomersBatch" parameterType="java.util.List">
        insert into tableName(UUID,NAME)
        <foreach collection="list" item="item" index="index" separator="union all">
            (
            SELECT
            #{item.uuid},
            #{item.customersname}
            FROM DUAL
            )
        </foreach>
    </insert>

2.mysql数据库写法

<!-- 
 方式一 :
 一条 SQL,插入的多条数据之间通过”,” 分隔开
--> 
 <insert id="insertCustomersBatch" parameterType="java.util.List">
        insert into tableName(UUID,NAME) VALUES
        <foreach collection="list" item="item" separator=",">
            ( 
            #{item.uuid},
            #{item.customersname}
            )
        </foreach> 
  </insert>

<!--
 方式二 :
 MySql 默认的情况下是不支持使用”;” 分隔开多条 SQL 进行执行的,需要设置一个连接属性 
 allowMultiQueries=true来支持。可以在连接数据库的时候设置这个属性。
jdbc.url=jdbc:mysql://localhost:3306/mybatis-study?allowMultiQueries=true
 --> 
<insert id="addEmpsByList" parameterType="com.jas.mybatis.bean.Employee">
        <!-- 
            每插入一条数据就执行一次 SQL,中间用";"分隔开 
        -->
        <foreach collection="list" item="emp" separator=";">
            insert into tableName(UUID,NAME) VALUES
              (#{item.uuid}, #{item.customersname})
        </foreach>
    </insert> 

总结:

这篇博文主要对 MyBati 动态 SQL 中的foreach进行了介绍与其使用场景的应用,MyBatis 还提供了其他的标签来支持动态 SQL。比如:ifchoose (when, otherwise)、trim (where, set),有关的详细信息可以到官方文档进行深入了解,希望这篇博文能够为你提供一些帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值