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());  

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

Mybatis(ibatis)的一对多关联配置

学过hibernate的同学都知道了,如何配置实体类之间存在着(双)(单)一对多的关系,今天让我们来了解一下。Mybatis是如何配置这种关系的!测试的数据库drop table t_10_01_st...

《精通Hibernate》学习(5)——映射一对多关联关系

在域模型中,类和类之间最普通的关系就是关联关系。在UML语言中,关联是有方向的。以客户(Customer)和订单(Order)的关系为例,一个客户可以发出多个订单,而一个订单只能属于一个客户。 从O...

myBatis学习笔记(5)——一对多关联表查询

需求上一篇笔记是一对一,一个学生对应一个老师,本次我们修改一下需求,一个老师有多个学生 参考:myBatis学习笔记(4)——一对一关联表查询 老师类:package com.bank.entit...

5.映射一对多关联关系

1.一对多关联关系 *   单项关联:仅仅建立从Order到Customer的多对一关联,即仅仅在Order类中定义customer属性。或者仅仅建立从Customer到Order的一对多关联,即仅仅...

hibernate5(10)注解映射[2]一对多单向关联

一对多单向关联映射在实际的博客网站中,用户肯定需要获取自己所写的文章,这时可以建立用户(一)对文章(多)的单向关联映射。 先来看我们的一方配置实例package com.zeng.model;imp...

【SSH进阶之路】【十】hibernate5 注解映射【2】 一对多单向关联

在上一篇文章里,我们从端方向一端建立关联关系,完成了从文章到作者的关联关系建立,但在实际的博客网站中,用户肯定还需要获取自己所写的文章,这时可以建立用户(一)对文章(多)的单向关联映射。 先来看我们的...

mybatis之入门到开发(五)之 关联查询 一对一 和一对多

一:一对一查询 1、商品订单数据模型 2、一对一查询,需求:查询一个订单信息,关联查询下单用户信息。【这里的表结构会打包打给大家】 3、开发步骤: 3.1、在navicat中写sql语句,...

NHibernate一对多单双向关联映射-NHibernate入门到精通系列9

本节为您介绍:NHibernate一对多单双向关联映射。 本节内容主要分两个方面进行介绍: 1:单向映射 2:双向映射 下面让我们开始介绍: 一、NHi...

Hibernate入门BLOG[八、Hibernate对象关系一对多关联关系]

1部门----多员工 在hibernate中一对多的对象模型关系:看下面部门类的set集合,这里主要是讲hibernate一对多的映射文件xml public class Dept { privat...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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