多表查询(一对一)2019-09-25

model层中Order类

  • 新增user属性,增加get和set方法
//订单:用户 === 1:1
    private User user;
  • 增加toString2(),为了测试方法中输出看结果
public String toString2() {
        return "Order [id=" + id + ", userId=" + userId + ", number=" + number + ", createtime=" + createtime
                + ", note=" + note + ", user=" + user.toString2() + "]";
    }

OrderMapper.xml文件

  • 新建resultMap映射
<resultMap type="order" id="orderUserMap">
            <id property="id" column="id"/>
            <result property="userId" column="user_id"/>
            <result property="number" column="number"/>
            <result property="createtime" column="createtime"/>
            <result property="note" column="note"/>
        <!-- 一对一的关系使用  association -->
        <!-- 属性的类型:javaType -->
        <association property="user" javaType="user">
            <id property="id" column="uid"/>
            <result property="username" column="username"/> 
            <result property="birthday" column="birthday"/> 
            <result property="sex" column="sex"/>   
            <result property="address" column="address"/>               
        </association>  
    </resultMap>
  • 新建查询selOrderAndUser
<!-- 查询订单以及订单所对应的用户信息 -->
    <select id="selOrderAndUser" parameterType="int" resultMap="orderUserMap">
    select o.*,
        u.id uid,
        u.username,
        u.birthday,
        u.sex,
        u.address 
        from `order` o,`user` u
        where o.user_id = u.id
        and o.id = #{oid}
    </select>   

OrderMapper抽象类

  • 新建selOrderAndUser抽象方法
  • 注意:方法名和xml文件中的id相同
  • 返回值类型为Order ,需要传入的参数int oid
//根据订单ID查询订单以及订单对应的用户对象
    public Order selOrderAndUser(int oid) throws SQLException;

OrderTest.java

  • 新建testselOrderAndUser的测试方法
public void testselOrderAndUser() throws SQLException {
        SqlSessionFactory factory = SessionFactoryUtil.getSqlSessionFactory();
        SqlSession sqlSession = factory.openSession();
        //生成动态代理类的方法--根据接口创建出接口对应的动态代理类
        //利用多态技术进行接收--代理类的类名不知道,通过接口类型来指向这个动态代理类(多态)
        OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);           
        Order o = mapper.selOrderAndUser(17);
        System.out.println("一对一" + o.toString2());
        sqlSession.close();
}

逻辑图

多表连接查询(一对一).png

一对一(表连接查询).png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,596评论 0 4
  • model层中User类 新增List<Order>属性,增加get和set方法 增加toString2(),为了...
    嘉l木阅读 313评论 0 0
  • 1.abstract class 和interface 有什么区别? 抽象类可以有构造方法 接口不行 抽象类可以有...
    sunnysans阅读 879评论 0 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,136评论 1 32
  • 一. Java基础部分.................................................
    wy_sure阅读 3,834评论 0 11