关闭

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

379人阅读 评论(0) 收藏 举报

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

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

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:18481次
    • 积分:249
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:19篇
    • 译文:0篇
    • 评论:1条
    最新评论