springboot+mybatis 表复杂关系查询

1.准备数据
        sql.sql

    2.创建java类.
        [Order.java]
        public class Order {
            private Integer id ;
            private String orderNo ;
            //建立关联关系
            private User user ;

            //get/set
        }

        [Item.java]
        public class Item {
            private Integer id;
            private String itemName;
            //订单项和订单之间的关联关系
            private Order order;
            //get/set
        }
    
    3.创建Order映射文件
        [resource/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="orders">
            <insert id="insert">
              insert into orders(orderno,uid) values(#{orderNo},#{user.id})
            </insert>

            <!-- findById -->
            <select id="selectOne" parameterType="int" resultMap="RM_Order">
              select
                o.id oid ,
                o.orderno oorderno ,
                o.uid uid ,
                u.name uname ,
                u.age uage
              from orders o
                left outer join users u on o.uid = u.id where o.id = #{id}
            </select>
            <!-- findAll -->
            <select id="selectAll" resultMap="RM_Order">
              select
                o.id oid ,
                o.orderno oorderno ,
                o.uid uid ,
                u.name uname ,
                u.age uage
              from orders o
                left outer join users u on o.uid = u.id
            </select>
            <!-- 自定义结果映射 -->
            <resultMap id="RM_Order" type="com.it18zhang.mybatisdemo.domain.Order">
                <id property="id" column="oid"/>
                <result property="orderNo" column="oorderno"/>
                <association property="user" javaType="com.it18zhang.mybatisdemo.domain.User">
                    <id property="id" column="uid" />
                    <result property="name" column="uname" />
                    <result property="age" column="uage" />
                </association>
            </resultMap>
        </mapper>
    
    4.修改配置文件,添加映射。
        [resource/mybatis-config.xml]
        <!-- 引入映射文件 -->
        <mappers>
            <mapper resource="*Mapper.xml"/>
        </mappers>
    
    5.测试类
        public class TestOrder {

            /**
             * insert
             */
            @Test
            public void insert() throws Exception {
                String resource = "mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
                SqlSession s = sf.openSession();

                User u = new User();
                u.setId(2);

                Order o = new Order();
                o.setOrderNo("No005");
                o.setUser(u);

                s.insert("orders.insert",o);
                s.commit();
                s.close();
            }

            @Test
            public void selectOne() throws Exception {
                String resource = "mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
                SqlSession s = sf.openSession();
                Order order = s.selectOne("orders.selectOne",1);
                System.out.println(order.getOrderNo());
                s.commit();
                s.close();
            }

            @Test
            public void selectAll() throws Exception {
                String resource = "mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
                SqlSession s = sf.openSession();
                List<Order> list = s.selectList("orders.selectAll");
                for(Order o : list){
                    System.out.println(o.getOrderNo() + " : " + o.getUser().getName());
                }
                s.commit();
                s.close();
            }
        }

配置一对多
------------------
    1.在User中增加orders集合。
        public class User {
            ...
            private List<Order> orders ;
            //get/set
        }

    2.改造UserMapper.xml


组合多对一和一对多关联关系到一个实体(Order)中
---------------------------------------------
    1.关系
        Order(*) -> (1)User
        Order(1) -> (*)Item

    2.Order.java
        class Order{
            ...
            List<Item> items ;
            //get/set    
        }
    2'.修改配置文件增加别名
        [resources/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>
            <typeAliases>
                <typeAlias type="com.it18zhang.mybatisdemo.domain.User" alias="_User"/>
                <typeAlias type="com.it18zhang.mybatisdemo.domain.Order" alias="_Order"/>
                <typeAlias type="com.it18zhang.mybatisdemo.domain.Item" alias="_Item"/>
            </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="UserMapper.xml"/>
                <mapper resource="OrderMapper.xml"/>
            </mappers>
        </configuration>
        
    3.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="orders">
            <insert id="insert">
              insert into orders(orderno,uid) values(#{orderNo},#{user.id})
            </insert>

            <!-- findById -->
            <select id="selectOne" parameterType="int" resultMap="RM_Order">
              select
                o.id      oid ,
                o.orderno oorderno ,
                o.uid     uid ,
                u.name    uname ,
                u.age     uage ,
                i.id      iid,
                i.itemname iitemname
              from orders o
                left outer join users u on o.uid = u.id
                left outer join items i on o.id = i.oid
              where o.id = #{id}
            </select>
            <!-- findAll -->
            <select id="selectAll" resultMap="RM_Order">
              select
                o.id      oid ,
                o.orderno oorderno ,
                o.uid     uid ,
                u.name    uname ,
                u.age     uage ,
                i.id      iid,
                i.itemname iitemname
              from orders o
                left outer join users u on o.uid = u.id
                left outer join items i on o.id = i.oid
            </select>
            <!-- 自定义结果映射 -->
            <resultMap id="RM_Order" type="com.it18zhang.mybatisdemo.domain.Order">
                <id property="id" column="oid"/>
                <result property="orderNo" column="oorderno"/>
                <association property="user" javaType="com.it18zhang.mybatisdemo.domain.User">
                    <id property="id" column="uid" />
                    <result property="name" column="uname" />
                    <result property="age" column="uage" />
                </association>
                <collection property="items" ofType="_Item">
                    <id property="id" column="iid" />
                    <result property="itemName" column="iitemname" />
                </collection>
            </resultMap>
        </mapper>

    4.测试
        @Test
        public void selectOne() throws Exception {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession s = sf.openSession();
            Order order = s.selectOne("orders.selectOne",1);
            System.out.println(order.getOrderNo() + order.getUser().getName());
            for(Item i : order.getItems()){
                System.out.println(i.getId() + ":" + i.getItemName());
            }
            s.commit();
            s.close();
        }
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值