myBatis 一对一 和一对多映射

来源:互联网 发布:高三毕业后干什么知乎 编辑:程序博客网 时间:2024/05/29 16:47
比如说一个人可以买多张车票
  1. public class Customer {  
  2.     private Integer customerId;  
  3.     private String customerName;  
  4.     private Integer customerTel;  
  5.     private List<Ticket> tickets;//使用一个List来表示车票  
  6.   
  7.     public List<Ticket> getTickets() {  
  8.         return tickets;  
  9.     }  
  10.   
  11.     public void setTickets(List<Ticket> tickets) {  
  12.         this.tickets = tickets;  
  13.     }  
  14.   
  15.     public Integer getCustomerId() {  
  16.         return customerId;  
  17.     }  
  18.   
  19.     public void setCustomerId(Integer customerId) {  
  20.         this.customerId = customerId;  
  21.     }  
  22.   
  23.     public String getCustomerName() {  
  24.         return customerName;  
  25.     }  
  26.   
  27.     public void setCustomerName(String customerName) {  
  28.         this.customerName = customerName;  
  29.     }  
  30.   
  31.     public Integer getCustomerTel() {  
  32.         return customerTel;  
  33.     }  
  34.   
  35.     public void setCustomerTel(Integer customerTel) {  
  36.         this.customerTel = customerTel;  
  37.     }  
  38.   
  39.     @Override  
  40.     public String toString() {  
  41.         return "Customer [customerId=" + customerId + ", customerName="  
  42.                 + customerName + ", customerTel=" + customerTel+"]";  
  43.     }  
  44.   
  45. 而我们的车票 一般只能对应一个人
    1. public class Ticket {  
    2.     private Integer ticketId;  
    3.     private String ticketAddress;  
    4.     private Integer ticketPrice;  
    5.     private Integer ticketCId;  
    6.     private Customer customer;//使用一个customer来表示顾客  
    7.   
    8.     public Customer getCustomer() {  
    9.         return customer;  
    10.     }  
    11.   
    12.     public void setCustomer(Customer customer) {  
    13.         this.customer = customer;  
    14.     }  
    15.   
    16.     public Integer getTicketId() {  
    17.         return ticketId;  
    18.     }  
    19.   
    20.     public void setTicketId(Integer ticketId) {  
    21.         this.ticketId = ticketId;  
    22.     }  
    23.   
    24.     public String getTicketAddress() {  
    25.         return ticketAddress;  
    26.     }  
    27.   
    28.     public void setTicketAddress(String ticketAddress) {  
    29.         this.ticketAddress = ticketAddress;  
    30.     }  
    31.   
    32.     public Integer getTicketPrice() {  
    33.         return ticketPrice;  
    34.     }  
    35.   
    36.     public void setTicketPrice(Integer ticketPrice) {  
    37.         this.ticketPrice = ticketPrice;  
    38.     }  
    39.   
    40.     public Integer getTicketCId() {  
    41.         return ticketCId;  
    42.     }  
    43.   
    44.     public void setTicketCId(Integer ticketCId) {  
    45.         this.ticketCId = ticketCId;  
    46.     }  
    47.   
    48.     @Override  
    49.     public String toString() {  
    50.         return "Ticket [ticketId=" + ticketId + ", ticketAddress="  
    51.                 + ticketAddress + ", ticketPrice=" + ticketPrice  
    52.                 + ", ticketCId=" + ticketCId + "]";  
    53.     }  
    54.   
    55.   
    56. }  

  46. 3、定义sql映射文件

    (1)首先是一对多关联:

    MyBatis中使用collection标签来解决一对多的关联查询,collection标签可用的属性如下:

    • property:指的是集合属性的值
    • ofType:指的是集合中元素的类型
    • column:所对应的外键字段名称
    • select:使用另一个查询封装的结果

    [html] view plain copy
    1. <?xml version="1.0" encoding="UTF-8" ?>  
    2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
    3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
    4. <mapper namespace="com.lwm.model.CustomerMapper">  
    5.  <!-- 定义数据库字段与实体对象的映射关系 -->  
    6.     <resultMap type="Customer" id="customerBean">  
    7.         <id column="customerId" property="customerId"/>  
    8.         <result column="customerName" property="customerName"/>  
    9.         <result column="customerTel" property="customerTel"/>       
    10.         <!-- 一对多的关系 -->  
    11.         <!-- property: 指的是集合属性的值, ofType:指的是集合中元素的类型 -->  
    12.         <collection property="tickets" ofType="Ticket">  
    13.             <id column="ticketId" property="ticketId"/>  
    14.             <result column="ticketAddress" property="ticketAddress"/>  
    15.             <result column="ticketPrice" property="ticketPrice"/>  
    16.             <result column="ticketCId" property="ticketCId"/>  
    17.         </collection>  
    18.     </resultMap>    
    19.       
    20.     <!-- 根据id查询Person, 关联将Orders查询出来 -->  
    21.     <select id="selectCustomerByName" parameterType="string" resultMap="customerBean">  
    22.         select c.*,t.* from t_customer c,t_ticket t  where  c.customerId=t.ticketCId and c.customerName =#{customerName};  
    23.     </select>  
    24.       
    25.  </mapper>  

    (2)接着是一对一关联:

    MyBatis中使用association标签来解决一对一的关联查询,association标签可用的属性如下:

    • property:对象属性的名称
    • javaType:对象属性的类型
    • column:所对应的外键字段名称
    • select:使用另一个查询封装的结果

    [html] view plain copy
    1. <?xml version="1.0" encoding="UTF-8" ?>  
    2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
    3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
    4. <mapper namespace="com.lwm.model.TicketMapper">  
    5.     <!-- 定义数据库字段与实体对象的映射关系  -->  
    6.     <resultMap type="Ticket" id="ticketBean">  
    7.         <id column="ticketId" property="ticketId" />  
    8.         <result column="ticketAddress" property="ticketAddress" />  
    9.         <result column="ticketPrice" property="ticketPrice" />  
    10.         <result column="ticketCId" property="ticketCId" />  
    11.         <!-- 一对一的关系 -->  
    12.         <!-- property: 指的是属性的值, javaType:指的是元素的类型 -->  
    13.         <association property="customer" javaType="Customer">  
    14.             <id column="customerId" property="customerId" />  
    15.             <result column="customerName" property="customerName" />  
    16.             <result column="customerTel" property="customerTel" />  
    17.         </association>  
    18.     </resultMap>  
    19.     <!-- 根据id查询ticket, 关联将Customer查询出来 -->  
    20.     <select id="selectTicketById" parameterType="int" resultMap="ticketBean">  
    21.         select c.*,t.* from t_customer c,t_ticket t where  
    22.         c.customerId=t.ticketCId and t.ticketId =#{ticketId}  
    23.     </select>  
    24. </mapper>  


  47.   

  48.   
原创粉丝点击