一:前言

现在这个项目使用的是iBatis,我刚刚开始的时候说是用MyBatis,因为我以前用过,觉得还是比较好用的啊,而且不像iBatis样,查什么一个字段不能多也不能少,觉得好无语啊。

二:内容

自己现在接触的iterator有如下两种用处

  (一):批量循环插入

      批量插入的话有可以分开说,一种是在后台代码中,批量插入,一种是在数据库中循环插入

      (1):在先说后台批量插入的,直接上代码

    return (Integer)this.getSqlMapClientTemplate().execute(new SqlMapClientCallback() {

            public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
executor.startBatch();
int count=0;
for(User u:list){
executor.insert("batchAddUser", u);
}
count=executor.executeBatch();
return count;
}
});   

insert into user(id,,user_id,user_name,start_time,end_time,) values (#id#,#userId#,#userName#,#startTime#,#endTime#)

    (2):在sql中进行循环插入

      

<selecet id="batchInsert" parameterClass="java.util.List">
insert <iterator>
into user(id,user_id,user_name.start_time,end_time)
values(#list[].id#,#list[].useId#,#list[].userName#,#list[].startTime#,#list[].endTime#)
</iterator>
</select>

  (二):在sql中我们会使用到in这种查询,in里面一般就如(1,2,3,...)这种形式所以我们可以用iterator来循环生成这种形式

    

<select id="get_user" parameterClass="java.util.Map"
resultMap="getUser">
<![CDATA[
select * from user o where o.user_role=2
]]>
<isNotEmpty prepend="and" property="list">
o.user_id IN
<iterate close=")" open="(" conjunction="," property="list">#list[]#</iterate>
</isNotEmpty>
</select>
这里必须加上property="pilesList",否则会报下面的错误
--- Cause: com.ibatis.sqlmap.client.SqlMapException: ParameterObject
or property was not a Collection, Array or Iterator.

二是使用list当作参数

<select id="getUser" parameterClass="java.util.List" resultMap="get_user">
<![CDATA[
select * from user o where o.user_role=2
]]>
and o.pile_id IN
<iterate close=")" open="(" conjunction=",">#list[]#</iterate>
</select> 这里面就不用加property="list"这个属性,这里还有一点要注意的就是不能加成这样的
<select id="getUser" parameterClass="java.util.List" resultMap="get_user">
<![CDATA[
select * from user o where o.user_role=2
]]>
<isNotEmpty property="list">
and o.pile_id IN
<iterate close=")" open="(" conjunction=",">#list[]#</iterate>
</isNotEmpty>
</select>
如果加了这个判断也是会报错的,这点使得我很与郁闷啊,这个isNotEmpty判断不了list是否为空的,list的空值是[]写的,所以只能用if判断。

三:总结

今天知道了旁边的同事要走,其实挺无语的。不知道怎么的,我的感触还是很深的,每个人都有自己的路去选择,尽量保持平常的心态吧。我的心很大,所以我要坚定下去。努力加油。都冲吧。

iBatis之Iterator的使用的更多相关文章

  1. ibatis遍历数组:ParameterObject or property was not a Collection, Array or Iterator.

    这个问题在使用ibatis的<iterate></iterate>时出现的,很简单,但是蛋疼了很久,记下来 首先从错误提示看,明显意思是你给出ibatis的参数不对路,人家不认 ...

  2. ibatis实现Iterate的使用

    <iterate property="" /*可选, 从传入的参数集合中使用属性名去获取值, 这个必须是一个List类型, 否则会出现OutofRangeException, ...

  3. Struts2.3+Spring+iBatis 初学之问题判断

    小白接下来将会总结下我再学习Spring的学习过程中(ssi框架)中遇到的问题,以后会不断的进行更新. 最容易犯的问题,就是声明bean的时候,属性引用其他声明的bean的时候,name没有进行好对应 ...

  4. Spring+Ibatis集成开发实例

    首先简历数据库demo(本文选mysql) 数据库脚本: CREATE TABLE `ibatis` (  `id` varchar(20) NOT NULL,  `name` varchar(20) ...

  5. ibatis使用--SqlMapClient对象

    SqlMapClient对象 这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作.这个类是我们使用iBATIS的最主要的类.它是线程安全的.通常,将它定义为单例. ...

  6. ibatis实战之一对多关联

    在实际开发中,我们常常遇到关联数据的情况,如User对象拥有若干Book对象 每个Book对象描述了归属于一个User信息,这种情况下,我们应该如何处理? 通过单独的Statement操作固然可以实现 ...

  7. Spring + iBATIS完整示例

    最近研究了一下Spring + iBATIS.发现看别人的例子是一回事,自己写一个完整的应用又是另外一回事.自己受够了网上贴的一知半解的代码. iBATIS是一个持久化框架,封面了sql过程,虽然sq ...

  8. spring+struts2+ibatis 框架整合以及解析

    一. spring+struts2+ibatis 框架 搭建教程 参考:http://biancheng.dnbcw.net/linux/394565.html 二.分层 1.dao: 数据访问层(增 ...

  9. ibatis 参数和结果的映射处理

    SqlMapClient对象 这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作.这个类是我们使用iBATIS的最主要的类.它是线程安全的.通常,将它定义为单例. ...

随机推荐

  1. MySQL 从入门到删库

    基本操作 登陆指令 mysql -u用户名 -p密码(可以非明文输入) -h主机/IP -D端口 --prompt 提示符 修改提示符 \D 日期 \d 当前数据库 \h 服务器名 \u 用户名 // ...

  2. Android面试收集录 OpenGL ES

    1.如何用OpenGL ES绘制一个三角形? 编写一个类实现Renderer接口,实现onDrawFrame方法,onSurfaceChanged方法,onSurfaceCreated方法 编写一个类 ...

  3. 隐藏WPF ToolBar 左侧的移动虚线和右侧的小箭头

    原文:隐藏WPF ToolBar 左侧的移动虚线和右侧的小箭头   上面的图是两个工具栏的链接处.   去除蓝色部分的方法是 设置工具栏的ToolBarTray.IsLocked附加选项为True   ...

  4. 小议Android多进程以致Application多次初始化

    最近遇到一个bug,当应用加了多进程后,比如总共进程数为N,会出现在`startService()`时`onStartCommand()`方法会被重复调用`(N-1)`次的奇怪现象. ***## 祸起 ...

  5. jmeter3.2版本如何进行webservice接口功能测试

    jmeter3.2版本之后就没有SOAP/XML-RPC Request插件了,所以没办法直接进行webservice接口的测试. 原理上: Web service一般就是用SOAP协议通过HTTP来 ...

  6. Selenide 简单实现自动化测试

    Selenide 网址:http://selenide.org/ github 地址:https://github.com/codeborne/selenide Selenide 早些年一直使用,中间 ...

  7. Linux SPI总线和设备驱动架构之二:SPI通用接口层

    通过上一篇文章的介绍,我们知道,SPI通用接口层用于把具体SPI设备的协议驱动和SPI控制器驱动联接在一起,通用接口层除了为协议驱动和控制器驱动提供一系列的标准接口API,同时还为这些接口API定义了 ...

  8. 剑指offer:斐波那契数列

    目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n< ...

  9. Linux 监测系统资源

    Top;1; Linux监控磁盘性能 yum install sysstat iostat -x 1 %util:磁盘使用io所占百分比

  10. linux下搜索find命令拾遗

    强制删除项目下面的所有.svn文件目录,find . -name ‘.svn’ -exec rm -rf {} \; empty显示所有的空白文件,并显示详细:find . -empty size显示 ...