`
jsjzhou
  • 浏览: 28556 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

ibatis之iterator研究

阅读更多

     iBtatis的动态特性在很多时候能帮助大家做很多事情.Iterator就是用一个列表动态的生成sql的一部分的动态特性.网上这方资料有很多,个人觉得不是很全.在这里抛砖引玉,望高手多多指教.

    iterator的语法相对比较简单.下面摘抄语法于下.(引用于http://blog.csdn.net/dinglinhu/archive/2008/05/27/2487647.aspx )

Iterate:这属性遍历整个集合,并为List集合中的元素重复元素体的内容。
Iterate的属性:
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property - 类型为java.util.List的用于遍历的元素(必选)
open - 整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction - 每次遍历内容之间的字符串,用于定义AND或OR(可选)

 

 

在比较多的网站上就property 很多不同的说法.下面我们通过实例觉得我们的结论:

eg1.传入的参数是一个list类型.此时property不需要.

<delete id="Employee.delete" parameterClass="list">
        DELETE FROM Employee      WHERE 1=1
            <iterate prepend=" AND id in " open="(" close=")" conjunction=",">
                #[]#
            </iterate>   
    </delete>
 

 

调用形式:

                List<Integer> ids=new ArrayList<Integer>();


		for (int i = 1; i < 10; i++) {
			ids.add(i);
		}
		sqlMapClient.delete("Employee.delete",ids);

    eg2.传入的参数不是list类型,是一个简单的Pojo,但是该pojo有个list类型的属性

<delete id="Employee.delete2"  parameterClass="org.jenfer.entity.Dept">
		DELETE FROM employee 	WHERE 1=1
			<iterate property="empIds" prepend=" AND id in " open="(" close=")" conjunction=",">
				#empIds[]#
			</iterate>	
	</delete>
 

   调用形式:

                Dept dept=new Dept();
		List<Integer> empIds=new ArrayList<Integer>();
		dept.setEmpIds(empIds);


		
		for (int i = 1; i < 10; i++) {
			empIds.add(i);
		}
		
		sqlMapClient.delete("Employee.delete2",dept);

 eg3:传入的参数不是list类型,是一个简单的Pojo,但是该pojo有个list类型的属性,而且list的元素类型是一个Pojo,不是一个基本类型或者包装类.

 

<delete id="Employee.delete1" parameterClass="org.jenfer.entity.Dept">
		DELETE FROM employee 	WHERE 1=1
			<iterate property="employees" 
prepend=" AND username in " open="(" close=")" conjunction=",">
				#employees[].username#
			</iterate>	
	</delete>
 

 调用形式:

		List<Employee> employees=new ArrayList<Employee>();
		Dept dept=new Dept();
		dept.setEmployees(employees);

		
		Employee employee=null;
		for (int i = 1; i < 10; i++) {
			employee=new Employee();
			employee.setUsername("zhangsan"+i);
			employees.add(employee);
		}
		
		sqlMapClient.delete("Employee.delete1",dept);

 

综上所述:在eg1在的情况下property属性不需要.在eg2,3情况下property是需要的.另外注意eg2,eg3的的语法稍有不同.

分享到:
评论

相关推荐

    ibatis入门与ibatis迭代的用法

    **ibatis入门** iBatis,一款轻量级的Java持久层框架,是MyBatis的前身,由美国华人开发团队开发。它提供了一个SQL、Java和XML的映射框架,将SQL语句与Java代码分离,使得开发者可以更加灵活地处理数据库操作,避免...

    iBATIS内置别名列表

    15. **iterator**:`java.util.Iterator` #### 四、数据源工厂类型 数据源工厂负责创建和管理数据源实例。iBATIS支持以下几种数据源工厂类型的内置别名: 1. **SIMPLE**:`...

    Struts2+Spring2+iBatis2整合的例子

    例如,使用、等标签创建表单,&lt;s:iterator&gt;遍历结果列表。 8. **测试运行**:运行项目,通过浏览器访问不同的URL,测试增删改查功能是否正常。例如,访问/user/add提交用户信息,访问/user/list显示用户列表。 这...

    ibatis struts集成案例

    本案例主要讨论的是如何将两个经典的Java Web框架——iBatis和Struts进行集成,以实现数据的增删改查功能。首先,我们需要理解这两个框架的核心概念。 iBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写...

    ibatis的两种方式实现批处理.doc

    for (Iterator&lt;Examlog&gt; iter = examlogList.iterator(); iter.hasNext();) { Examlog log = iter.next(); smc.update("insertExamlog", log); } smc.executeBatch(); } catch (Exception e) { // TODO: ...

    ssi整合开发包括分页

    视图部分可以使用Struts2的标签库,如`s:iterator`遍历分页结果并渲染到页面上。同时,也可以通过Action传递总记录数和总页数,以便在前端实现翻页功能。 总结来说,"ssi整合开发包括分页"这一主题涵盖了Struts2的...

    针对淘宝的网络爬虫设计

    - **缺点**:部分功能相对落后(例如,NodeList类未实现Iterator接口),可能需要后续更新或替换更为现代的框架。 - **应用场景**:适用于提取商品信息页面的关键数据,如商品名称、价格、图片链接等。 ##### 2. ...

    阿里代码规范练习题目及答案.pdf

    - iBATIS 的 `queryForList` 分页接口由于性能问题不建议使用。 - 定义清晰的 SQL 查询语句,通过参数实现分页。 - 虽然存储过程可以提高分页效率,但避免过度依赖,以保持SQL的透明度。 5. **权限控制**: - ...

    (完整版)阿里巴巴编码规范(Java)题库.doc

    * 在遍历集合时,需要对符合一定条件的元素进行删除,需要使用 Iterator 方式,如果有并发,需要对 Iterator 对象加锁。 九、基本数据类型与包装数据类型的使用标准 * 所有的 POJO 类属性必须使用包装数据类型。 *...

    strats2标签用法

    结合其他技术,如Hibernate(持久化)、Spring(依赖注入和事务管理)、iBATIS(SQL映射)等,Struts2 可以帮助构建完整的Java EE解决方案。 总的来说,Struts2 标签是Struts2 框架的核心组成部分,它们提供了一种...

    阿里代码规范练习题目及答案.docx

    - 使用`Iterator`进行删除是安全的,但如果有并发访问,需要对`Iterator`对象加锁。 - Java允许在遍历过程中删除元素,但需要正确使用迭代器。 11. **基本类型与包装类型**: - POJO类属性推荐使用包装类型,以...

    struts2入门教程

    - **高级标签**:介绍一些高级标签的使用方法,如&lt;s:iterator&gt;用于循环遍历集合。 #### 九、表达式OGNL - **OGNL概述**:简述OGNL(Object-Graph Navigation Language)的概念及其作用。 - **OGNL基础**:介绍OGNL...

    SSH框架部分常见面试题.pdf

    常见的 ORM 框架还有 TopLink、iBatis 等。 DB、DBMS、DBA DB 是数据库,DBMS 是数据库管理系统,DBA 是数据库管理员。 ORM ORM 是对象关系映射,用于将 Java 对象转换到数据库表中。 主键和索引 主键是唯一...

    阿里代码规范练习题目.docx

    - **安全删除**:在遍历集合的过程中,如果需要删除元素,推荐使用`Iterator`方式进行操作,并考虑并发情况下的安全性。(选项B) #### 十一、数据类型选择 - **POJO属性类型**:所有POJO类的属性推荐使用包装数据...

    mybatis-cursor:mybatis光标问题(https

    在MyBatis中,`Cursor`接口位于`org.apache.ibatis.cursor`包下,它是`java.util.Iterator`的扩展,提供了一种流式处理查询结果的方式。当执行一个返回多条记录的Mapper方法时,可以选择返回`Cursor`对象。使用`...

Global site tag (gtag.js) - Google Analytics