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,一款轻量级的Java持久层框架,是MyBatis的前身,由美国华人开发团队开发。它提供了一个SQL、Java和XML的映射框架,将SQL语句与Java代码分离,使得开发者可以更加灵活地处理数据库操作,避免...
15. **iterator**:`java.util.Iterator` #### 四、数据源工厂类型 数据源工厂负责创建和管理数据源实例。iBATIS支持以下几种数据源工厂类型的内置别名: 1. **SIMPLE**:`...
例如,使用、等标签创建表单,<s:iterator>遍历结果列表。 8. **测试运行**:运行项目,通过浏览器访问不同的URL,测试增删改查功能是否正常。例如,访问/user/add提交用户信息,访问/user/list显示用户列表。 这...
本案例主要讨论的是如何将两个经典的Java Web框架——iBatis和Struts进行集成,以实现数据的增删改查功能。首先,我们需要理解这两个框架的核心概念。 iBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写...
for (Iterator<Examlog> iter = examlogList.iterator(); iter.hasNext();) { Examlog log = iter.next(); smc.update("insertExamlog", log); } smc.executeBatch(); } catch (Exception e) { // TODO: ...
视图部分可以使用Struts2的标签库,如`s:iterator`遍历分页结果并渲染到页面上。同时,也可以通过Action传递总记录数和总页数,以便在前端实现翻页功能。 总结来说,"ssi整合开发包括分页"这一主题涵盖了Struts2的...
- **缺点**:部分功能相对落后(例如,NodeList类未实现Iterator接口),可能需要后续更新或替换更为现代的框架。 - **应用场景**:适用于提取商品信息页面的关键数据,如商品名称、价格、图片链接等。 ##### 2. ...
- iBATIS 的 `queryForList` 分页接口由于性能问题不建议使用。 - 定义清晰的 SQL 查询语句,通过参数实现分页。 - 虽然存储过程可以提高分页效率,但避免过度依赖,以保持SQL的透明度。 5. **权限控制**: - ...
* 在遍历集合时,需要对符合一定条件的元素进行删除,需要使用 Iterator 方式,如果有并发,需要对 Iterator 对象加锁。 九、基本数据类型与包装数据类型的使用标准 * 所有的 POJO 类属性必须使用包装数据类型。 *...
结合其他技术,如Hibernate(持久化)、Spring(依赖注入和事务管理)、iBATIS(SQL映射)等,Struts2 可以帮助构建完整的Java EE解决方案。 总的来说,Struts2 标签是Struts2 框架的核心组成部分,它们提供了一种...
- 使用`Iterator`进行删除是安全的,但如果有并发访问,需要对`Iterator`对象加锁。 - Java允许在遍历过程中删除元素,但需要正确使用迭代器。 11. **基本类型与包装类型**: - POJO类属性推荐使用包装类型,以...
- **高级标签**:介绍一些高级标签的使用方法,如<s:iterator>用于循环遍历集合。 #### 九、表达式OGNL - **OGNL概述**:简述OGNL(Object-Graph Navigation Language)的概念及其作用。 - **OGNL基础**:介绍OGNL...
常见的 ORM 框架还有 TopLink、iBatis 等。 DB、DBMS、DBA DB 是数据库,DBMS 是数据库管理系统,DBA 是数据库管理员。 ORM ORM 是对象关系映射,用于将 Java 对象转换到数据库表中。 主键和索引 主键是唯一...
- **安全删除**:在遍历集合的过程中,如果需要删除元素,推荐使用`Iterator`方式进行操作,并考虑并发情况下的安全性。(选项B) #### 十一、数据类型选择 - **POJO属性类型**:所有POJO类的属性推荐使用包装数据...
在MyBatis中,`Cursor`接口位于`org.apache.ibatis.cursor`包下,它是`java.util.Iterator`的扩展,提供了一种流式处理查询结果的方式。当执行一个返回多条记录的Mapper方法时,可以选择返回`Cursor`对象。使用`...