iBatisNet 中 iterate标签的使用
<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-追加到最前面的内容
<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);
iBatisNet 中 iterate标签的使用的更多相关文章
- Html中<font>标签的使用
Html中<font>标签的使用 <!doctype html> <html lang="en"> <head> <meta ...
- jsp2.0+中的标签文件,JSP Fragment技术
刚进新公司不久,今天在看到项目中用到了.tag文件.刚开始我还以为这个是第三方类似freemarker的模板技术.问了下项目组的其他人员,原来这是jsp2.0以来就有的JSP Fragment技术.以 ...
- Html中<a>标签的样式的设置
html中<a>标签的样式的设置.. ------------------------ <html> <head> <title>这是网页选项卡的名称& ...
- 禁止手机页面中A标签长按弹出路径框
//禁止手机页面中A标签长按弹出路径框 window.onload=function(){ document.documentElement.style.webkitTouchCa ...
- JSP中<img>标签引用本地图片
问题描述: jsp页面中<img>标签如何读取本地文件夹中的图片. 问题起因: 由于上传图片至本地文件夹中,图片路径为: D:/upload/file/image/img.jpg 所以将这 ...
- HTML中<meta>标签如何正确使用
HTML中<meta>标签如何正确使用 如果我们在浏览器中按下F12或者Ctrl+shift+J,便可以打开开发者工具,在element中即可看到<head>元素中有不少< ...
- Jquery获取iframe子/父窗口中的标签
获取子窗口中的标签: $("#id",document.frames('iframename').document); 获取父窗口中的标签: $('#id', parent.doc ...
- 在php中,如何将一个页面中的标签,替换为用户想输出的内容
前言:釜山行,暴露人性, ———————————————————————————————————————————————————————————————————————————— 今天说一个最简单的例 ...
- JSP内置标签 JSP中JavaBean标签 JSP开发模式 EL和JSTL快速入门
2 JSP内置标签(美化+业务逻辑) 1)为了取代<%%>脚本形式,使用JSP标签/JSP动作,目的:与JSP页面的美化,即JSP面页都是由标签组成,不再有其它的内容 2)JSP内 ...
随机推荐
- Net程序调试
Net程序调试 前言 作为一个.net开发工程师,不管是在写桌面程序.服务程序或web程序,在开发阶段,我们必须非常熟悉vs的动态调试技能,当然web程序可能还需要调试前端的脚本或样式,这不在本文的讨 ...
- [Codevs 1107][NOIP 1107]等效表达
主题连接:http://codevs.cn/problem/1107/ 一道非常奇妙的题目. 对于算术表达式一类的问题,能够採用编译原理里的后缀表达式的方式来做.详细做法是分别维护两个栈,一个栈里保存 ...
- TensorFlow 学习(十二)—— 高级函数
tf.map_fn(fn, elems):接受一个函数对象,然后用该函数对象对集合(elems)中的每一个元素分别处理, def preprocessing_image(image, training ...
- 华为云软件开发云:容器DevOps,原来如此简单!
当开发团队把代码提交到 Git 应用仓库的那一刻,他们心里在想什么? 祈祷没有bug?渴望回家补觉?产品经理Go Die? 对,也不对.因为这只是最终发布万里长征的一小步,接下来要面对测试环境.生产环 ...
- Android 平台下Ftp 使用模拟器需要注意的问题
以下代码在pc上测试通过,可是在android模拟器上就不工作,不过还可以链接到服务器但不能得到文件 纠结了半天,原来是模式的问题,具体请Google 模拟器中采用建议被动模式 public void ...
- JSON.parse(JSON.stringify()) 实现对对象的深度拷贝,从而互不影响
JSON.parse(JSON.stringify({"key": "value"})) 根据不包含引用对象的普通数组深拷贝得到启发,不拷贝引用对象,拷贝一个字 ...
- [STM32] IAP不能跳转到APP
用w5500做网页iap升级, 文件上传正确, 对比内部flash内容也正确, 就是不跳转. 查资料, 怀疑是中断的影响. 在跳转前关闭中断, 问题解决! // IAP程序使用了中断, 跳转前关闭 _ ...
- Chrome浏览器离线安装 Postman 5.X 报错
下载和安装请参考 博友文章http://www.cnblogs.com/wangfeng520/p/5892125.html 尝试安装此扩展程序时出现以下警告: Ignored insecure CS ...
- virtualbox--在xp设置ubuntu虚拟机网络 主宿机能互通,宿机能通过主机上网Host-Only + Bridged
由于最近要写一个简单的C/S模式的程序,刚好虚拟机装了个ubuntu12.04TLS,正好拿来当服务器测试,但是发现无法ping通.刚学习ubuntu,实在不熟,苦苦弄了2小时,才弄明白,在此记录一下 ...
- memmove、memccpy和memcpy
这三个函数都是内存拷贝,目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中. void *memmove(void *dest,void*src,int count) v ...