MyBatis一对多和多对一

     在学习MyBatis3的过程中,文档上面一直在强调一个id的东西!在做这个实验的时候,也因为没有理解清楚id含义而导致 一对多的“多”中也只有一条数据。id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性。这帮助来改进整体表现,特别是缓存和嵌入结果映射。 所以不同数据的id应该唯一区别,不然导致数据 结果集只有一条数据。

一、表


二、实体

1.person

  1. package com.kerwin.mybatis.pojo;  
  2.   
  3. import java.util.List;  
  4.   
  5. public class Person {  
  6.   
  7.     private int id;  
  8.     private String name;  
  9.     private List<Orders> orderList;  
  10.   
  11.     public int getId() {  
  12.         return id;  
  13.     }  
  14.   
  15.     public void setId(int id) {  
  16.         this.id = id;  
  17.     }  
  18.   
  19.     public String getName() {  
  20.         return name;  
  21.     }  
  22.   
  23.     public void setName(String name) {  
  24.         this.name = name;  
  25.     }  
  26.   
  27.     public List<Orders> getOrderList() {  
  28.         return orderList;  
  29.     }  
  30.   
  31.     public void setOrderList(List<Orders> orderList) {  
  32.         this.orderList = orderList;  
  33.     }  
  34.   
  35.     @Override  
  36.     public String toString() {  
  37.         return “Person [id=” + id + “, name=” + name + “]”;  
  38.     }  
  39.   
  40.     public Person() {  
  41.         super();  
  42.         // TODO Auto-generated constructor stub  
  43.     }  
  44.   
  45.     public Person(int id, String name, List<Orders> orderList) {  
  46.         super();  
  47.         this.id = id;  
  48.         this.name = name;  
  49.         this.orderList = orderList;  
  50.     }  
  51.   
  52. }  
package com.kerwin.mybatis.pojo;

import java.util.List;

public class Person {

    private int id;
    private String name;
    private List<Orders> orderList;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Orders> getOrderList() {
        return orderList;
    }

    public void setOrderList(List<Orders> orderList) {
        this.orderList = orderList;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + "]";
    }

    public Person() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Person(int id, String name, List<Orders> orderList) {
        super();
        this.id = id;
        this.name = name;
        this.orderList = orderList;
    }

}

2.order


  1. package com.kerwin.mybatis.pojo;  
  2.   
  3. public class Orders {  
  4.     private int id;  
  5.     private double price;  
  6.     private Person person;  
  7.       
  8.       
  9.       
  10.     public Person getPerson() {  
  11.         return person;  
  12.     }  
  13.   
  14.     public void setPerson(Person person) {  
  15.         this.person = person;  
  16.     }  
  17.   
  18.     public int getId() {  
  19.         return id;  
  20.     }  
  21.   
  22.     public void setId(int id) {  
  23.         this.id = id;  
  24.     }  
  25.   
  26.   
  27.   
  28.     public double getPrice() {  
  29.         return price;  
  30.     }  
  31.   
  32.     public void setPrice(double price) {  
  33.         this.price = price;  
  34.     }  
  35.   
  36.   
  37.       
  38.   
  39.     @Override  
  40.     public String toString() {  
  41.         return “Orders [id=” + id + “, price=” + price + “]”;  
  42.     }  
  43.   
  44.     public Orders() {  
  45.         super();  
  46.         // TODO Auto-generated constructor stub  
  47.     }  
  48.   
  49. }  
package com.kerwin.mybatis.pojo;

public class Orders {
    private int id;
    private double price;
    private Person person;



    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }



    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }




    @Override
    public String toString() {
        return "Orders [id=" + id + ", price=" + price + "]";
    }

    public Orders() {
        super();
        // TODO Auto-generated constructor stub
    }

}

三、映射mapper文件

