• 关联查询中的一对一查询。通过第一种方式也就是自动映射的方式查询所有订单信息,关联查询下单用户信息。(由于需要创建中间类,这种方法在实际开发中已经不再使用)


    商品订单数据模型:

    一对一查询:查询所有订单信息,关联查询下单用户信息。

    注意:因为一个订单信息只会是一个人去下的订单,所以从查询订单出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单。

    1.在UserMapper接口中创建方法:

      public List<UserOrders> findOrderAndUser();

    2.定义中间类UserOrders,因为查询的结果中既包含User中的信息也包括Orders中的信息,所以我们创建一个UserOrders类来包含这两个表中的所有属性。

      由于两个表中的属性太多,所以我们定义两个类,定义类Orders来存储Orders中的属性信息:

    package com.huida.po;
    
    import java.util.Date;
    
    
    public class Orders {
    
        private Integer id;
        private Integer userId;
        private String number;
        private Date createtime;
        private String note;
        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;
        }
        
    }

      定义UserOrders类来继承Orders类,同时在这个类中定义User表中的属性:

    package com.huida.po;
    
    import java.util.Date;
    
    public class UserOrders extends Orders{
    
        private int uid;
        private String username;
        private String sex;
        private Date birthday;
        private String address;
        public int getUid() {
            return uid;
        }
        public void setUid(int uid) {
            this.uid = uid;
        }
        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;
        }
        
    }

    3.在UserMapper.xml中进行配置:

    <select id="findOrderAndUser" resultType="com.huida.po.UserOrders">
            <!-- select后面的属性名必须和UserOrders中定义的属性名相同 -->
            select a.*,b.id uid,username,birthday,sex,address
            from orders a,user b 
            where a.user_id=b.id
        </select>

      这里应该注意的是:

      1.返回类型应该为UserOrders类型

      2.select后面的属性应该与UserOrders中定义的属性名相同,否则查找不到。

      3.b.id uid的意思是:b.id的别名为uid。

    4.测试代码:

    @Test
        public void testfindOrdersAndUsers(){
            //创建SqlSession
            SqlSession openSession=factory.openSession();
            //通过会话的getMapper方法来实例化接口(实现类的对象)
            UserMapper userMapper=openSession.getMapper(UserMapper.class);//参数放接口的字节码文件
            List<UserOrders> list=userMapper.findOrderAndUser();
            for(UserOrders userOrders:list){
                System.out.println(userOrders.getUsername()+"...."+userOrders.getNumber());
            }
        }

     5.小结:

      定义专门的po类作为输出类型,其中定义了sql查询结果集所有的字段。此方法较为简单,企业中使用普遍。

      

  • 相关阅读:
    ubuntu 16.0.5 修改网卡为固定IP
    Ubuntu PostgreSQL安装和配置
    NPOI 1.2.1版本替换为2.4.0版本实体类变更
    C# 之 Math取整
    解决github 下载过慢的问题
    优伦自动语言话务员设置
    python3学习笔记 列表
    【postgresql】role "root" does not exist 解决办法
    Eclipse使用的小技巧
    Servlet
  • 原文地址:https://www.cnblogs.com/wyhluckdog/p/10156805.html
Copyright © 2020-2023  润新知