• mybatis 一对多


    person

    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;
        }

    }
    order

    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
        }

    }
    PersonMapper.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.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>

    OrdersMapper.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.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>

    测试类:

    /**
     *
     */
    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,导致测试结果级联出来的多一直只有一条数据,具体如下:

  • 相关阅读:
    吸取前人教训,每个程序员都曾犯过的经典错误,你可千万要避免
    程序员帮助妹妹攻破C语言,整理超详细规划,快来看!
    2020年总结:程序员爱用开发工具 Top 100
    程序员为了拿到N+1辞退金,使计让公司辞退自己,网友评论画风突变!
    回顾2020的爷青结:有哪些记忆里的应用正在消逝!
    菜鸟看过来!新的一年,这几点雷区别再踩了
    年龄从不是学习的界限,84岁高龄奶奶自学编程,受苹果公司CEO邀请参加全球开发者大会!
    TIOBE 2月编程语言排行榜出炉:C语言冠军宝座稳定,前十名有什么变化?
    用TensorRT和Numpy编写的Yolov5推理。在【Nvidia Jetson】设备上运行,无需依赖任何pytorch / torchvision
    Example app/api for exposing yolov5 model via flask
  • 原文地址:https://www.cnblogs.com/austinspark-jessylu/p/6591209.html
Copyright © 2020-2023  润新知