1. PersonMapper.xml

  1. <?xml version=“1.0” encoding=“UTF-8”?>  
  2. <!DOCTYPE mapper  
  3.   PUBLIC ”-//mybatis.org//DTD Mapper 3.0//EN”  
  4.   “http://mybatis.org/dtd/mybatis-3-mapper.dtd”>  
  5.       
  6. <mapper namespace=“com.kerwin.mybatis.pojo.Person”>  
  7.     <resultMap type=“com.kerwin.mybatis.pojo.Person” id=“personreSultMap”>  
  8.         <id column=“p_id” property=“id”/>  
  9.         <result column=“name” property=“name”/>  
  10.         <collection property=“orderList” ofType=“com.kerwin.mybatis.pojo.Orders” column=“pid”>  
  11.             <id column=“o_id” property=“id”/>  
  12.             <result column=“price” property=“price”/>  
  13.         </collection>  
  14.           
  15.     </resultMap>  
  16.       
  17.     <select id=“selectPersonFetchOrder” parameterType=“int” resultMap=“personreSultMap” >  
  18.         select p.*,o.* from person p,orders o where o.pid=p.p_id and p.p_id=#{id}  
  19.     </select>  
  20.       
  21.       
  22. </mapper>  
<?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.kerwin.mybatis.pojo.Person">
    <resultMap type="com.kerwin.mybatis.pojo.Person" id="personreSultMap">
        <id column="p_id" property="id"/>
        <result column="name" property="name"/>
        <collection property="orderList" ofType="com.kerwin.mybatis.pojo.Orders" column="pid">
            <id column="o_id" property="id"/>
            <result column="price" property="price"/>
        </collection>

    </resultMap>

    <select id="selectPersonFetchOrder" parameterType="int" resultMap="personreSultMap" >
        select p.*,o.* from person p,orders o where o.pid=p.p_id and p.p_id=#{id}
    </select>


</mapper>

2.     OrdersMapper.xml

  1. <?xml version=“1.0” encoding=“UTF-8”?>  
  2. <!DOCTYPE mapper  
  3.   PUBLIC ”-//mybatis.org//DTD Mapper 3.0//EN”  
  4.   “http://mybatis.org/dtd/mybatis-3-mapper.dtd”>  
  5.   
  6. <mapper namespace=“com.kerwin.mybatis.pojo.Orders”>  
  7.     <resultMap type=“com.kerwin.mybatis.pojo.Orders” id=“OrdersResultMap”>  
  8.         <id column=“o_id” property=“id”/>  
  9.         <result column=“price” property=“price”/>  
  10.         <association property=“person” javaType=“com.kerwin.mybatis.pojo.Person”>  
  11.             <id column=“p_id” property=“id”/>  
  12.             <result column=“name” property=“name”/>  
  13.         </association>  
  14.     </resultMap>  
  15.       
  16.     <select id=“selectOrdersFetchPerson” resultMap=“OrdersResultMap”>  
  17.         select p.*,o.* from person p,orders o where o.pid=p.p_id and o.o_id=#{id}   
  18.     </select>  
  19.   
  20. </mapper>  
<?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.kerwin.mybatis.pojo.Orders">
    <resultMap type="com.kerwin.mybatis.pojo.Orders" id="OrdersResultMap">
        <id column="o_id" property="id"/>
        <result column="price" property="price"/>
        <association property="person" javaType="com.kerwin.mybatis.pojo.Person">
            <id column="p_id" property="id"/>
            <result column="name" property="name"/>
        </association>
    </resultMap>

    <select id="selectOrdersFetchPerson" resultMap="OrdersResultMap">
        select p.*,o.* from person p,orders o where o.pid=p.p_id and o.o_id=#{id} 
    </select>

</mapper>

