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