`
tonyJ
  • 浏览: 142215 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

ibatis一对多示例

 
阅读更多
1、在实际开发中,iBATIS框架已经很普遍的使用,然而我们常常遇到关联数据的情况,如User 对象拥有若干Address 对象,每个Address 对象描述了对应User 的一个联系地址,这种情况下,我们应该如何处理?通过单独的Statement操作固然可以实现(通过Statement 用于读取用户数据,再手工调用另外一个Statement 根据用户ID 返回对应的Address信息)。

2、构建数据库表,user表和address表,建表语句如下:(使用mysql数据库)
create table user(
   id int(10) not null auto_increment,
   userName varchar(20) ,
   passWord varchar(20),
   primary key(id) 
);

insert into user(userName,passWord) values('admin1','admin1');
insert into user(userName,passWord) values('admin2','admin2');
insert into user(userName,passWord) values('admin3','admin3');
insert into user(userName,passWord) values('admin4','admin4');

create table address(
   user_id int(10) not null ,
   addressName varchar(20) ,
   addressCode varchar(20)
);

insert into address(user_id,addressName,addressCode) values(1,'addressName1','addressCode1');
insert into address(user_id,addressName,addressCode) values(1,'addressName2','addressCode2');
insert into address(user_id,addressName,addressCode) values(2,'addressName3','addressCode3');
insert into address(user_id,addressName,addressCode) values(3,'addressName4','addressCode4');


3、生成相应的JavaBean
User.java
package com.tonyj.pojo;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

public class User {
	private int id;
	private String userName;
	private Date expireDate=null;
	private String passWord;
	private List<Address> address=new ArrayList<Address>();
	//相应的getter和setter方法,构造方法
}


Address.java
package com.tonyj.pojo;

public class Address {
	private String addressName;
	private String addressCode;
	private String user_id;
	//相应的getter和setter方法,构造方法
}


4、ibatis配置文件的配置
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
	<properties resource="jdbc.properties"/>
	<settings 
		cacheModelsEnabled="true"
		enhancementEnabled="true"
		lazyLoadingEnabled="true"
		maxRequests="32"
		maxSessions="10"
		maxTransactions="5"
		useStatementNamespaces="true"/> 
	<transactionManager type="JDBC">
		<dataSource type="SIMPLE">
			 <property name="JDBC.Driver" value="${jdbc.driverClassName}"/>
			 <property name="JDBC.ConnectionURL" value="${jdbc.url}"/>
			 <property name="JDBC.Username" value="${jdbc.userName}"/>
			 <property name="JDBC.Password" value="${jdbc.password}"/>
		</dataSource>
	</transactionManager>
	<sqlMap resource="one2many.xml"/>
</sqlMapConfig>


配置连接数据库的资源文件:
jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/vin
jdbc.userName=root
jdbc.password=sa


一对多映射文件one2many.xml的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL MAP 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
	<typeAlias alias="User"    type="com.tonyj.pojo.User"/>
	<typeAlias alias="Address" type="com.tonyj.pojo.Address"/>
	<resultMap class="User" id="get-user-result">
		<result property="id" column="id"/>
		<result property="userName" column="userName"/>
		<result property="passWord" column="passWord"/>
		<result property="expireDate" column="expiredate" />
		<result property="address" column="id" select="getAddressByUserId"/>
	</resultMap>
	<select id="getUser" parameterClass="int" resultMap="get-user-result">
		<![CDATA[
			select id,userName,passWord,expiredate
			from user
			where id=#id#
		]]>
	</select>
	<select id="getAddressByUserId" parameterClass="int" resultClass="Address">
		select user_id,addressName,addressCode
		from address
		where user_id=#user_id#
	</select>
</sqlMap>


5、测试类的编写
IbatisOne2Many.java
package com.tonyj.test;

import java.io.Reader;
import java.util.List;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.tonyj.pojo.Address;
import com.tonyj.pojo.User;

public class IbatisOne2Many {
	public static void main(String[] args) throws Exception {
		Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
		SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
		// sqlMap系统初始化完毕
		User user=(User) sqlMap.queryForObject("getUser", new Integer(1));
		System.out.println("user_id:"+user.getId()+",userName:"
							+user.getUserName());
		List<Address> addresss=user.getAddress();
		for(int i=0;i<addresss.size();i++){
			System.out.println(addresss.get(i).getUser_id()+"-->"
							+addresss.get(i).getAddressName());
		}
	}
}


6、执行结果如下:
log4j:WARN No appenders could be found for logger (com.ibatis.common.jdbc.SimpleDataSource).
log4j:WARN Please initialize the log4j system properly.
user_id:1,userName:admin1
1-->addressName1
1-->addressName2
分享到:
评论

相关推荐

    ibatis一对一、多对一示例

    利用ibatis实现一对一、多对一的示例代码。每种关系用两种方式实现,具体的讲解可看我的博客http://blog.csdn.net/duwenchao1986/article/details/8565386

    ibatis多对一代码示例

    ibatis 多对一 个人平时学习中的总结 跟大家分享下

    iBATIS实战

    书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的大部分知识点,可以作为iBATIS学习和Web开发的经典案例,非常值得深入研究。 本书既可为广大的开发人员(不仅仅是Web应用程序开发人员)...

    ibatis2.x 详细介绍

    一对多关联............................................................................................ 26 一对一关联......................................................................................

    ibatis开发指南_夏昕

    一对多关联............................................................................................26 一对一关联........................................................................................

    ibatis开发指南中文版

    一对多关联............................................................................................26 一对一关联........................................................................................

    基于struts+spring+ibatis的J2EE开发

    完成这些问题一般都需要实现对多个业务系统的数据和业务逻辑的无缝访问,也就是说,要实施系统集成工程,以便联结业务流程、实现数据的访问与共享。 JpetStore 4.0是ibatis的最新示例程序,基于Struts MVC框架(注:...

    ibatis 开发指南(pdf)

    26 一对多关联............................................................................................ 26 一对一关联...........................................................................

    Spingmvc+ibatis

    在网上下了很多的spingmvc+ibatis代码,但是没有一个跑的通,所以自己整了一个spingmvc+ibatis 的增删改查的示例,绝对能跑通,里面有我对某些注解的解释,非常适合初学者,就两分,算是给点功劳分了,网上大多数都...

    ibatis入门教程

    一对多关联............................................................................................ 26 一对一关联......................................................................................

    基于struts+spring+ibatis的轻量级J2EE开发

    完成这些问题一般都需要实现对多个业务系统的数据和业务逻辑的无缝访问,也就是说,要实施系统集成工程,以便联结业务流程、实现数据的访问与共享。JpetStore4.0是ibatis的最新示例程序,基于StrutsMVC框架(注:非...

    Spring in Action中文版 清晰pdf part2

    第三部分走出中间层迈向显示层,在很多J2EE系统中显示层被称为Web层。附录A介绍如何开始自己的Spring应用系统,如何下载Spring以及如何编写Ant配置文件。附录B介绍一些与Spring有关的其他开源框架。本书的每一部分...

    Spring in Action中文版 清晰pdf part1

    第三部分走出中间层迈向显示层,在很多J2EE系统中显示层被称为Web层。附录A介绍如何开始自己的Spring应用系统,如何下载Spring以及如何编写Ant配置文件。附录B介绍一些与Spring有关的其他开源框架。本书的每一部分...

    Spring-Reference_zh_CN(Spring中文参考手册)

    9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. Spring JDBC包结构...

    springmybatis

    而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个ORM 工具感兴趣。因为接下来自己的项目中很有可能采用这个ORM工具。所以在此...

    Spring面试题

    1.使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表...

    spring chm文档

    9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. Spring ...

    Spring中文帮助文档

    9.9.1. 对一个特定的 DataSource 使用了错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. 选择一...

    Spring API

    9.9.1. 对一个特定的 DataSource 使用了错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. 选择一种...

    Spring 2.0 开发参考手册

    9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. Spring ...

Global site tag (gtag.js) - Google Analytics