3.sqlMapConfig.xml

  1. <?xml version=“1.0” encoding=“UTF-8” ?>  
  2. <!DOCTYPE configuration  
  3.   PUBLIC ”-//mybatis.org//DTD Config 3.0//EN”  
  4.   “http://mybatis.org/dtd/mybatis-3-config.dtd”>  
  5. <configuration>  
  6.   
  7. <typeAliases>  
  8.     <typeAlias type=“com.kerwin.mybatis.pojo.Author” alias=“Author”/>  
  9. </typeAliases>  
  10.   <environments default=“development”>  
  11.     <environment id=“development”>  
  12.       <transactionManager type=“JDBC”/>  
  13.       <dataSource type=“POOLED”>  
  14.         <property name=“driver” value=“com.mysql.jdbc.Driver”/>  
  15.         <property name=“url” value=“jdbc:mysql://localhost:3306/mybatis”/>  
  16.         <property name=“username” value=“root”/>  
  17.         <property name=“password” value=“root”/>  
  18.       </dataSource>  
  19.     </environment>  
  20.   </environments>  
  21.   <mappers>  
  22.     <mapper resource=“com/kerwin/mybatis/pojo/AuthorMapper.xml”/>  
  23.     <mapper resource=“com/kerwin/mybatis/pojo/PostMapper.xml”/>  
  24.     <mapper resource=“com/kerwin/mybatis/pojo/PersonMapper.xml”/>  
  25.     <mapper resource=“com/kerwin/mybatis/pojo/OrdersMapper.xml”/>  
  26.   </mappers>  
  27. </configuration>  
<?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>

<typeAliases>
    <typeAlias type="com.kerwin.mybatis.pojo.Author" alias="Author"/>
</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/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/kerwin/mybatis/pojo/AuthorMapper.xml"/>
    <mapper resource="com/kerwin/mybatis/pojo/PostMapper.xml"/>
    <mapper resource="com/kerwin/mybatis/pojo/PersonMapper.xml"/>
    <mapper resource="com/kerwin/mybatis/pojo/OrdersMapper.xml"/>
  </mappers>
</configuration>

四。测试类

  1. /** 
  2.  *  
  3.  */  
  4. package com.kerwin.mybatis.test;  
  5.   
  6. import java.io.InputStream;  
  7.   
  8. import org.apache.ibatis.io.Resources;  
  9. import org.apache.ibatis.session.SqlSession;  
  10. import org.apache.ibatis.session.SqlSessionFactory;  
  11. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  12. import org.junit.BeforeClass;  
  13. import org.junit.Test;  
  14.   
  15. import com.kerwin.mybatis.pojo.Orders;  
  16. import com.kerwin.mybatis.pojo.Person;  
  17.   
  18. /** 
  19.  * @author Administrator 
  20.  *  
  21.  */  
  22. public class PersonAndOrderTest {  
  23.   
  24.     private static SqlSessionFactory sessionFactory;  
  25.       
  26.     /** 
  27.      * @throws java.lang.Exception 
  28.      */  
  29.     @BeforeClass  
  30.     public static void setUpBeforeClass() throws Exception {  
  31.         SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();  
  32.         InputStream inputStream = Resources.getResourceAsStream(”sqlMapConfig.xml”);  
  33.         sessionFactory = factoryBuilder.build(inputStream);  
  34.   
  35.     }  
  36.       
  37.     //一对多,查询person(一)级联查询订单order(多)  
  38.     @Test  
  39.     public void testSelectPersonFetchOrder() throws Exception {  
  40.         SqlSession session = sessionFactory.openSession();  
  41.         Person person = session.selectOne(”com.kerwin.mybatis.pojo.Person.selectPersonFetchOrder”1);  
  42.         System.out.println(person);  
  43.         System.out.println(person.getOrderList().size());  
  44.         for(Orders orders : person.getOrderList()){  
  45.             System.out.println(orders);  
  46.         }  
  47.         session.close();  
  48.     }  
  49.       
  50.     //多对一,查询订单order(多)级联查询person(一)  
  51.     @Test  
  52.     public void testSelectOrdersFetchPerson() throws Exception{  
  53.         SqlSession session = sessionFactory.openSession();  
  54.         Orders orders = session.selectOne(”com.kerwin.mybatis.pojo.Orders.selectOrdersFetchPerson”1);  
  55.         System.out.println(orders);  
  56.         System.out.println(orders.getPerson());  
  57.         session.close();  
  58.     }  
  59.       
  60. }  
