您的位置:首页 > 其它

Mybatis 一对多(OneToOne)关系映射

2017-06-07 21:59 369 查看
关于MyBatis一对多的设置如下:

1.创建数据库脚本

CREATE TABLE t_customer( 

  id int(10) not null auto_increment, 

  address varchar(120), 

  postcode varchar(6), 

  sex varchar(2), 

  cname varchar(24), 

  primary key(id) 

)charset="GB2312"; 

CREATE TABLE t_orders( 

  id int(10) not null auto_increment, 

  code varchar(24), 

  customer_id int(3) not null, 

  primary key(id) 

)charset="GB2312";

ALTER TABLE t_orders 
ADD CONSTRAINT orders_customer_fk FOREIGN KEY (customer_id) REFERENCES t_customer(id)
-- t_orders.customer_id 参照 t_customer.id

 

2.创建实体类(POJO)

Customer.java

package com.lixing.ibatis.entity.onetomany; 

import java.io.Serializable; 
import java.util.List; 

public class Customer implements Serializable{ 

  private static final long serialVersionUID
= 451949797460417653L; 

  private int id; 

  private String address; 

  private String postcode; 

  private String sex; 

  private String cname; 

  private List<Orders> orders;   //一个Customer 对应N多个Orders

  public int getId() { 

    return id; 

  } 

  public void setId(int id) { 

    this.id = id; 

  } 

  public String getAddress() { 

    return address; 

  } 

  public void setAddress(String address) { 

    this.address = address; 

  } 

  public String getPostcode() { 

    return postcode; 

  } 

  public void setPostcode(String postcode) { 

    this.postcode = postcode; 

  } 

  public String getSex() { 

    return sex; 

  } 

  public void setSex(String sex) { 

    this.sex = sex; 

  } 

  public String getCname() { 

    return cname; 

  } 

  public void setCname(String cname) { 

    this.cname = cname; 

  } 

  public List<Orders> getOrders() { 

    return orders; 

  } 

  public void setOrders(List<Orders> orders) { 

    this.orders = orders; 

  } 



 

Orders.java

package com.lixing.ibatis.entity.onetomany; 

import java.io.Serializable; 

public class Orders implements Serializable { 

  private static final long serialVersionUID
= 8215977396669780567L; 

  private int id; 

  private String code; 

  private int customerId; 

  private Customer customer;  //多个Orders对应一个Customer

    

  public int getId() { 

    return id; 

  } 

  public void setId(int id) { 

    this.id = id; 

  } 

  public String getCode() { 

    return code; 

  } 

  public void setCode(String code) { 

    this.code = code; 

  } 

  public int getCustomerId() { 

    return customerId; 

  } 

  public void setCustomerId(int customerId) { 

    this.customerId = customerId; 

  } 

  public Customer getCustomer() { 

    return customer; 

  } 

  public void setCustomer(Customer customer) { 

    this.customer = customer; 

  } 



 

3.创建Mapper映射接口

CustomerMapper.java

package com.lixing.ibatis.onetomany.mapper; 

import com.lixing.ibatis.entity.onetomany.Customer; 

public interface CustomerMapper { 

  void insertCustomer(Customer customer); 

  Customer getCustomer(int id); 



 

OrdersMapper.java

package com.lixing.ibatis.onetomany.mapper; 

import java.util.List; 

import com.lixing.ibatis.entity.onetomany.Orders; 

public interface OrdersMapper { 

  void insertOrders(Orders orders); 

  List<Orders> getOrders(int id);    //根据id

  List<Orders> getOrdersById(int customerId);   //根据customerId获得N多个对象



 

4.创建Mapper XML配置文件

CustomerMapper.xml

<?xml version="1.0" encoding="UTF-8" ?> 

<!DOCTYPE mapper    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"    

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
<mapper namespace="com.lixing.ibatis.onetomany.mapper.CustomerMapper"> 

