iBatis之Iterator的使用
一:前言
现在这个项目使用的是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的使用的更多相关文章
- ibatis遍历数组:ParameterObject or property was not a Collection, Array or Iterator.
这个问题在使用ibatis的<iterate></iterate>时出现的,很简单,但是蛋疼了很久,记下来 首先从错误提示看,明显意思是你给出ibatis的参数不对路,人家不认 ...
- ibatis实现Iterate的使用
<iterate property="" /*可选, 从传入的参数集合中使用属性名去获取值, 这个必须是一个List类型, 否则会出现OutofRangeException, ...
- Struts2.3+Spring+iBatis 初学之问题判断
小白接下来将会总结下我再学习Spring的学习过程中(ssi框架)中遇到的问题,以后会不断的进行更新. 最容易犯的问题,就是声明bean的时候,属性引用其他声明的bean的时候,name没有进行好对应 ...
- Spring+Ibatis集成开发实例
首先简历数据库demo(本文选mysql) 数据库脚本: CREATE TABLE `ibatis` ( `id` varchar(20) NOT NULL, `name` varchar(20) ...
- ibatis使用--SqlMapClient对象
SqlMapClient对象 这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作.这个类是我们使用iBATIS的最主要的类.它是线程安全的.通常,将它定义为单例. ...
- ibatis实战之一对多关联
在实际开发中,我们常常遇到关联数据的情况,如User对象拥有若干Book对象 每个Book对象描述了归属于一个User信息,这种情况下,我们应该如何处理? 通过单独的Statement操作固然可以实现 ...
- Spring + iBATIS完整示例
最近研究了一下Spring + iBATIS.发现看别人的例子是一回事,自己写一个完整的应用又是另外一回事.自己受够了网上贴的一知半解的代码. iBATIS是一个持久化框架,封面了sql过程,虽然sq ...
- spring+struts2+ibatis 框架整合以及解析
一. spring+struts2+ibatis 框架 搭建教程 参考:http://biancheng.dnbcw.net/linux/394565.html 二.分层 1.dao: 数据访问层(增 ...
- ibatis 参数和结果的映射处理
SqlMapClient对象 这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作.这个类是我们使用iBATIS的最主要的类.它是线程安全的.通常,将它定义为单例. ...
随机推荐
- Java泛型的基本介绍与使用
为什么要使用泛型? 在Java中增加泛型之前,泛型程序设计是用继承来实现的,例如ArrayList,只维护Object引用的数组: public class ArrayList{ private Ob ...
- 「日常训练」 Mike and Fun (CFR305D2B)
题意(CodeForces 548B) 每次对01矩阵中的一位取反,问每次操作后,单列中最长连续1的长度. 分析 非常非常简单,但是我当时训练的时候WA了四次...无力吐槽了,人间 不值得.jpg 代 ...
- 怎么在windows10中关闭Windows Defender?
通过修改注册表,永久禁用Windows Defender 打开注册表编辑器. 按 Win +R键入regedit,点击确定. 定位需要修改的注册表 其路径如下 HKEY_LOCAL_MACHIN ...
- 在Kotlin上怎样用Mockito2 mock final 类(KAD 23)
作者:Antonio Leiva 时间:Mar 2, 2017 原文链接:https://antonioleiva.com/mockito-2-kotlin/ 如我们在前面文章中谈到的,Kotlin最 ...
- Assetbundle1
AssetBundle运行时加载:来自文件就用CreateFromFile(注意这种方法只能用于standalone程序)这是最快的加载方法也可以来自Memory,用CreateFromMemory( ...
- CSS : @media 示例
.example { padding: 20px; color: white; } /* Extra small devices (phones, 600px and down) */ @media ...
- laxcus的新功能:支持表跨数据库操作
关系数据库的层次结构,是账号.数据库.表,一个账号下可以有多个数据库,每个数据库有多个表,但是不同数据库下的表是不能够互相操作的.例如:"select a.*, b.* from Title ...
- 关于Scala文件操作中出现的问题
在各种项目中,我们常常需要用到文件操作,笔者在近期的项目中遇到了一个与文件操作相关的问题. 在代码实现的过程中,笔者首先定义了一个文件路径:def PATH = "/a/b/c.txt&qu ...
- redis安装与启动
安装简介: 在安装redis前需要了解redis官方发布时的版本规则,redis官方约定次版本号(即第一个小数点后的数字)为偶数的版本是稳定版(如2.8版,3.0版),奇数版本则为非稳定版本(如2.7 ...
- BZOJ 2756 SCOI2012 奇怪的游戏 最大流
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2756 Description Blinker最近喜欢上一个奇怪的游戏. 这个游戏在一个 N ...