`
lzh166
  • 浏览: 297252 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iBATIS入门知识进阶三

阅读更多
通过第一个示例的练习,我们对ibatis这个持久层的框架已经有了初步的了解。其主要工作是在实体对象的CRUD的xml映射配置文件中(User.xml),那么接着我们就来看看它的映射配置文件中的一些标签的使用及含义(基于第一个示例基础上的)
1、如何获得刚插入记录的自增长ID值?
insert语句默认插入一条记录的返回值为object类型的,我们可以使用selectKey来设置它的返回值的内容,select @@identity  as ID这是查询自动生成的主键ID的值。
在User.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap SYSTEM "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap>
	<typeAlias alias="User" type="com.lzh.ibatis.User"/>
	
	<insert id="insertUser" parameterClass="User">
		insert into t_user values(
			null,#username#,#password#
		)
		
		<selectKey resultClass="int" keyProperty="id">
			select @@identity  as ID
		</selectKey>
	</insert>
	
</sqlMap>

测试代码:
User user = new User();
		user.setUsername("张三");
		user.setPassword("张三密码");
		
		//如果主键是自动生成的,则其返回值可以通过<selectKey>标签来设置
		//如果不通过<selectKey>标签来设置,则返回值为空!
		//<selectKey >中的keyProperty,是指定User中的id属性,当调用结束之后,
		//user对象的id值和insert方法的返回值obj都是这条记录的ID值!
		Object obj  = sqlMapper.insert("insertUser", user);
        System.out.println(obj);
System.out.println(user.getId());


2、parameterClass的使用(限制参数类型)
insertUser使用了parameterClass参数,则在调用insertUser时,必需传入User类型的对象,如果没有使用parameterClass,则可以传入任意具有相应属性值的对象,只要其他类型的对象中包含所要添加的相应属性就好,否则会报没有相应属性的错误。
增加以个含有相应属性的其他实体类:
public class JustAnObject {
	private int id;
	private String username;
	private String password;
	private String otherProperty;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getOtherProperty() {
		return otherProperty;
	}
	public void setOtherProperty(String otherProperty) {
		this.otherProperty = otherProperty;
	}
}

User.xml配置文件:
<insert id="insertUser" parameterClass="User">
  	insert into t_user values (
  		null,#username#,#password#
  	)
  	<selectKey resultClass="int" keyProperty="id">
  		SELECT @@IDENTITY AS ID
  	</selectKey>  	
  </insert>
  
  <insert id="insertUser2">
  	insert into t_user values (
  		null,#username#,#password#
  	)
  	<selectKey resultClass="int" keyProperty="id">
  		SELECT @@IDENTITY AS ID
  	</selectKey>  	
  </insert>

insertUser使用了parameterClass,所以必需传入User类型的对象
User user = new User();
		user.setUsername("张三");
		user.setPassword("张三密码");
		
		//传递进去的对象,必须是User类型
		Object obj  = sqlMapper.insert("insertUser", user);

insertUser2没有使用parameterClass,所以可以传入任意具有相应属性值的对象
JustAnObject anobj = new JustAnObject();
		anobj.setUsername("用户名");
		anobj.setPassword("用户密码");
		
		//如果没有指定parameterClass属性,则任何一个具有相应属性值
		//的对象都可以被传递进去
		Object obj  = sqlMapper.insert("insertUser2", anobj);


3、parameterMap的使用

parameterMap用于传入参数,以便匹配SQL语句中的?号。
User.xml文件:
<parameterMap class="User" id="insertUser-param">
  	<parameter property="username"/>
  	<parameter property="password"/>
  </parameterMap>

  <insert id="insertUser" parameterMap="insertUser-param">
  	insert into t_user values (
  		null,?,?
  	)
  	<selectKey resultClass="int" keyProperty="id">
  		SELECT @@IDENTITY AS ID
  	</selectKey>  	
  </insert>

利用parameterMap,可以定义参数对象的属性如何映射到SQL查询语句的动态参数上,注
意parameterMap中<parameter/>标签的先后顺序不能颠倒!
测试代码:
 User user = new User();
		user.setUsername("张三dd");
		user.setPassword("张三密码dd");
		
		Object obj  = sqlMapper.insert("insertUser", user);


4.1、如何将查询结果映射到不同的对象?(resultClass的使用)

增加一个接收结果的实体类:
public class OtherObject {
	private int id;
	private String pro1;
	private String pro2;
	private String pro3;
	private boolean flag;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getPro1() {
		return pro1;
	}
	public void setPro1(String pro1) {
		this.pro1 = pro1;
	}
	public String getPro2() {
		return pro2;
	}
	public void setPro2(String pro2) {
		this.pro2 = pro2;
	}
	public String getPro3() {
		return pro3;
	}
	public void setPro3(String pro3) {
		this.pro3 = pro3;
	}
	public boolean isFlag() {
		return flag;
	}
	public void setFlag(boolean flag) {
		this.flag = flag;
	}
}


User.xml文件:查找t_user表,将其结果映射到一个属性名不同的对象中!
  <select id="selectUserForOtherObject" resultClass="com.ibatis.OtherObject" parameterClass="int">
  	select 
  	username as prop1,
  	password as prop2
  	from t_user where id=#value#
  </select>

测试代码:
//查找t_user表,将其结果映射到一个属性名不同的对象中!
		OtherObject obj = (OtherObject)sqlMapper.queryForObject("selectUserForOtherObject", 1);
		System.out.println(obj.getProp1()+","+obj.getProp2());

4.2、如何将查询结果集映射到不同的对象?(resultMap的基本使用)
User.xml文件:
<resultMap class="com.ibatis.OtherObject" id="ooResult">
  	<result property="prop1" column="username"/>
  	<result property="prop2" column="password"/>
  </resultMap>
  <!-- 
  如果使用resultMap来定义如何映射,则如下语句不可写成:
  select username as prop1,password as prop2 ....
  -->
  <select id="selectUserForOtherObject2" parameterClass="int" resultMap="ooResult">
	  	select 
	  	username,
	  	password
	  	from t_user where id=#value#//参数值当为一个时,可以任意指定
  </select>


		//查找t_user表,将其结果映射到一个属性名不同的对象中!
		OtherObject obj = (OtherObject)sqlMapper.queryForObject("selectUserForOtherObject2", 17);
		System.out.println(obj.getProp1()+","+obj.getProp2());


6.1、如何将查询结果集映射为xml格式的数据?
User.xml文件:
<select id="selectXmlData" resultClass="xml" xmlResultName="User" parameterClass="int">
  	select * from t_user where id=#value#
  </select>
  <select id="selectXmlDatas" resultClass="xml" xmlResultName="User">
  	select * from t_user 
  </select>


写入xml的方式是采用dom4j
//查找t_user表,将其结果映射到xml!
			//返回值obj是xml形式的字符串
			Object obj = sqlMapper.queryForObject("selectXmlData", 22);
			
			//dom4j里面的,设置输出格式及编码
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("GBK");
			
			//创建一个具有上面一定格式的XMLWriter对象
			XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
			
			//将一个xml字符串解转换成一个Document对象
			Document document = DocumentHelper.parseText(obj.toString());
			
			//将该document对象写到xml文件中
			writer.write(document);
			writer.close();

//查找t_user表,将其结果集合映射为xml格式输出!
		List list  = (List)sqlMapper.queryForList("selectXmlDatas");
		System.out.println(list);



6.2、如何将xml格式的数据映射到数据表中?

xm配置文件:
	<insert id="insertXmlData" parameterClass="xml" >
		insert into t_user values(null,#username#,#password#)
	</insert>


同样利用dom4j读取xml文件(必须插入数据表的一条记录)
//dom4j里面的SAXReader对象
			SAXReader saxReader = new SAXReader();
			//读取xml中数据
			Document document = saxReader.read(new File("input.xml"));
			//将数据转换成string
			String docXmlText=document.asXML();
			//将string插入到数据表
			sqlMapper.insert("insertXmlData", docXmlText);


7.1、如何用Map类型的对象作为传入参数?
  <!-- 
  这里,可以使用全路径类名,如:
  java.util.Map
  java.util.HashMap
  java.util.TreeMap
  或
  map
  -->
  <insert id="insertUser" parameterClass="map">
  	insert into t_user values (
  		null,#username#,#password#//必须与map中key相对应
  	)
  </insert>


测试代码:
		Map user = new TreeMap();
		user.put("username", "Map用户");
		user.put("password", "Map用户密码");
		sqlMapper.insert("insertUser",user);


7.2、如何将查询结果集的元素转换为Map类型的对象?
xml配置文件:
  <!-- 
  resultClass可以定义为java.util.HashMap类型,
  将能自动转换
  -->
  <select id="selectMapUsers" resultClass="java.util.HashMap">
  	select * from t_user
  </select>

测试代码:
		List list = (List)sqlMapper.queryForList("selectMapUsers");
		System.out.println(list);
		for (Iterator iter = list.iterator(); iter.hasNext();) {
			Map map = (Map) iter.next();
			//可在此输出map的数据
		}


注意:这里写的SQL语句一定要注意参数的位置,必须插入数据表中的字段顺序保持一致,否则插入到数据表中的数据错位不准确,map映射是将表的一条记录的字段名作为key,字段值做map的值,查询时,结果是一个map类型的数组。

8、事务处理
可以使用sqlMapClient的startTransaction/commitTransaction/endTransaction等方法来控制事务的边界。

如果与spring整合(这是iBatis推荐的方式),则我们需要在spring配置文件中指定其事务特性。
分享到:
评论

相关推荐

    ibatis入门教程_ibatis入门教程_源码

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得...通过学习这个Ibatis入门教程,你可以了解并掌握如何在Java应用中使用Ibatis进行数据操作,为后续的进阶学习和项目开发打下坚实的基础。

    ibatis经典入门

    【标签】"ibaits 入门"提醒我们关注的重点是iBATIS的基础知识和入门教程。在学习过程中,我们需要了解iBATIS的基本概念、配置、SQL映射文件的编写、事务管理以及如何在实际项目中应用iBATIS。 【压缩包子文件的文件...

    Ibatis的相关指南

    - "J2EE核心:iBatis DAO入门与进阶二中国IT实验室.mht":可能包含Ibatis在J2EE环境中的高级用法和最佳实践。 - "ibatis开发人员指南.mht"、"ibatis开发人员指南2.mht"、"ibatis开发人员指南3.mht":这些指南可能...

    iBATIS-SqlMaps-2-Tutorial_cn

    总的来说,《iBATIS-SqlMaps-2-Tutorial_cn》是一本全面覆盖iBATIS基础和进阶内容的教程,它不仅适合初学者入门,也对有一定经验的开发者有很好的参考价值。通过阅读本书,你可以深入理解iBATIS的工作原理,掌握其...

    ibatis相关的3个文档

    首先,`ibatis的中文教程`是初学者入门的最佳选择。Ibatis中文教程通常会详细介绍如何配置Ibatis环境,包括XML配置文件的编写、Mapper接口的定义、SqlSession的使用等基础内容。此外,还会讲解动态SQL的概念,这是...

    iBATIS实战

    第三部分 真实世界中的iBATIS 第9章 使用高速缓存提高性能 156 9.1 一个简单的iBATIS高速缓存示例 156 9.2 iBATIS高速缓存的理念 157 9.3 理解高速缓存模型 158 9.3.1 type属性 158 9.3.2 readOnly属性 159 9.3.3 ...

    ibatis学习资料大全

    2. **Ibatis学习指南**:这可能是中文版的学习资料,针对初学者提供了详尽的入门教程和进阶指南。学习指南通常会涵盖Ibatis的基本概念,如SqlMapConfig.xml配置文件、Mapper接口的使用、SqlSession的操作,以及...

    ibatis资料整理.zip

    这是一份宝贵的Ibatis学习材料,涵盖了从基础到进阶的各种内容。 【标签】:Ibatis、整理、ZIP、入门、Java 【知识点详解】: 1. **Ibatis简介**:Ibatis是一个基于Java的持久层框架,它简化了数据库操作,通过...

    webwork增删改简单入门例子(+spring+ibatis)

    3. iBatis持久层框架: - SQL映射:iBatis通过XML或注解定义SQL语句,将数据库操作与业务代码分离。 - 映射器:Mapper接口定义数据库操作,iBatis动态代理实现这些方法,执行SQL并返回结果。 - DAO层:在WebWork...

    ibatis大全

    【描述】"ibatis2入门"指出这是一套针对iBATIS 2.x版本的学习资料,涵盖了从基础到进阶的内容。"struts2+spring2+ibatis2整合"则表明本资料包不仅关注iBATIS,还讨论了如何将iBATIS与另外两个流行的企业级框架——...

    01 mybatis概述与进阶2

    【Mybatis概述与进阶2】课程主要涵盖了Mybatis的基础知识和进阶使用,包括ORM框架的概念、Mybatis的特点以及快速入门步骤。Mybatis是一个流行的Java持久层框架,它的前身是iBatis,是一个半自动的ORM(对象关系映射...

    MyIbatIS中文版电子书

    《MyIbatIS中文版电子书》是一本旨在帮助初学者轻松入门MyBatis框架的教程,涵盖了从基础到进阶的全方位知识。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,解决了在Java中操作数据库时...

    Struts2入门宝典

    《Struts2入门宝典》覆盖了Struts2框架的基础知识、核心概念以及高级特性,适合初学者快速入门和进阶学习。通过阅读这份宝典,开发者可以全面理解Struts2的工作原理和应用场景,为进一步深入学习和实践打下坚实的...

    程序员从初级到高级知识汇集

    【程序员从初级到高级知识汇集】是一本涵盖了程序员从入门到精通所需掌握的全面知识的资料集合。本书针对初级和高级程序员,旨在提供一个系统化的学习路径,帮助程序员提升技能,成为行业专家。 1. **Java知识** -...

    hibernate资料3

    总的来说,这份"hibernate资料3"是一个完整的Hibernate入门到进阶的学习资源,通过尚学堂马士兵老师的讲解,你可以系统地掌握Hibernate 3.3.2的基本用法和实践技巧,为Java开发中的数据库操作提供有力的支持。...

    一个程序员的自省(博客园)--超级推荐

    作者通过自己的F#探险之旅,整理了相关教程,帮助初学者快速入门,并对比了F#与C#的差异,强调了函数式编程的优势。 【Visual Studio插件增强开发体验】 Visual Studio的插件生态系统极大地丰富了IDE的功能,使...

    帮助文档大全

    Java的文档主要讲解了语法基础、类和对象、异常处理、集合框架、多线程、I/O流等内容,是开发者入门和进阶的重要资源。 2. **Hibernate**: Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用与...

    JavaEE程序员必读图书大推荐参照.pdf

    3. 《iBatis 实践》:iBatis 必看参考书,in action 从未让人失望过。 4. 《精通 Hibernate:Java 对象持久化技术详解》:Hibernate 必备参考书,也是国人写的不错的书。 5. 《Struts 2.1 权威指南》:学习 Struts2 ...

Global site tag (gtag.js) - Google Analytics