ibatis入门尝试5 一对多(OneToMany)关联

其实一对多关联跟我们之前的一对一关联在实现上没有区别,这里只是简单举例子说明一下。
我们以客户对订单为例。
首先创建数据库

Java代码
  1. CREATE TABLE `customer` (  
  2.   `id` int ( 11 ) NOT NULL auto_increment,  
  3.   `name` varchar(50default  NULL,  
  4.   `address` varchar(200default  NULL,  
  5.   PRIMARY KEY  (`id`)  
  6. )  
  7. CREATE TABLE `orders` (  
  8.   `id` int ( 11 ) NOT NULL auto_increment,  
  9.   `code` varchar(50default  NULL,  
  10.   `customerid` int ( 11default  NULL,  
  11.   PRIMARY KEY  (`id`),  
  12.   KEY `sda` (`customerid`),  
  13.   CONSTRAINT `sda` FOREIGN KEY (`customerid`) REFERENCES `customer` (`id`) ON DELETE CASCADE  
  14. )  
CREATE TABLE `customer` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) default NULL,
  `address` varchar(200) default NULL,
  PRIMARY KEY  (`id`)
)
CREATE TABLE `orders` (
  `id` int(11) NOT NULL auto_increment,
  `code` varchar(50) default NULL,
  `customerid` int(11) default NULL,
  PRIMARY KEY  (`id`),
  KEY `sda` (`customerid`),
  CONSTRAINT `sda` FOREIGN KEY (`customerid`) REFERENCES `customer` (`id`) ON DELETE CASCADE
)


订单通过一个外建与客户表关联
实体Bean

Java代码
  1. //客户类   
  2. public   class  Customer {  
  3.     private   int  id;  
  4.     private  String name;  
  5.     private  String address;  
  6.     private  List<Orders> orders;  
  7.     public   int  getId() {  
  8.         return  id;  
  9.     }  
  10.     public   void  setId( int  id) {  
  11.         this .id = id;  
  12.     }  
  13.     public  String getName() {  
  14.         return  name;  
  15.     }  
  16.     public   void  setName(String name) {  
  17.         this .name = name;  
  18.     }  
  19.     public  String getAddress() {  
  20.         return  address;  
  21.     }  
  22.     public   void  setAddress(String address) {  
  23.         this .address = address;  
  24.     }  
  25.     public  List<Orders> getOrders() {  
  26.         return  orders;  
  27.     }  
  28.     public   void  setOrders(List<Orders> orders) {  
  29.         this .orders = orders;  
  30.     }  
  31.       
  32. }  
  33. //订单类   
  34. public   class  Orders {  
  35.     private   int  id;  
  36.     private  String code;  
  37.     private   int  customerid;  
  38.       
  39.     public   int  getId() {  
  40.         return  id;  
  41.     }  
  42.     public   void  setId( int  id) {  
  43.         this .id = id;  
  44.     }  
  45.     public  String getCode() {  
  46.         return  code;  
  47.     }  
  48.     public   void  setCode(String code) {  
  49.         this .code = code;  
  50.     }  
  51.     public   int  getCustomerid() {  
  52.         return  customerid;  
  53.     }  
  54.     public   void  setCustomerid( int  customerid) {  
  55.         this .customerid = customerid;  
  56.     }  
  57. }  
//客户类
public class Customer {
	private int id;
	private String name;
	private String address;
	private List<Orders> orders;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public List<Orders> getOrders() {
		return orders;
	}
	public void setOrders(List<Orders> orders) {
		this.orders = orders;
	}
	
}
//订单类
public class Orders {
	private int id;
	private String code;
	private int customerid;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public int getCustomerid() {
		return customerid;
	}
	public void setCustomerid(int customerid) {
		this.customerid = customerid;
	}
}



下面是对应的配置文件
客户实体的配置文件

Java代码
  1. <?xml version= "1.0"  encoding= "UTF-8" ?>  
  2. <!DOCTYPE sqlMap  
  3. PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"   
  4. "http://ibatis.apache.org/dtd/sql-map-2.dtd" >  
  5. <sqlMap namespace="customer" >  
  6. <typeAlias alias="customerVO"  type= "com.bean.onetomany.Customer" />  
  7. <parameterMap class = "customerVO"  id= "customerVOmp" >  
  8.     <parameter property="id"  jdbcType= "int" />  
  9.     <parameter property="name"  jdbcType= "varchar" />  
  10.     <parameter property="address"  jdbcType= "varchar" />  
  11. </parameterMap>  
  12. <insert id="createCustomer"  parameterMap= "customerVOmp" >  
  13.     <selectKey keyProperty="id"  type= "post"  resultClass= "int" >  
  14.         select @@IDENTITY  as value  
  15.     </selectKey>  
  16.     insert into customer(id,name,address) values(?,?,?)  
  17. </insert>  
  18. <resultMap class = "customerVO"  id= "getCustomer" >  
  19.     <result column="id"  property= "id"  jdbcType= "int" />  
  20.     <result column="name"  property= "name"  jdbcType= "varchar" />  
  21.     <result column="address"  property= "address"  jdbcType= "varchar" />  
  22.     <result property="orders"  column= "id"  select= "orders.getOrdersByCid" />  
  23. </resultMap>  
  24. <select id="getCustomerByName"  parameterClass= "java.lang.String"  resultMap= "getCustomer" >  
  25.     select * from customer where name=#value#  
  26. </select>  
  27. </sqlMap>  
<?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 namespace="customer">
<typeAlias alias="customerVO" type="com.bean.onetomany.Customer"/>
<parameterMap class="customerVO" id="customerVOmp">
	<parameter property="id" jdbcType="int"/>
	<parameter property="name" jdbcType="varchar"/>
	<parameter property="address" jdbcType="varchar"/>
</parameterMap>
<insert id="createCustomer" parameterMap="customerVOmp">
	<selectKey keyProperty="id" type="post" resultClass="int">
		select @@IDENTITY as value
	</selectKey>
	insert into customer(id,name,address) values(?,?,?)
</insert>
<resultMap class="customerVO" id="getCustomer">
	<result column="id" property="id" jdbcType="int"/>
	<result column="name" property="name" jdbcType="varchar"/>
	<result column="address" property="address" jdbcType="varchar"/>
	<result property="orders" column="id" select="orders.getOrdersByCid"/>
</resultMap>
<select id="getCustomerByName" parameterClass="java.lang.String" resultMap="getCustomer">
	select * from customer where name=#value#
</select>
</sqlMap>


订单实体的配置文件

Java代码
  1. <?xml version= "1.0"  encoding= "UTF-8" ?>  
  2. <!DOCTYPE sqlMap  
  3. PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"   
  4. "http://ibatis.apache.org/dtd/sql-map-2.dtd" >  
  5. <sqlMap namespace="orders" >  
  6. <typeAlias alias="ordersVO"  type= "com.bean.onetomany.Orders" />  
  7. <parameterMap class = "ordersVO"  id= "ordersVOmp" >  
  8.     <parameter property="id"  jdbcType= "int" />  
  9.     <parameter property="code"  jdbcType= "varchar" />  
  10.     <parameter property="customerid"  jdbcType= "int" />  
  11. </parameterMap>  
  12. <insert id="createOrders"  parameterMap= "ordersVOmp" >  
  13.     <selectKey>  
  14.     select @@IDENTITY  as value  
  15.     </selectKey>  
  16.     insert into orders(id,code,customerid) values(?,?,?)  
  17. </insert>  
  18. <select id="getOrdersByCid"  parameterClass= "int"  resultClass= "ordersVO" >  
  19.     select * from orders where customerid = #value#  
  20. </select>  
  21. </sqlMap>  
<?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 namespace="orders">
<typeAlias alias="ordersVO" type="com.bean.onetomany.Orders"/>
<parameterMap class="ordersVO" id="ordersVOmp">
	<parameter property="id" jdbcType="int"/>
	<parameter property="code" jdbcType="varchar"/>
	<parameter property="customerid" jdbcType="int"/>
</parameterMap>
<insert id="createOrders" parameterMap="ordersVOmp">
	<selectKey>
	select @@IDENTITY as value
	</selectKey>
	insert into orders(id,code,customerid) values(?,?,?)
</insert>
<select id="getOrdersByCid" parameterClass="int" resultClass="ordersVO">
	select * from orders where customerid = #value#
</select>
</sqlMap>



测试方法新增操作 与onetoone的新增没有本质区别
预习了一下之前的批次处理的方式

Java代码
  1. Reader reader = Resources.getResourceAsReader( "SqlMapConfig.xml" );  
  2. SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);  
  3.   
  4. Customer c1 = new  Customer();  
  5. c1.setName("customer1" );  
  6. c1.setAddress("c1_address1" );  
  7.   
  8. sqlMap.startTransaction();  
  9. sqlMap.insert("customer.createCustomer" , c1);  
  10. sqlMap.startBatch();  
  11. for ( int  i =  0 ;i< 10 ;i++){  
  12.     Orders o = new  Orders();  
  13.     o.setCustomerid(c1.getId());  
  14.     o.setCode("code_c1 " +i);  
  15.     sqlMap.insert("orders.createOrders" , o);  
  16. }  
  17. sqlMap.executeBatch();  
  18. sqlMap.commitTransaction();  
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

Customer c1 = new Customer();
c1.setName("customer1");
c1.setAddress("c1_address1");

sqlMap.startTransaction();
sqlMap.insert("customer.createCustomer", c1);
sqlMap.startBatch();
for(int i = 0;i<10;i++){
	Orders o = new Orders();
	o.setCustomerid(c1.getId());
	o.setCode("code_c1 "+i);
	sqlMap.insert("orders.createOrders", o);
}
sqlMap.executeBatch();
sqlMap.commitTransaction();



查询方法 实现了customer 到orders 的一对多查询

Java代码
  1. Reader reader = Resources.getResourceAsReader( "SqlMapConfig.xml" );  
  2.           
  3. SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);  
  4.       
  5. Customer customer = (Customer)sqlMap.queryForObject("customer.getCustomerByName""customer1" );  
  6. System.out.println(customer.getAddress());  
  7. List<Orders> orders = customer.getOrders();  
  8. for ( int  i =  0  ; i<orders.size();i++){  
  9.     Orders o = orders.get(i);  
  10.     System.out.println(o.getCode());  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值