/**
 * 
 */
package com.kerwin.mybatis.test;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;
import org.junit.Test;

import com.kerwin.mybatis.pojo.Orders;
import com.kerwin.mybatis.pojo.Person;

/**
 * @author Administrator
 * 
 */
public class PersonAndOrderTest {

    private static SqlSessionFactory sessionFactory;

    /**
     * @throws java.lang.Exception
     */
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
        InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        sessionFactory = factoryBuilder.build(inputStream);

    }

    //一对多,查询person(一)级联查询订单order(多)
    @Test
    public void testSelectPersonFetchOrder() throws Exception {
        SqlSession session = sessionFactory.openSession();
        Person person = session.selectOne("com.kerwin.mybatis.pojo.Person.selectPersonFetchOrder", 1);
        System.out.println(person);
        System.out.println(person.getOrderList().size());
        for(Orders orders : person.getOrderList()){
            System.out.println(orders);
        }
        session.close();
    }

    //多对一,查询订单order(多)级联查询person(一)
    @Test
    public void testSelectOrdersFetchPerson() throws Exception{
        SqlSession session = sessionFactory.openSession();
        Orders orders = session.selectOne("com.kerwin.mybatis.pojo.Orders.selectOrdersFetchPerson", 1);
        System.out.println(orders);
        System.out.println(orders.getPerson());
        session.close();
    }

}

五、测试结果

1.一对多,查询person(一)级联查询订单order(多)


2.多对一,查询订单order(多)级联查询person(一)


注意:两张表中的主键id字段名要唯一,例如不能都写id,不然的话,在一对多查询的时候就会出现:级联出来的订单项只有一条记录。我之前就是将两张表的主键id字段名都写为id,导致测试结果级联出来的多一直只有一条数据,具体如下:



                </div>
     在学习MyBatis3的过程中,文档上面一直在强调一个id的东西!在做这个实验的时候,也因为没有理解清楚id含义而导致 一对多的“多”中也只有一条数据。id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性。这帮助来改进整体表现,特别是缓存和嵌入结果映射。 所以不同数据的id应该唯一区别,不然导致数据 结果集只有一条数据。

一、表


二、实体

1.person

  1. package com.kerwin.mybatis.pojo;  
  2.   
  3. import java.util.List;  
  4.   
  5. public class Person {  
  6.   
  7.     private int id;  
  8.     private String name;  
  9.     private List<Orders> orderList;  
  10.   
  11.     public int getId() {  
  12.         return id;  
  13.     }  
  14.   
  15.     public void setId(int id) {  
  16.         this.id = id;  
  17.     }  
  18.   
  19.     public String getName() {  
  20.         return name;  
  21.     }  
  22.   
  23.     public void setName(String name) {  
  24.         this.name = name;  
  25.     }  
  26.   
  27.     public List<Orders> getOrderList() {  
  28.         return orderList;  
  29.     }  
  30.   
  31.     public void setOrderList(List<Orders> orderList) {  
  32.         this.orderList = orderList;  
  33.     }  
  34.   
  35.     @Override  
  36.     public String toString() {  
  37.         return “Person [id=” + id + “, name=” + name + “]”;  
  38.     }  
  39.   
  40.     public Person() {  
  41.         super();  
  42.         // TODO Auto-generated constructor stub  
  43.     }  
  44.   
  45.     public Person(int id, String name, List<Orders> orderList) {  
  46.         super();  
  47.         this.id = id;  
  48.         this.name = name;  
  49.         this.orderList = orderList;  
  50.     }  
  51.   
  52. }  
package com.kerwin.mybatis.pojo;

import java.util.List;

public class Person {

    private int id;
    private String name;
    private List<Orders> orderList;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Orders> getOrderList() {
        return orderList;
    }

