<iterate>标签,顾名思义是用来遍历标签用的。

支持的属性如下:

属性 说明 是否必选
open 遍历后生成的这些sql,开始的第一个符号 可选
close 遍历后生成的这些sql,最后一个符号 可选
prepend 添加在open指定的符号前面 可选
property 被遍历的属性(往往是一个集合) 可选
conjunction 遍历后每一条sql之间的间隔 可选

各个击破,没有什么比例子最直接的了。

1. open 和close

insert into table (id,name) values<iterate open="(" close=")">   #ID#,#Name#</iterate>

不用考虑该语句的合理性,只是为了解释这两个属性随便写的,最终生成的SQL如下:

insert into table (id,name) values ('123','wh');

其中红色的两个括号,就是通过open 和close指定的。

2.conjunction-用于分割各个语句

select * from user where id in (
<iterate conjunction=",">
    #id#
</iterate>)

生成的SQL如下:

select * from user where id in (1,2,3,4,5);

其中红色的逗号  ,  就是通过conjunction指定的。

3. prepend-追加到最前面的内容

select * from user

<iterate prepend="WHERE" conjunction="AND">
  id=#id#
</iterate>

该语句更没啥价值,只为了说明该属性,生成SQL如下:

select * from user where id='1' and id='2' and id='3'

其中prepend指定的where会被添加在<iterate>标签的最前面,conjunction作为间隔符被添加在每一条语句中间。

4.property-官教说该变量是必须的,其实并不是必须的

如果有这么一个类定义:public class Dept{
   public string ID{get;set;}
   public List<User> Users{get;set;}
}

public class User{   public string ID{get;set;}   punlic string Name{get;set;}}
对应的sqlmp如下(property必须的情况):
<insert id="insert_u" parameterClass="Dept"> //指定parameterClass是Dept
  insert into user (id,name) values
    <iterate property="Users" conjunction=","> //设置property=Users,意思是要遍历的是Dept.Users属性
        (#Users[].ID#,#Users[].Name#) //因为Users是一个集合,所以写法要求Users[]的方式访问
    </iterate>
</insert>

//调用mapper.insert("isert_u",dept)

输出的SQL如下:

insert into user (id,name) values

('1','name1'),

('2','name2')

对应的sqlmp如下(property非必须的情况):
<insert id="insert_u" parameterClass="list"> //指定parameterClass是list,是一个集合
  insert into user (id,name) values
    <iterate conjunction=","> //不需要设置property,因为我们直接访问整个集合,而不是集合的某个属性
        (#[].ID#,#[].Name#) //因为本身是一个集合,所以写法要求[]的方式访问即可
    </iterate>
</insert>
//调用mapper.insert("isert_u",userList);

最新文章

  1. Linux终端杀手、程序员利器-Tmux
  2. (实用篇)jQuery+PHP+MySQL实现二级联动下拉菜单
  3. 新建并保存一个空的Excel
  4. css实现“固定表头带滚动条”的table
  5. C语言链表全操作(增,删,改,查,逆序,递增排序,递减排序,链式队列,链式栈)
  6. oracle分析函数技术详解(配上开窗函数over())
  7. AR增强现实开发介绍
  8. 【BZOJ3771】Triple 生成函数 FFT 容斥原理
  9. [CTSC2012]熟悉的文章(后缀自动机+动态规划)
  10. bouncing-balls
  11. 防止vue文件中的样式出现‘污染’情况(html5 scoped特性)
  12. 移动端picker插件
  13. EasyUi通过OCUpload上传及POI上传 实现导入xls表格功能
  14. 你都用python来做什么?
  15. Android 属性动画实现一个简单的PopupWindow
  16. ssh整合之Session延迟加载问题的解决
  17. ul&gt;li中自定义属性后取值的问题
  18. SpringMVC读取配置文件
  19. JS 区分单击双击
  20. 关于asp.net假分页的删除操作的随笔

热门文章

  1. JavaScript经典面试题(二)
  2. 2014-07-20 体验到的不是北漂easy
  3. XMPP之ios即时通讯客户端开发-mac上搭建openfire服务器(二)
  4. PL/SQL一个简短的引论
  5. CentOS下Apache的停止和卸载
  6. git 修改仓库地址
  7. JScript实现将指定目录下的vc工程加到解决方案
  8. Android app设置全屏模式
  9. echarts 堆叠折线
  10. Python Tricks(二十二)—— small tricks