Mybatis 一对多(OneToOne)关系映射

xiaoxiao2021-02-28  84

关于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();    }  } 
转载请注明原文地址: https://www.6miu.com/read-63675.html

最新回复(0)