    public void setOrderList(List<Orders> orderList) {
        this.orderList = orderList;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + "]";
    }

    public Person() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Person(int id, String name, List<Orders> orderList) {
        super();
        this.id = id;
        this.name = name;
        this.orderList = orderList;
    }

}

2.order


  1. package com.kerwin.mybatis.pojo;  
  2.   
  3. public class Orders {  
  4.     private int id;  
  5.     private double price;  
  6.     private Person person;  
  7.       
  8.       
  9.       
  10.     public Person getPerson() {  
  11.         return person;  
  12.     }  
  13.   
  14.     public void setPerson(Person person) {  
  15.         this.person = person;  
  16.     }  
  17.   
  18.     public int getId() {  
  19.         return id;  
  20.     }  
  21.   
  22.     public void setId(int id) {  
  23.         this.id = id;  
  24.     }  
  25.   
  26.   
  27.   
  28.     public double getPrice() {  
  29.         return price;  
  30.     }  
  31.   
  32.     public void setPrice(double price) {  
  33.         this.price = price;  
  34.     }  
  35.   
  36.   
  37.       
  38.   
  39.     @Override  
  40.     public String toString() {  
  41.         return “Orders [id=” + id + “, price=” + price + “]”;  
  42.     }  
  43.   
  44.     public Orders() {  
  45.         super();  
  46.         // TODO Auto-generated constructor stub  
  47.     }  
  48.   
  49. }  
package com.kerwin.mybatis.pojo;

public class Orders {
    private int id;
    private double price;
    private Person person;



    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }



    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }




    @Override
    public String toString() {
        return "Orders [id=" + id + ", price=" + price + "]";
    }

    public Orders() {
        super();
        // TODO Auto-generated constructor stub
    }

}

三、映射mapper文件

1. PersonMapper.xml

  1. <?xml version=“1.0” encoding=“UTF-8”?>  
  2. <!DOCTYPE mapper  
  3.   PUBLIC ”-//mybatis.org//DTD Mapper 3.0//EN”  
  4.   “http://mybatis.org/dtd/mybatis-3-mapper.dtd”>  
  5.       
  6. <mapper namespace=“com.kerwin.mybatis.pojo.Person”>  
  7.     <resultMap type=“com.kerwin.mybatis.pojo.Person” id=“personreSultMap”>  
  8.         <id column=“p_id” property=“id”/>  
  9.         <result column=“name” property=“name”/>  
  10.         <collection property=“orderList” ofType=“com.kerwin.mybatis.pojo.Orders” column=“pid”>  
  11.             <id column=“o_id” property=“id”/>  
  12.             <result column=“price” property=“price”/>  
  13.         </collection>  
  14.           
  15.     </resultMap>  
  16.       
  17.     <select id=“selectPersonFetchOrder” parameterType=“int” resultMap=“personreSultMap” >  
  18.         select p.*,o.* from person p,orders o where o.pid=p.p_id and p.p_id=#{id}  
  19.     </select>  
  20.       
  21.       
  22. </mapper>  
<?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.kerwin.mybatis.pojo.Person">
    <resultMap type="com.kerwin.mybatis.pojo.Person" id="personreSultMap">
        <id column="p_id" property="id"/>
        <result column="name" property="name"/>
        <collection property="orderList" ofType="com.kerwin.mybatis.pojo.Orders" column="pid">
            <id column="o_id" property="id"/>
            <result column="price" property="price"/>
        </collection>

    </resultMap>

    <select id="selectPersonFetchOrder" parameterType="int" resultMap="personreSultMap" >
        select p.*,o.* from person p,orders o where o.pid=p.p_id and p.p_id=#{id}
    </select>


</mapper>

