MyBatis中foreach元素用法解析
来源:互联网 发布:windows相对路径写法 编辑:程序博客网 时间:2024/05/20 03:44
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/70946761冷血之心的博客)
动态SQL是MyBatis框架的一个重要功能。如果你是用JDBC,如果你想要根据需要去拼装SQL语句,是一件比较麻烦的事,但是MyBatis提供对SQL语句动态的组装能力。大量的判断都可以在其映射文件XML里边配置,以达到我们需要大量代码才能实现的功能,大大减少了我们编写代码的工作量,这体现了MyBatis的灵活性、高度可配置性和可维护性。
动态SQL包括以下几种元素:
这篇博客,我们讨论其foreach元素的用法。如上所示,foreach元素是一个循环语句,它的作用是遍历集合。foreach能够很好地支持数组和List、Set接口的集合,对此提供遍历功能。
foreach元素中有六个需要配置的属性:
- collection:代表传递进来的参数名称,可以是一个数组、List、Set等集合
- item:配置的是循环中的当前元素
- index:配置的是当前元素在集合中的位置下标
- open和close:配置的是以什么符号将这些集合元素包装起来
- separator:是各个元素的间隔符
<selectid="getProductBean"parameterType="java.util.List" resultType="com.ywq.ProductBean"> select productid, developerid, platformid, businessid from product_basic_info where productid in <foreach collection="list" item="product" separator="," > #{product} </foreach> </select>
结果报错了!!!
解决办法:
由于使用了in关键字,所以需要加上foreach中的open和close属性。
<selectid="getProductBean"parameterType="java.util.List" resultType="com.ywq.ProductBean"> select productid, developerid, platformid, businessid from product_basic_info where productid in <foreach collection="list" item="product" open="(" separator="," close=")" > #{product} </foreach> </select>
以前自己在使用foreach元素的时候,都是进行insert操作,所以并没有使用过open和close属性,导致错误的发生,甚至在之前还一度以为这两属性是多余的,看来真是惭愧呀,存在即是合理的。
附上批量往表中插入数据的代码:
其中Base_Column_List是一个标签,里边包含表中各个列信息。
<!-- 表 product批量添加记录 --><insert id="insert2ProductTable4Batch" parameterType="java.util.List"> INSERT INTO product ( <include refid="Base_Column_List" /> ) VALUES <foreach collection="list" item="product" separator=","> ( #{product.businessid}, #{product.productid}, #{product.email}, #{product.productype}, #{product.typename}, #{product.developerid}, #{product.productname}, #{product.isdeleted}, #{product.comefrom}, #{product.registertime}, #{product.totalUser} ) </foreach></insert>
在SQL中对于in语句使用的还是比较多的,但是对于大量数据的in 语句必须注意,因为它会消耗大量的资源,导致性能下降。还有一些数据库的SQL对执行的SQL长度也有限制,所以我们在使用时需要预估一下这个collection对象的长度。
以上是对MyBatis中动态SQL功能中foreach元素使用方法的一个简单总结,如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~hgjg
- MyBatis中foreach元素用法解析
- mybatis中foreach用法
- mybatis中foreach的用法
- mybatis foreach 解析
- MyBatis foreach用法
- mybatis之foreach用法
- mybatis foreach collection 用法
- Mybatis- foreach用法
- Mybatis <foreach>标签用法
- MyBatis foreach用法
- mybatis foreach用法
- mybatis中sql标签、where标签、foreach标签用法
- mybatis 中 foreach collection的三种用法
- mybatis 中 foreach collection的三种用法
- mybatis 中 foreach collection的三种用法
- mybatis 中 foreach collection的三种用法
- mybatis 中 foreach collection的三种用法
- mybatis 中 foreach collection的三种用法
- 汇编地址表的使用
- linux内核之链表操作解析
- 两坐标点间距离公式
- 【C#基础知识点】——字符串(String)
- java AQS 框架一些理解
- MyBatis中foreach元素用法解析
- 1414: [ZJOI2009]对称的正方形 Hash+二分
- 值迭代、策略迭代
- 锚点使用总结
- 一次完整的HTTP事务是怎样一个过程?
- 利用jquery对MVC输出的json对象进行处理,修改日期格式及取字符串的一部分
- -01-摄像头DVP输入IP核设计【OV5640】
- sha、md5、decupt与加盐结合
- UVA 548 根据中序和后序建立二叉树并求根到叶的最短路