Ibatis的一对多关联

1、建立连个表:订单表和订单明细表

Sql代码

  1. create table T_ORDER   
  2. (   
  3.   ID   VARCHAR2(32) not null,    
  4.   NAME VARCHAR2(255)   
  5. );   
  6.   
  7. alter table T_ORDER   
  8.   add constraint PK_ORDER primary key (ID);   
  9.   
  10.   
  11.   
  12. create table T_ORDER_LINE   
  13. (   
  14.   ID       VARCHAR2(32) not null,   
  15.   ORDER_ID VARCHAR2(32) not null,   
  16.   PRODUCT  VARCHAR2(32),   
  17.   PRICE    NUMBER   
  18. );   
  19.   
  20. alter table T_ORDER_LINE   
  21.   add constraint PK_ORDER_LINE primary key (ID);   
  22.   
  23. alter table T_ORDER_LINE   
  24.   add constraint FK_ORDER_ID foreign key (ORDER_ID)   
  25.   references T_ORDER (ID);  

create table T_ORDER

(

  ID   VARCHAR2(32) not null,

  NAME VARCHAR2(255)

);

 

alter table T_ORDER

  add constraint PK_ORDER primary key (ID);

 

 

 

create table T_ORDER_LINE

(

  ID       VARCHAR2(32) not null,

  ORDER_ID VARCHAR2(32) not null,

  PRODUCT  VARCHAR2(32),

  PRICE    NUMBER

);

 

alter table T_ORDER_LINE

  add constraint PK_ORDER_LINE primary key (ID);

 

alter table T_ORDER_LINE

  add constraint FK_ORDER_ID foreign key (ORDER_ID)

  references T_ORDER (ID);

 

 

2、建立实体类

    Order.java

Java代码

  1. import java.io.Serializable;   
  2. import java.util.ArrayList;   
  3. import java.util.List;   
  4.   
  5. public class Order implements Serializable {   
  6.   
  7.     private static final long serialVersionUID = 1L;   
  8.   
  9.     private String id;   
  10.     private String name;   
  11.     private List<OrderLine> orderLines = new ArrayList<OrderLine>();   
  12.   
  13.         //setter...getter...   
  14.   
  15. }  

import java.io.Serializable;

import java.util.ArrayList;

import java.util.List;

 

public class Order implements Serializable {

 

private static final long serialVersionUID = 1L;

 

private String id;

private String name;

private List<OrderLine> orderLines = new ArrayList<OrderLine>();

 

        //setter...getter...

 

}

 

    OrderLine.java

Java代码

  1. import java.io.Serializable;   
  2.   
  3. public class OrderLine implements Serializable {   
  4.   
  5.     private static final long serialVersionUID = 1L;   
  6.   
  7.     private String id;   
  8.     private String product;   
  9.     private int price;   
  10.     private Order order;   
  11.   
  12.        //setter...getter...   
  13.   
  14. }  

import java.io.Serializable;

 

public class OrderLine implements Serializable {

 

private static final long serialVersionUID = 1L;

 

private String id;

private String product;

private int price;

private Order order;

 

       //setter...getter...

 

}

 

 

三、建立映射文件(重点)

Order.xml