  <parameterMap type="Customer" id="parameterCustomerMap"> 

    <parameter property="id"/> 

    <parameter property="address"/> 

    <parameter property="postcode"/> 

    <parameter property="sex"/> 

    <parameter property="cname"/>     

  </parameterMap> 

    

  <insert id="insertCustomer" parameterMap="parameterCustomerMap"> 

    <selectKey    keyProperty="id" resultType="int" order="AFTER"> 

      SELECT @@IDENTITY AS ID 

    </selectKey> 

    INSERT INTO t_customer(address,postcode,sex,cname) 

    VALUES(#{address},#{postcode},#{sex},#{cname}) 

  </insert>        

    

  <resultMap type="Customer" id="resultCustomerMap"> 

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

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

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

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

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

    <collection property="orders" column="id" select="com.lixing.ibatis.onetomany.mapper.OrdersMapper.getOrdersById"/> 
  </resultMap> 

    

  <select id="getCustomer" resultMap="resultCustomerMap" parameterType="int"> 

    SELECT * 

    FROM t_customer 

    WHERE id=#{id} 

  </select>         
</mapper> 

OrderMapper.xml

<?xml version="1.0" encoding="UTF-8" ?> 

<!DOCTYPE mapper    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"    

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
<mapper namespace="com.lixing.ibatis.onetomany.mapper.OrdersMapper"> 

  <parameterMap type="Orders" id="parameterOrdersMap"> 

    <parameter property="id"/> 

    <parameter property="code"/> 

    <parameter property="customerId"/> 

  </parameterMap> 

    

  <insert id="insertOrders"    parameterMap="parameterOrdersMap"> 

    <selectKey    keyProperty="id" resultType="int" order="AFTER"> 

      SELECT LAST_INSERT_ID() AS ID 

    </selectKey> 

    INSERT INTO t_orders(code,customer_id) 

    VALUES(#{code},#{customerId}) 

  </insert>    

    

  <resultMap type="Orders" id="ordersMap"> 

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

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

    <result property="customerId" column="customer_id"/> 

    <association property="customer" javaType="Customer" column="customer_id" select="com.lixing.ibatis.onetomany.mapper.CustomerMapper.getCustomer"/> 

  </resultMap>    

  <select id="getOrders" resultMap="ordersMap" parameterType="int"> 

    SELECT * FROM t_orders 

    WHERE id=#{id} 

  </select> 

    

  <select id="getOrdersById" resultMap="ordersMap" parameterType="int"> 

    SELECT * FROM t_orders 

    WHERE customer_id=#{customer_id} 

  </select> 

    
</mapper>    

 

5.mybatis-config.xml 文件

<?xml version="1.0" encoding="UTF-8" ?> 

<!DOCTYPE configuration 

        PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 

        "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration> 

  <settings> 

    <!-- changes from the defaults for testing --> 

    <setting name="cacheEnabled" value="false" /> 

    <setting name="useGeneratedKeys" value="true" /> 

    <setting name="defaultExecutorType" value="REUSE" /> 

  </settings> 

    

  <typeAliases> 

    <typeAlias type="com.lixing.ibatis.entity.onetomany.Customer" alias="Customer"/> 

    <typeAlias type="com.lixing.ibatis.entity.onetomany.Orders" alias="Orders"/> 

     

  </typeAliases> 

  <environments default="development"> 

    <environment id="development"> 

      <transactionManager type="JDBC" /> 

      <dataSource type="POOLED"> 

        <property name="driver" value="com.mysql.jdbc.Driver" /> 

        <property name="url" value="jdbc:mysql://localhost:3306/test" /> 

        <property name="username" value="root" /> 

        <property name="password" value="7501857" /> 

      </dataSource> 

    </environment> 

  </environments> 

  <mappers> 

    <mapper resource="com/lixing/ibatis/onetomany/mapper/CustomerMapper.xml"/> 

    <mapper resource="com/lixing/ibatis/onetomany/mapper/OrdersMapper.xml"/> 

  </mappers> 
</configuration> 

 

6.创建测试类

package com.lixing.ibatis.test; 

import java.util.Iterator; 
import java.util.List; 

import org.apache.ibatis.session.SqlSession; 
import org.apache.ibatis.session.SqlSessionFactory; 
import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 

import com.lixing.ibatis.entity.onetomany.Customer; 
import com.lixing.ibatis.entity.onetomany.Orders; 
import com.lixing.ibatis.onetomany.mapper.CustomerMapper; 
import com.lixing.ibatis.onetomany.mapper.OrdersMapper; 
import com.lixing.ibatis.util.MyBatisUtil; 

public class OrdersMapperTest { 

  private SqlSessionFactory sqlSessionFactory=null; 

  private SqlSession session=null; 

    

  @Before 

  public void before(){ 

    sqlSessionFactory=MyBatisUtil.getInstance(); 

    session=sqlSessionFactory.openSession(); 

  } 

    

  @Test 

  public void testInsertOrders(){ 

    Orders orders=new Orders(); 

    orders.setCode("code__1"); 

    orders.setCustomerId(1); 

     

    OrdersMapper ordersMapper=session.getMapper(OrdersMapper.class); 

    ordersMapper.insertOrders(orders); 

    session.commit();     

  } 

    

  @Test 

  public void testInsertCustomerOneToMany(){ 

    Customer customer=new Customer(); 

    customer.setCname("Lixing5"); 

    customer.setPostcode("518105"); 

    customer.setSex("男"); 

    customer.setAddress("广东省深圳市5"); 

     

    CustomerMapper customerMapper=session.getMapper(CustomerMapper.class); 

    customerMapper.insertCustomer(customer); 

    System.out.println(customer.getId()); 

     

    Orders orders1=new Orders(); 

    orders1.setCode("code__5_1"); 

    orders1.setCustomerId(customer.getId()); 

     

    Orders orders2=new Orders(); 

    orders2.setCode("code__5_2"); 

    orders2.setCustomerId(customer.getId()); 

     

    Orders orders3=new Orders(); 

    orders3.setCode("code__5_3"); 

    orders3.setCustomerId(customer.getId()); 

     

    OrdersMapper ordersMapper=session.getMapper(OrdersMapper.class); 

    ordersMapper.insertOrders(orders1); 

    ordersMapper.insertOrders(orders2); 

    ordersMapper.insertOrders(orders3); 

     

    session.commit();    

  } 

    

     

  @Test 

  public void testGetOrdersManyToOne(){ 

    OrdersMapper ordersMapper=session.getMapper(OrdersMapper.class); 

    List<Orders> list=ordersMapper.getOrdersById(5); 

    for(int i=0;i<list.size();i++){ 

      Orders orders=list.get(i); 

      Customer customer=orders.getCustomer(); 

      System.out.println(orders.getId()+"\t"+orders.getCode()+"\t"+orders.getCustomerId()); 

      System.out.println("\t \t--:"+customer.getId()+"\t"+customer.getCname()); 

    }     

    session.commit(); 

  } 

    

    

  @Test 

  public void testGetCustomerOneToMany(){ 

    CustomerMapper customerMapper=session.getMapper(CustomerMapper.class); 

    Customer customer=customerMapper.getCustomer(5); 

    List<Orders> orders=customer.getOrders(); 

    System.out.println(customer.getId()+"\t"+customer.getCname()+"\t"+customer.getPostcode()+"\t"+customer.getAddress()); 

    for(int i=0;i<orders.size();i++){ 

      Orders order=orders.get(i); 

      System.out.println("\t \t --:"+order.getId()+"\t"+order.getCode()+"\t"+order.getCustomerId()); 

    } 

    session.commit(); 

  } 

    

  @After 

  public void after(){ 

    session.close(); 

  } 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: