zoukankan      html  css  js  c++  java
  • Mybatis框架六:关联查询

    这里搞一个测试场景:

    用户和订单,一位用户可以有多个订单,而每个订单只属于一位用户

    以用户为中心,相对于订单:一对多

    以订单为中心,当对于用户:一对一

    两张表结构:

    订单表:

    用户表:

    对应的POJO类:

    User:

    package pojo;
    
    import java.io.Serializable;
    import java.util.Date;
    import java.util.List;
    
    public class User implements Serializable {
        private static final long serialVersionUID = 1L;
        private Integer id;
        private String username;
        private String sex;
        private Date birthday;
        private String address;
        
        //附加对象List
        private List<Orders> ordersList;
    
    
        public List<Orders> getOrdersList() {
            return ordersList;
        }
        public void setOrdersList(List<Orders> ordersList) {
            this.ordersList = ordersList;
        }
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public Date getBirthday() {
            return birthday;
        }
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", sex=" + sex
                    + ", birthday=" + birthday + ", address=" + address + "]";
        }
    
    }
    View Code

    Orders:

    package pojo;
    
    import java.io.Serializable;
    import java.util.Date;
    
    public class Orders implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
    
        private Integer id;
    
        private Integer userId;
    
        private String number;
    
        private Date createtime;
    
        private String note;
        
        //附加对象  用户对象
        private User user;
    
        
        @Override
        public String toString() {
            return "Order [id=" + id + ", userId=" + userId + ", number=" + number + ", createtime=" + createtime
                    + ", note=" + note + ", user=" + user + "]";
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public Integer getUserId() {
            return userId;
        }
    
        public void setUserId(Integer userId) {
            this.userId = userId;
        }
    
        public String getNumber() {
            return number;
        }
    
        public void setNumber(String number) {
            this.number = number;
        }
    
        public Date getCreatetime() {
            return createtime;
        }
    
        public void setCreatetime(Date createtime) {
            this.createtime = createtime;
        }
    
        public String getNote() {
            return note;
        }
    
        public void setNote(String note) {
            this.note = note;
        }
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
        
        
    }
    View Code

    OrderMapper:

    package mapper;
    
    import java.util.List;
    
    import pojo.Orders;
    import pojo.User;
    
    public interface OrderMapper {
    
        //以订单为中心一对一关联查询
        public List<Orders> selectOrders();
        
        //以订单为中心一对多关联查询
        public List<User> selectUserList();
        
    }

    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="mapper.OrderMapper">
        <!-- 一对一 -->
        <resultMap type="pojo.Orders" id="order">
            <result column="id" property="id" />
            <result column="user_id" property="userId" />
            <result column="number" property="number" />
            <association property="user" javaType="pojo.User">
                <id column="user_id" property="id" />
                <result column="username" property="username" />
            </association>
        </resultMap>
        <select id="selectOrders" resultMap="order">
            SELECT
            o.id,
            o.user_id,
            o.number,
            o.createtime,
            u.username
            FROM orders o
            left join user u
            on o.user_id = u.id
        </select>
    
        <!--一对多 -->
        <resultMap type="pojo.User" id="user">
            <id column="user_id" property="id" />
            <result column="username" property="username" />
            <collection property="ordersList" ofType="pojo.Orders">
                <id column="id" property="id" />
                <result column="number" property="number" />
            </collection>
        </resultMap>
        <select id="selectUserList" resultMap="user">
            SELECT
            o.id,
            o.user_id,
            o.number,
            o.createtime,
            u.username
            FROM user u
            left join orders o
            on o.user_id = u.id
        </select>
    
    </mapper>

    测试两个方法:

        @Test
        public void testOrderList() throws Exception {
            //加载核心配置文件
            String resource = "sqlMapConfig.xml";
            InputStream in = Resources.getResourceAsStream(resource);
            //创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
            //创建SqlSession
            SqlSession sqlSession = sqlSessionFactory.openSession();
            
            //SqlSEssion帮我生成一个实现类  (给接口)
            OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
            List<Orders> selectOrdersList = orderMapper.selectOrders();
            
            for (Orders orders : selectOrdersList) {
                System.out.println(orders);
            }
        }
        @Test
        public void testUserList() throws Exception {
            //加载核心配置文件
            String resource = "sqlMapConfig.xml";
            InputStream in = Resources.getResourceAsStream(resource);
            //创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
            //创建SqlSession
            SqlSession sqlSession = sqlSessionFactory.openSession();
            
            //SqlSEssion帮我生成一个实现类  (给接口)
            OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
            List<User> users = orderMapper.selectUserList();
            for (User user : users) {
                System.out.println(user);
            }
            
        }
  • 相关阅读:
    问题
    cas restful接口实现SSO
    变量,数据类型
    注释
    下载,配置环境变量,第一个demo
    数据挖掘概念与技术(韩家伟)阅读笔记1
    pattern与matcherr
    Array.sort排序
    linux下C语言中的flock函数用法 【转】
    我为什么要进国企----HP大中华区总裁孙振耀退休感言
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/9410497.html
Copyright © 2011-2022 走看看