2.     OrdersMapper.xml

  1. <?xml version=“1.0” encoding=“UTF-8”?>  
  2. <!DOCTYPE mapper  
  3.   PUBLIC ”-//mybatis.org//DTD Mapper 3.0//EN”  
  4.   “http://mybatis.org/dtd/mybatis-3-mapper.dtd”>  
  5.   
  6. <mapper namespace=“com.kerwin.mybatis.pojo.Orders”>  
  7.     <resultMap type=“com.kerwin.mybatis.pojo.Orders” id=“OrdersResultMap”>  
  8.         <id column=“o_id” property=“id”/>  
  9.         <result column=“price” property=“price”/>  
  10.         <association property=“person” javaType=“com.kerwin.mybatis.pojo.Person”>  
  11.             <id column=“p_id” property=“id”/>  
  12.             <result column=“name” property=“name”/>  
  13.         </association>  
  14.     </resultMap>  
  15.       
  16.     <select id=“selectOrdersFetchPerson” resultMap=“OrdersResultMap”>  
  17.         select p.*,o.* from person p,orders o where o.pid=p.p_id and o.o_id=#{id}   
  18.     </select>  
  19.   
  20. </mapper>  
<?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.kerwin.mybatis.pojo.Orders">
    <resultMap type="com.kerwin.mybatis.pojo.Orders" id="OrdersResultMap">
        <id column="o_id" property="id"/>
        <result column="price" property="price"/>
        <association property="person" javaType="com.kerwin.mybatis.pojo.Person">
            <id column="p_id" property="id"/>
            <result column="name" property="name"/>
        </association>
    </resultMap>

    <select id="selectOrdersFetchPerson" resultMap="OrdersResultMap">
        select p.*,o.* from person p,orders o where o.pid=p.p_id and o.o_id=#{id} 
    </select>

</mapper>

3.sqlMapConfig.xml

  1. <?xml version=“1.0” encoding=“UTF-8” ?>  
  2. <!DOCTYPE configuration  
  3.   PUBLIC ”-//mybatis.org//DTD Config 3.0//EN”  
  4.   “http://mybatis.org/dtd/mybatis-3-config.dtd”>  
  5. <configuration>  
  6.   
  7. <typeAliases>  
  8.     <typeAlias type=“com.kerwin.mybatis.pojo.Author” alias=“Author”/>  
  9. </typeAliases>  
  10.   <environments default=“development”>  
  11.     <environment id=“development”>  
  12.       <transactionManager type=“JDBC”/>  
  13.       <dataSource type=“POOLED”>  
  14.         <property name=“driver” value=“com.mysql.jdbc.Driver”/>  
  15.         <property name=“url” value=“jdbc:mysql://localhost:3306/mybatis”/>  
  16.         <property name=“username” value=“root”/>  
  17.         <property name=“password” value=“root”/>  
  18.       </dataSource>  
  19.     </environment>  
  20.   </environments>  
  21.   <mappers>  
  22.     <mapper resource=“com/kerwin/mybatis/pojo/AuthorMapper.xml”/>  
  23.     <mapper resource=“com/kerwin/mybatis/pojo/PostMapper.xml”/>  
  24.     <mapper resource=“com/kerwin/mybatis/pojo/PersonMapper.xml”/>  
  25.     <mapper resource=“com/kerwin/mybatis/pojo/OrdersMapper.xml”/>  
  26.   </mappers>  
  27. </configuration>  
<?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>

<typeAliases>
    <typeAlias type="com.kerwin.mybatis.pojo.Author" alias="Author"/>
</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/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/kerwin/mybatis/pojo/AuthorMapper.xml"/>
    <mapper resource="com/kerwin/mybatis/pojo/PostMapper.xml"/>
    <mapper resource="com/kerwin/mybatis/pojo/PersonMapper.xml"/>
    <mapper resource="com/kerwin/mybatis/pojo/OrdersMapper.xml"/>
  </mappers>
</configuration>

