zoukankan      html  css  js  c++  java
  • 关联查询中的一对一查询。通过第二种方式也就是手动映射的方式查询所有订单信息,关联查询下单用户信息。(这是以后我们进行一对一开发中的常用方法)

    使用resultMap,定义专门的resultMap用于映射一对一查询结果。

    1.一对一映射的自动映射方式可以参考我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10156805.html

    2.手动映射的情况时,我们不需要将所有的属性都整合到UserOrders中了,我们只需要将用户信息表的User类对象定义在保存orders表属性信息的类Orders中。User中的内容为:

    package com.huida.po;
    
    import java.util.Date;
    
    public class User {
    
        private int id;
        private String username;// 用户姓名
        private String sex;// 性别
        private Date birthday;// 生日
        private String address;// 地址
        public void setId(int id) {
            this.id = id;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        public int getId() {
            return id;
        }
        public String getUsername() {
            return username;
        }
        public String getSex() {
            return sex;
        }
        public Date getBirthday() {
            return birthday;
        }
        public String getAddress() {
            return address;
        }
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + "]";
        }
        
        
        
    }

      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;
        private User user;
        
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.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;
        }
        
    }

    3.在UserMapper接口中定义方法:

      public List<Orders> findOrdersAndUser2();

    4.在UserMapper.xml进行配置:

    <resultMap type="com.huida.po.Orders" id="orderAndUserResultMap">
            <!-- id标签指定主键字段的对应关系 -->
            <id column="id" property="id"></id>
            <!-- result标签指定非主键字段的对应关系 -->
            <result column="user_id" property="userId"/>
            <result column="number" property="number"/>
            <result column="createtime" property="createtime"/>
            <result column="note" property="note"/>
            <!-- association指定单个对象的对应关系
                property:指定将数据放入Orders中的user属性中
                javaType:user属性到的类型
             -->
            <association property="user" javaType="com.huida.po.User">
                <id column="uid" property="id"/>
                <result column="username" property="username"/>
                <result column="sex" property="sex"/>
                <result column="birthday" property="birthday"/>
                <result column="address" property="address"/>
            </association>
            
        </resultMap>
        <select id="findOrdersAndUser2" resultMap="orderAndUserResultMap">
            <!-- select后面的属性名必须和resultMap中定义的属性名相同 -->
            select a.*,b.id uid,username,birthday,sex,address
            from orders a,user b 
            where a.user_id=b.id
        </select>

      这里进行手动配置以建立po类与配置文件的关联关系。

      resultMap标签中的type属性指定返回值的类型,id用来进行唯一标识。

      association:表示进行关联查询单条记录

        property:表示关联查询的结果存储在cn.huida.po.Ordersuser属性中

        javaType:表示关联查询的结果类型

      id标签指定主键字段的对应关系

        <id column="user_id" property="userId"/>:查询结果的user_id列对应关联对象的id属性,这里是<id />表示user_id是关联查询对象的唯一标识。

      result标签指定非主键字段的对应关系

        <result property="username" column="username"/>:查询结果的username列对应关联对象的username属性。

    5.测试代码为:

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

     6.小结:

      使用association完成关联查询,将关联查询信息映射到po对象中。

  • 相关阅读:
    使用beautifulsoup4解析内容
    爬虫的概述以及使用(request发送请求)
    爬虫的概述以及使用(urllib发送请求)
    NoteBook的安装和使用
    云端服务器
    SQLServer数据库访问链接
    python爬虫调度器
    Python的应用领域
    Python小记2
    Python小记1
  • 原文地址:https://www.cnblogs.com/wyhluckdog/p/10157049.html
Copyright © 2011-2022 走看看