`

Ibatis Iterator用法小结

 
阅读更多

1、要在ibatis里面使用命名空间需要在sqlMapConfig.xml中增加如下设置

         <settings useStatementNamespaces="true" />

2、写JavaBean类时  建议把属性全部写成引用类型  对于基本类型写成它对应的包装类型

      这样可以避免数据库中对应的字段可以为空时   查询结果在映射时报错

3、 <select id="getSomeEmpByList" parameterClass="empVO" resultMap="empResultMap"> select e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno from emp e <dynamic prepend="where"> <isNotEmpty property="empNameList"> e.ename in <iterate property="empNameList" open="(" close=")" conjunction=","> #empNameList[]# </iterate> </isNotEmpty> </dynamic> </select>

 4、

<select id="getSomeEmpByListParam" parameterClass="java.util.ArrayList" resultMap="empResultMap"> select e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno from emp e <dynamic prepend="where"> <isNotEmpty> e.ename in <iterate open="(" close=")" conjunction=","> #empNameList[]# </iterate> </isNotEmpty> </dynamic> </select>

 

 


 

配置4   parameterClass为java.util.ArrayList/List  这时在遍历时  不要property属性,否则报错。String index out of range: -1

 

具体可以参考http://hongzhguan.iteye.com/blog/1222353这篇博客  写的很详细了!

5、批量插入时  配置文件的写法:

<insert id="insertBatchEmp" parameterClass="empVO"> insert all <iterate conjunction="" property="empVoList"> into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values ( #empVoList[].empno#, #empVoList[].ename#, #empVoList[].job#, #empVoList[].mgr#, sysdate, #empVoList[].sal#, #empVoList[].comm#, #empVoList[].deptno# ) </iterate> select * from dual </insert>

同样empVoList也是empVO类的一个属性  必须写;#empVoList[].empno#, 说明:前面的empVoList代表的是VO中的属性 且这个属性必须是List OR是Iterabale类型的;

这个List里面放的还是empVO对象  后面的empno为empVO对象的一个属性  后面依次类推

如果传入的参数是List/Arraylist时  []前面的内容是不需要定义的  也就是说跟前面那个名没关系  但是[]必须要写  以让Ibatis知道你传入的是一个集合  下面的写法可以证明这一点

6、 <insert id="insertBatchEmp1" parameterClass="java.util.List"> insert all <iterate conjunction="" > into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values ( #a[].empno#, #b[].ename#, #c[].job#, #d[].mgr#, sysdate, #e[].sal#, #f[].comm#, #g[].deptno# ) </iterate> select * from dual </insert>


 

 

 

 

   上面那种写法传入的参数也是个List <Map>  List里面放的是一个Map  #a[].empno#, 后面的empno就是map的key值  后面依次类推 前面的a,b,c,....不影响  可以证明第五点的说法

 

7、VO类代码:

public class EmpVO implements Serializable{
	
	private int empno;
	
	private String ename;
	
	private String job;
	
	private Integer mgr;
	
	private Date hiredate;
	
	private Float sal;
	
	private Float comm;
	
	private int deptno;
	
	private String[] empNames;
	
	private List<String> empNameList;
	
	private List<EmpVO> empVoList;
	
}

 

 8、调用类代码:  

public class CRUDTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		CRUDTest test = new CRUDTest();
		List<EmpVO> empList = test.getEmpList();
		for(Iterator<EmpVO> ite = empList.iterator(); ite.hasNext();) {
			System.err.println(ite.next());
		}
		
		/* 通过员工姓名来查询*/
		EmpVO empVO = new EmpVO();
		empVO.setEmpNames(new String[]{"SMITH", "ALLEN", "WARD", "JONES"});
		List<EmpVO> empList1 = test.getEmpList(empVO);
		for(Iterator<EmpVO> ite = empList1.iterator(); ite.hasNext();) {
			System.err.println(ite.next());
		}
		List<String> empNameList =  new ArrayList<String>();
		empNameList.add("SMITH");
		empNameList.add("ALLEN");
		empNameList.add("WARD");
		empNameList.add("JONES");
		empVO.setEmpNameList(empNameList);
		
		List<EmpVO> empList2 = test.getEmpListByListParam(empVO);
		for(Iterator<EmpVO> ite = empList2.iterator(); ite.hasNext();) {
			System.err.println(ite.next());
		}
		
		List<EmpVO> empList3 = test.getEmpListByListParam(empNameList);
		for(Iterator<EmpVO> ite = empList3.iterator(); ite.hasNext();) {
			System.err.println(ite.next());
		}
		
		List<EmpVO> empList4 = new ArrayList<EmpVO>();
		for(int i = 0; i < 4; i++) {
			EmpVO empVo = new EmpVO();
			empVo.setComm(Float.valueOf(20 + i));
			empVo.setDeptno(20);
			empVo.setEmpno(7935 + i);
			empVo.setEname("Andy-yong" + i);
			empVo.setJob("MANAGER" + i);
			empVo.setMgr(7902);
			empVo.setSal(Float.valueOf(1003 + i));
			
			
			Map empVoMap = new HashMap<String, Object>();
			empVoMap.put("empno", 7935 + i);
			empVoMap.put("ename", "Andy-yong" + i);
			empVoMap.put("job", "MANAGER" + i);
			empVoMap.put("mgr", 7902);
			empVoMap.put("sal", Float.valueOf(1003 + i));
			empVoMap.put("comm", Float.valueOf(20 + i));
			empVoMap.put("deptno", 30);
			
			empList4.add(empVo);
		}
		empVO.setEmpVoList(empList4);
		//int rowNums = Integer.valueOf((test.insertBatchEmpByListParam(empList4)).toString());
		System.err.println(test.insertBatchEmpByListParam(empVO) + "**************");
	}

	/** select without parameters
	 * @throws SQLException */
	public List<EmpVO> getEmpList() throws SQLException{
		return DaoUtil.getInstance().queryForList("emp.getSomeEmp");
	}
	
	/**
	 * select employees by enames 数组属性
	 * @return empVO list
	 * @throws SQLException
	 */
	public List<EmpVO> getEmpList(EmpVO empVO) throws SQLException{
		return DaoUtil.getInstance().queryForList("emp.getSomeEmpByName", empVO);
	}
	/** parameter is a listProperty of the vo object 集合属性*/
	public List<EmpVO> getEmpListByListParam(EmpVO empVO) throws SQLException {
		return DaoUtil.getInstance().queryForList("emp.getSomeEmpByList", empVO);
	}
	/** parameter is a list 传入参数是个List*/
	public List<EmpVO> getEmpListByListParam(List<String> empNameList) throws SQLException {
		return DaoUtil.getInstance().queryForList("emp.getSomeEmpByListParam", empNameList);
	}
	
	public Object insertBatchEmpByListParam(EmpVO empVOList) throws SQLException {
		return DaoUtil.getInstance().insert("emp.insertBatchEmp", empVOList);
	}
}

 

 

 9、参考博客:  http://hongzhguan.iteye.com/blog/1222353 http://hi.baidu.com/xiami9910/blog/item/8caacc1f45fe9ccda686697b.html

http://www.cnblogs.com/eugenewu0808/archive/2011/03/18/1987668.htmlhttp://www.javadn.com/read.php?tid-790.html

 

  

 

 

 

 

分享到:
评论

相关推荐

    ibatis入门与ibatis迭代的用法

    总结起来,iBatis作为一个优秀的持久层框架,它的入门并不复杂,主要涉及到配置、SQL映射和Java接口的编写。而迭代的用法则使得处理查询结果变得更加灵活,无论是与Java对象的映射,还是Map的迭代,都能满足不同场景...

    详细介绍Ibatis的用法

    ### 详细介绍Ibatis的用法 #### Ibatis概述与特点 Ibatis是一个开源的持久层框架,它通过简单的XML配置文件将JavaBean映射到SQL语句上,从而极大简化了对关系数据库的操作。与其他数据库持久层框架如JDO、...

    iBatis Web用法实例

    总结,"iBatis Web用法实例"涵盖了如何在Web环境中搭建、配置和使用iBatis的基本步骤,以及相关的配置文件和SQL映射。通过学习这个实例,开发者可以更好地理解和掌握iBatis在实际项目中的应用,提高数据访问层的开发...

    ibatis总结 ibatis ibatis ibatis ibatis

    总结,Ibatis提供了灵活的SQL映射机制,使得开发人员能够更好地控制SQL的执行。同时,通过与Struts和Spring的整合,可以构建出强大的企业级应用。理解并熟练掌握这些知识点,对于提升Java Web开发的效率和质量至关...

    iBATIS2.0学习总结

    iBATIS2.0是一个基于Java的持久层框架,它主要负责将SQL查询与应用程序的业务逻辑解耦,使得开发者可以更加专注于SQL的编写和优化,而无需关心数据访问的底层细节。iBATIS并不像Hibernate那样是完全的对象关系映射...

    ibatis基础用法

    **标题:“ibatis基础用法”** 在Java Web开发中,iBATIS是一个持久层框架,它提供了一种将SQL语句与Java代码分离的方法,实现了数据访问的灵活性和高效性。iBATIS的主要功能是简化数据库操作,通过XML或注解的方式...

    ibatis中iterate的例子

    总结来说,`&lt;iterate&gt;`标签是iBatis中处理集合数据的重要工具,它简化了SQL语句的构建,提高了代码的可读性和可维护性。在实际开发中,合理利用`&lt;iterate&gt;`可以极大地提高工作效率,并降低出错概率。

    ibatis动态SQL标签用法

    iBatis动态SQL标签用法 iBatis是Java持久层框架,提供了动态SQL标签来实现动态查询。动态SQL标签可以根据不同的条件生成不同的SQL语句,从而提高查询效率和灵活性。 动态SQL片段 iBatis提供了动态SQL片段的功能,...

    ibatis 知识点总结(PDF)

    ### ibatis知识点总结 #### 简介 ibatis是一个开放源代码项目,起初由Clinton Begin在2001年发起。该项目最初关注的是密码软件的开发,但随着时间的发展,逐渐演变成一个基于Java的持久层框架。ibatis在2010年由...

    ibatis的错误总结

    在深入探讨ibatis框架中可能遇到的错误时,我们首先需要理解ibatis(现被称为MyBatis)的基本概念。ibatis是一种优秀的持久层框架,它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。ibatis可以使用...

    ibatis3.0中in的用法

    ### ibatis3.0中`in`的用法详解 #### 一、引言 在进行数据库查询时,经常会遇到需要根据多个值进行查询的情况,这时`IN`语句就显得尤为重要。`IN`语句可以用于判断某个字段的值是否在一个指定的列表之中,非常适用...

    ibatis的技术总结

    ### ibatis的技术总结 #### 一、创建iBatis工程的步骤 1. **建立数据库:** 首先需要创建一个数据库,用于存放应用程序的数据。数据库的选择可以根据具体的应用需求来决定,例如MySQL、Oracle等。 2. **创建工程...

    ibatis优点总结

    ibatis优点总结 ibatis优点总结

    传智播客ibatis教程_ibatis优点总结

    本文将深入探讨其中一个流行的选择——iBATIS,以及其在传智播客教程中的优点总结。 iBATIS,全称为“互联网应用程序基础工具包”(Internet Basics for Architecture with Transactions and SQL),是由Apache ...

    ibatis dynamic 用法

    ### ibatis Dynamic SQL 用法详解 #### 一、引言 ibatis 是一款非常流行的持久层框架,它简化了 Java 应用程序与数据库之间的交互。Dynamic SQL 功能是 ibatis 中的一项重要特性,允许开发者根据运行时的条件动态...

    ibatis demo,ibatis例子,ibatis示例

    通过这个demo,你可以了解到Ibatis的基本用法,如何编写SQL映射文件,如何设计Mapper接口,以及如何在Java代码中调用这些接口执行数据库操作。同时,也能掌握Ibatis的动态SQL特性,以及如何配合Spring进行更高效的...

    ibatis小结

    **Ibatis小结** Ibatis,一款轻量级的Java持久层框架,是MyBatis的前身,由Clinton Begin在2003年创建。它致力于解决Java应用程序中的数据访问层(DAL)问题,提供了SQL映射框架,使得开发者可以直接编写SQL语句,...

    IBATIS开发使用小结

    IBATIS是一个开源的ORM(Object-Relational Mapping)框架,最初由Java版本发展而来,后来移植到了.NET平台,成为IBatis.Net。它允许开发者将SQL语句与业务逻辑对象分离,以XML文件的形式存储SQL映射,提高代码的可...

    ibatis.net Tutorial 指导 用法

    **Ibatis.net 指南:深入理解和使用** Ibatis.net 是一款优秀的持久层框架,它将SQL语句与Java代码分离,实现了数据访问层的解耦,提高了开发效率和可维护性。本教程旨在帮助开发者全面理解并熟练运用Ibatis.net...

    09_ibatis教程_ibatis优点总结.zip

    09_ibatis教程_ibatis优点总结.zip 09_ibatis教程_ibatis优点总结.zip

Global site tag (gtag.js) - Google Analytics