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

原创 2011年01月17日 13:44:00

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

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


订单通过一个外建与客户表关联
实体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. }  



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

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>  


订单实体的配置文件

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>  



测试方法新增操作 与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();  



查询方法 实现了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());  

ibatis实战之一对多关联

ibatis一对多关联查询 在实际开发中,我们常常遇到关联数据的情况,如User对象拥有若干Book对象 每个Book对象描述了归属于一个User信息 如下步骤演示一对多关联 1、创建user(id,...
  • itmyhome
  • itmyhome
  • 2014年06月13日 21:13
  • 4575

ibatis 一对一多表关联查询的问题

ibatis 一对一多表关联查询的结果集写法问题 类的成员如下: public class Order { private String id; private String us...
  • xuanjiewu
  • xuanjiewu
  • 2015年09月25日 23:59
  • 1357

使用hql或条件查询解决一对多关联查询的N+1查询问题

如下两个实体类有一对多和多对一的双从关联 public class DictType { @Id private int id; private String className; priva...
  • jqncc
  • jqncc
  • 2014年01月06日 10:36
  • 3203

Hibernate基础之九:多对多,单/双向关联 @ManyToOne @OneToMany

1.组件映射,一个类中包含另一个 组件上@Eembeded 2.多对一,单向关联 “多的”聚合“一的”1个实例, Group--User user的getGroup上加@ManyToOne ...
  • bestcxx
  • bestcxx
  • 2016年06月27日 10:40
  • 804

jap中一对多关系维护中的一些问题

在1-n的,关系时,例如部门和员工的关系。一个部门下会有很多员工。员工就属于多的一方。在jpa中多的一方为关系维护端,关系维护端负责外键记录的更新,关系被维护端没有全力去更新外键记录。 一对多方式的注...
  • weidawei0609
  • weidawei0609
  • 2009年10月11日 20:40
  • 669

ibatis多对一表关联映射的解决过程

1、问题:当查询新闻的时候我们一般情况下需要新闻的类型以及作者的信息。根据表设计的规范我们要把文章,文章类型,作者信息分别设计成一张表,其中文章中分别存在指向文章类型和作者信息的外键。我们的问题就是怎...
  • sinat_16428007
  • sinat_16428007
  • 2016年02月28日 11:35
  • 595

双向一对多关联OneToMany

在一的一方添加Set集合 @OneToMany(targetEntity=SmallProductClass.class,mappedBy="bigProductClass")    private ...
  • wgz_wlky
  • wgz_wlky
  • 2016年05月16日 01:14
  • 197

Hibernate关系映射(四)一对多单向关联@OneToMany Annotation方式

本篇介绍一对多单向关联,实例还是和Hibernate关系映射(三)多对一单向关联中的例子一样,一个车主(Owner)可以有多辆车,一辆车(Car)只能有一个车主,下面是表结构: 表结构和多对一的...
  • MurcielagoAN
  • MurcielagoAN
  • 2015年02月27日 15:03
  • 2751

双向一对多(多对一)@OneToMany或@ManyToOne的用法

例如我们用一个例子来开启JPA的一对多和多对一的学习。   比如你去当当网上买书籍,当当网就给你一个订单。   通过上面的业务活动描述你可以分析得出:一个订单可以包含一个或多个订单项.那么我们...
  • Fasure_Smile
  • Fasure_Smile
  • 2016年11月07日 16:41
  • 1814

java ibatis 一对多查询

父查询和子查询都使用map来接收查询参数,如果是一对一的查询接收是OK的 但是一对多的查询,子查询使用map接收参数,会报错子查询查询有多条数据。所以我只能自己写 一个对象使用List来接收子查询...
  • yichaoliangcsdn
  • yichaoliangcsdn
  • 2016年08月25日 15:21
  • 1057
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ibatis入门尝试5 一对多(OneToMany)关联
举报原因:
原因补充:

(最多只允许输入30个字)