Xml代码

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.   
  3. <!DOCTYPE sqlMap            
  4.      
  5.     PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"            
  6.      
  7.     "http://ibatis.apache.org/dtd/sql-map-2.dtd">  
  8.   
  9. <sqlMap namespace="Order">  
  10.   
  11.     <typeAlias type="com.keer.entity.Order" alias="order" />  
  12.     <typeAlias type="com.keer.entity.OrderLine" alias="orderLine" />  
  13.   
  14.     <resultMap class="order" id="resultOrder">  
  15.         <result property="id" column="id" />  
  16.         <result property="name" column="name" />  
  17.         <result property="orderLines"  
  18.             select="Order.getOrderLinesByOrderId" column="id" />  
  19.     </resultMap>  
  20.   
  21.     <resultMap class="orderLine" id="resultLine">  
  22.         <result property="id" column="id" />  
  23.         <result property="product" column="product" />  
  24.         <result property="price" column="price" />  
  25.         <result property="order" column="order_id"  
  26.             select="getOrderById" />  
  27.     </resultMap>  
  28.   
  29.     <select id="getOrderById" resultMap="resultOrder"  
  30.         parameterClass="string">  
  31.         <![CDATA[     
  32.             select * from t_order where id = #id#  
  33.         ]]>  
  34.     </select>  
  35.   
  36.     <select id="getOrderLinesByOrderId" resultClass="orderLine"  
  37.         parameterClass="string">  
  38.         <![CDATA[  
  39.         select * from t_order_line where order_id = #id#  
  40.         ]]>  
  41.     </select>  
  42.   
  43.     <insert id="addOrderLine" parameterClass="orderLine">  
  44.         <![CDATA[  
  45.         insert into t_order_line(id,order_id,product,price) values(#id#,#order.id#,#product#,#price#)  
  46.         ]]>  
  47.     </insert>  
  48.   
  49. </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="Order">

 

<typeAlias type="com.keer.entity.Order" alias="order" />

<typeAlias type="com.keer.entity.OrderLine" alias="orderLine" />

 

<resultMap class="order" id="resultOrder">

  <result property="id" column="id" />

  <result property="name" column="name" />

  <result property="orderLines"

   select="Order.getOrderLinesByOrderId" column="id" />

</resultMap>

 

<resultMap class="orderLine" id="resultLine">

  <result property="id" column="id" />

  <result property="product" column="product" />

  <result property="price" column="price" />

  <result property="order" column="order_id"

   select="getOrderById" />

</resultMap>

 

<select id="getOrderById" resultMap="resultOrder"

  parameterClass="string">

  <![CDATA[  

        select * from t_order where id = #id#

    ]]>

</select>

 

<select id="getOrderLinesByOrderId" resultClass="orderLine"

  parameterClass="string">

  <![CDATA[

  select * from t_order_line where order_id = #id#

  ]]>

</select>

 

<insert id="addOrderLine" parameterClass="orderLine">

  <![CDATA[

  insert into t_order_line(id,order_id,product,price) values(#id#,#order.id#,#product#,#price#)

  ]]>

</insert>

 

</sqlMap>

 

sqlMapConfig.xml

Xml代码

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE sqlMapConfig            
  3.      
  4.     PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"            
  5.      
  6.     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">     
  7.      
  8. <sqlMapConfig>     
  9.      
  10.     <settings       
  11.             cacheModelsEnabled="true"         
  12.             enhancementEnabled="true"         
  13.             errorTracingEnabled="true"         
  14.             lazyLoadingEnabled="true"         
  15.             maxRequests="32"         
  16.             maxSessions="10"         
  17.             maxTransactions="5"         
  18.             useStatementNamespaces="true"/>     
  19.            
  20.     <!-- 使用spring之后,数据源的配置移植到了spring上,所以iBATIS本身的配置可以取消 -->  
  21.   
  22.     <sqlMap resource="Order.xml"/>     
  23. </sqlMapConfig>  

<?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> 

 

    <settings   

            cacheModelsEnabled="true"     

            enhancementEnabled="true"     

            errorTracingEnabled="true"     

            lazyLoadingEnabled="true"     

            maxRequests="32"     

            maxSessions="10"     

            maxTransactions="5"     

            useStatementNamespaces="true"/> 

       

    <!-- 使用spring之后,数据源的配置移植到了spring上,所以iBATIS本身的配置可以取消 -->

 

    <sqlMap resource="Order.xml"/> 

</sqlMapConfig>

 

四、采用spring整合(详见附件)

五、建立daoservice实现(详见附件)

六、测试类

 

Java代码

  1. //......   
  2.   
  3.     private OrderService orderService;   
  4.   
  5.     @Before  
  6.     public void setUp() throws Exception {   
  7.         ApplicationContext ct = new ClassPathXmlApplicationContext(   
  8.                 "applicationContext*.xml");   
  9.         orderService = (OrderService) ct.getBean("orderService");   
  10.     }   
  11.   
  12. //...   
  13.   
  14.   
  15.     @Test  
  16.     public void testOneToMany() {   
  17.         Order order = (Order) this.orderService.getOrderById("order1");   
  18.         // System.out.println(order.getId()+"/t");   
  19.         System.out.println(order.getId() + "/t" + order.getOrderLines().size());   
  20.         List<OrderLine> orderLines = order.getOrderLines();   
  21.         for (OrderLine orderLine : orderLines) {   
  22.             System.out.println(orderLine.getId() + "/t"  
  23.                     + orderLine.getProduct() + "/t" + orderLine.getPrice()   
  24.                     + "/t" + order.getName());   
  25.         }   
  26.     }   
  27.   
  28.     @Test  
  29.     public void saveMany() {   
  30.         Order order = (Order) this.orderService.getOrderById("order1");   
  31.         OrderLine orderLine = new OrderLine();   
  32.         orderLine.setId("123");   
  33.         orderLine.setProduct("book");   
  34.         orderLine.setPrice(33);   
  35.         orderLine.setOrder(order);   
  36.         this.orderService.save(orderLine);   
  37.     }   
  38.   
  39. //...  

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值