四。测试类

  1. /** 
  2.  *  
  3.  */  
  4. package com.kerwin.mybatis.test;  
  5.   
  6. import java.io.InputStream;  
  7.   
  8. import org.apache.ibatis.io.Resources;  
  9. import org.apache.ibatis.session.SqlSession;  
  10. import org.apache.ibatis.session.SqlSessionFactory;  
  11. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  12. import org.junit.BeforeClass;  
  13. import org.junit.Test;  
  14.   
  15. import com.kerwin.mybatis.pojo.Orders;  
  16. import com.kerwin.mybatis.pojo.Person;  
  17.   
  18. /** 
  19.  * @author Administrator 
  20.  *  
  21.  */  
  22. public class PersonAndOrderTest {  
  23.   
  24.     private static SqlSessionFactory sessionFactory;  
  25.       
  26.     /** 
  27.      * @throws java.lang.Exception 
  28.      */  
  29.     @BeforeClass  
  30.     public static void setUpBeforeClass() throws Exception {  
  31.         SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();  
  32.         InputStream inputStream = Resources.getResourceAsStream(”sqlMapConfig.xml”);  
  33.         sessionFactory = factoryBuilder.build(inputStream);  
  34.   
  35.     }  
  36.       
  37.     //一对多,查询person(一)级联查询订单order(多)  
  38.     @Test  
  39.     public void testSelectPersonFetchOrder() throws Exception {  
  40.         SqlSession session = sessionFactory.openSession();  
  41.         Person person = session.selectOne(”com.kerwin.mybatis.pojo.Person.selectPersonFetchOrder”1);  
  42.         System.out.println(person);  
  43.         System.out.println(person.getOrderList().size());  
  44.         for(Orders orders : person.getOrderList()){  
  45.             System.out.println(orders);  
  46.         }  
  47.         session.close();  
  48.     }  
  49.       
  50.     //多对一,查询订单order(多)级联查询person(一)  
  51.     @Test  
  52.     public void testSelectOrdersFetchPerson() throws Exception{  
  53.         SqlSession session = sessionFactory.openSession();  
  54.         Orders orders = session.selectOne(”com.kerwin.mybatis.pojo.Orders.selectOrdersFetchPerson”1);  
  55.         System.out.println(orders);  
  56.         System.out.println(orders.getPerson());  
  57.         session.close();  
  58.     }  
  59.       
  60. }  
/**
 * 
 */
package com.kerwin.mybatis.test;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;
import org.junit.Test;

import com.kerwin.mybatis.pojo.Orders;
import com.kerwin.mybatis.pojo.Person;

/**
 * @author Administrator
 * 
 */
public class PersonAndOrderTest {

    private static SqlSessionFactory sessionFactory;

    /**
     * @throws java.lang.Exception
     */
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
        InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        sessionFactory = factoryBuilder.build(inputStream);

    }

    //一对多,查询person(一)级联查询订单order(多)
    @Test
    public void testSelectPersonFetchOrder() throws Exception {
        SqlSession session = sessionFactory.openSession();
        Person person = session.selectOne("com.kerwin.mybatis.pojo.Person.selectPersonFetchOrder", 1);
        System.out.println(person);
        System.out.println(person.getOrderList().size());
        for(Orders orders : person.getOrderList()){
            System.out.println(orders);
        }
        session.close();
    }

    //多对一,查询订单order(多)级联查询person(一)
    @Test
    public void testSelectOrdersFetchPerson() throws Exception{
        SqlSession session = sessionFactory.openSession();
        Orders orders = session.selectOne("com.kerwin.mybatis.pojo.Orders.selectOrdersFetchPerson", 1);
        System.out.println(orders);
        System.out.println(orders.getPerson());
        session.close();
    }

}

五、测试结果

1.一对多,查询person(一)级联查询订单order(多)


2.多对一,查询订单order(多)级联查询person(一)


注意:两张表中的主键id字段名要唯一,例如不能都写id,不然的话,在一对多查询的时候就会出现:级联出来的订单项只有一条记录。我之前就是将两张表的主键id字段名都写为id,导致测试结果级联出来的多一直只有一条数据,具体如下:



                </div>

猜你喜欢

转载自blog.csdn.net/weixin_39805338/article/details/80879856