foreach标签在批量插入数据库时非常方便,但是很容易出错,我没有注意括号的位置让我折腾了一个半小时找问题,醉醉哒,所以在这里记录一下foreach的使用。

首先,这是insert批量插入正确的代码:

<insert id="insertList" parameterType="map" useGeneratedKeys="true" keyProperty="messageId" >
insert into message_table (
message_id
to_member_id,
message_title,
message_body,
message_time,
message_update_time,
message_state,
message_type,
read_member_id,
del_member_id,
to_member_name,
create_time,
type_sn,
type )values
<foreach collection="messageLt" item="m" separator="," >
(#{m.messageId},
#{m.toMemberId},
#{m.messageTitle},
#{m.messageBody},
UNIX_TIMESTAMP(NOW()),
#{m.messageUpdateTime},
#{m.messageState},
#{m.messageType},
#{m.readMemberId},
#{m.delMemberId},
#{m.toMemberName},
UNIX_TIMESTAMP(NOW()),
#{m.typeSn},
#{m.type})
</foreach> </insert>

我犯的错误是:

  insert tableName(
)values(
<foreach collection="messageLt" item="m" separator="," open="(" close=")" >
</foreach>
)

产生的SQL结果是:insert tableName(a,b,c)values((?,?,?),(?,?,?),(?,?,?))

报错原因插入行数不对应,正常结果应该是  insert tableName(a,b,c)values(?,?,?),(?,?,?),(?,?,?)。比较可以很明显看出问题。

下面是select的foreach使用:

<select id="selectBatchMCoupon" parameterType="map" resultMap="memberCouponResultMap">
select
mc.mcoupon_id,
mc.member_id,
mc.coupon_id,
mc.mcoupon_create_time,
mc.class_show,
c.coupon_title
from
member_coupon mc
left join eland_coupon c on c.coupon_id=mc.coupon_id
where 1=1 and mc.class_show=0 and
<if test="couponLt != null and couponLt != ''">
mc.coupon_id in
<foreach collection="couponLt" item="coupon" open="(" close=")" separator=",">
#{coupon}
</foreach> </if>
</select>

我犯的错误是:

 <if test="couponLt != null and couponLt != ''">
<foreach collection="couponLt" item="coupon" open="(" close=")" separator=",">
mc.coupon_id = #{coupon}
</foreach> </if>

这个错误犯的我都尴尬。。。

mybatis foreach的使用的更多相关文章

  1. 解决mybatis foreach 错误: Parameter '__frch_item_0' not found

    解决mybatis foreach 错误: Parameter '__frch_item_0' not found 在遍历对象的属性(是ArrayList对象)时报错: org.mybatis.spr ...

  2. mybatis foreach批量插入数据:Oracle与MySQL区别

    mybatis foreach批量插入数据:Oracle与MySQL不同点: 主要不同点在于foreach标签内separator属性的设置问题: separator设置为","分 ...

  3. mybatis foreach报错It was either not specified and/or could not be found for the javaType Type handler

    或许是惯性思维,在mybatis使用foreach循环调用的时候,很多时候都是传一个对象,传一个List的情况很少,所以写代码有时候会不注意就用惯性思维方法做了. 今天向sql传参,传了一个List作 ...

  4. Mybatis foreach标签含义

    背景 考虑以下场景: InfoTable(信息表): Name Gender Age Score 张三 男 21 90 李四 女 20 87 王五 男 22 92 赵六 女 19 94 孙七 女 23 ...

  5. mybatis foreach 循环 list(map)

    直接上代码: 整体需求就是: 1.分页对象里面有map map里面又有数组对象 2.分页对象里面有list list里面有map map里面有数组对象. public class Page { pri ...

  6. mybatis <forEach>标签的使用

    MyBatis<forEach>标签的使用 你可以传递一个 List 实例或者数组作为参数对象传给 MyBatis.当你这么做的时候,MyBatis 会自动将它包装在一个 Map 中,用名 ...

  7. myBatis foreach详解【转】

    MyBatis的foreach语句详解 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,ope ...

  8. MyBatis foreach标签遍历数组

    有时候开发中需要根据多个ID去查询,可以将ID封装为List或者数组然后使用MyBatis中的foreach标签构建in条件. 这里我将ID封装为String[]作为参数. <select id ...

  9. mybatis ForEach Collection集合等规范解析(转)

    转自:http://blog.csdn.net/wj3319/article/details/9025349 在SQL开发过程中,动态构建In集合条件查询是比较常见的用法,在Mybatis中提供了fo ...

  10. mybatis foreach标签

    一.批量插入数据 示例:添加订单商品表 1.模型层的相应代码 /** * 添加订单商品表 * @param ordergoods * @return */ public boolean addOrde ...

随机推荐

  1. 出售一套Unity + Lua热更新框架代码

    出售一套Unity + Lua的客户端框架代码,功能有资源管理.网络通信.配置文件解析.热更新.文件读写.Lua加密揭秘.UI框架.打包工具.编辑器工具等,已经在多个实际项目(已上线)中使用.代码优雅 ...

  2. scala的面向对象编程

    1.scala的简单编程 2.构造方法 辅助构造函数是在主构造函数没有的情况下,执行的构造函数. 3.object的介绍 4.半生类和半生对象 5.半生的案例程序(半生类可以调用半生) 6.apply ...

  3. java中字节流与字符流的区别

    字节流 在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字 ...

  4. oracle正则表达式的用法

    <SPAN style="FONT-SIZE: 18px">Oracle 正则表达式函数-REGEXP_SUBSTR 使用例子 .5个参数 第一个是输入的字符串 第二个 ...

  5. ROW_NUMBER() OVER() 用法

    语法 ROW_NUMBER ( ) OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause ) 参数 PARTITIO ...

  6. 1.Linux是什么?

    UNIX设计理念: 所有的程序或系统装置都是文件. 不管构建编辑器还是附属文件,所写的程序只有一个目的,就是有效地完成目标 操作系统:应用程序->系统调用->内核->硬件.其中系统调 ...

  7. MVC4与JSON交互的知识总结

    一:jquery传递JSON给MVC4后台 1.JSON传递单个参数给Controller某个Action方法 [前台js] $(document).ready(function () { var p ...

  8. Linux 利用进程打开的文件描述符(/proc)恢复被误删文件

    Linux 利用进程打开的文件描述符(/proc)恢复被误删文件 在 windows 上删除文件时,如果文件还在使用中,会提示一个错误:但是在 linux 上删除文件时,无论文件是否在使用中,甚至是还 ...

  9. 电脑文件出现“windows-文件发生意外问题-可修复(严禁修改)-错误代码0X00000BF8”错误,怎么办

    电脑文件出现"windows-文件发生意外问题-可修复(严禁修改)-错误代码0X00000BF8"错误,怎么办 下载一个"纵情文件修复器"修复一下就可以了 下载 ...

  10. 偶遇到 java.util.ConcurrentModificationException 的异常

    今天在调试程序 遇到了如此问题 贴上代码来看看稍后分析 List<String> list = null;boolean isUpdate = false;try { list = JSO ...