zoukankan      html  css  js  c++  java
  • Mybatis 关联查询

     一对一

     一对一关联查询分为两种方式:一种为嵌套结果查询,一种为嵌套条件查询(推荐使用)

     利用User实体类和Position实体类为例:

     User实体类

    public class User implements Serializable{
    private Integer id; private String userName; private String realName; private Byte sex; private String mobile; private String email; private String note; private TPosition position; private TPosition position2; private List<TJobHistory> jobs ; private List<HealthReport> healthReports; private List<TRole> roles; 省略get set方法 }

     Position实体类

    public class Position {
    
        private Integer id;
    
    
        private String postName;
    
    
        private String note;
       
        省略get set 方法
      
    }

    XML配置(嵌套结果)

    <!-- BaseResultMap -->
    <resultMap id="BaseResultMap" type="TUser">
        <id column="id" property="id" />
        <result column="user_name" property="userName" />
        <result column="real_name" property="realName" />
        <result column="sex" property="sex" />
        <result column="mobile" property="mobile" />
        <result column="email" property="email" />
        <result column="note" property="note" />
    </resultMap>
    <!-- 拓展resultMap 可以进行继承操作 -->
    <resultMap id="userAndPosition1" extends="BaseResultMap" type="TUser">
        <association property="position" javaType="TPosition" columnPrefix="post_">
            <id column="id" property="id"/>
            <result column="name" property="postName"/>
            <result column="note" property="note"/>
        </association>
    </resultMap>
    <!-- 查询语句 SQL连接查询  -->
    <select id="selectUserPosition1" resultMap="userAndPosition1">
        select
            a.id, 
            user_name,
            real_name,
            sex,
            mobile,
            email,
            a.note,
            b.id  post_id,
            b.post_name,
            b.note post_note
        from t_user a,
            t_position b
        where a.position_id = b.id
    </select>

    XML配置(嵌套条件)

    <!-- BaseResultMap -->
    <resultMap id="BaseResultMap" type="TUser">
        <id column="id" property="id" />
        <result column="user_name" property="userName" />
        <result column="real_name" property="realName" />
        <result column="sex" property="sex" />
        <result column="mobile" property="mobile" />
        <result column="email" property="email" />
        <result column="note" property="note" />
    </resultMap>
    <!-- 拓展resultMap 可以进行继承操作 可以引用其他mapper文件方法-->
    <resultMap id="userAndPosition2" extends="BaseResultMap" type="TUser">
        <association property="position" fetchType="lazy"  column="position_id" select="com.enjoylearning.mybatis.mapper.PositionMapper.selectByPrimaryKey" />
        <association property="position2" fetchType="lazy"  column="post_id" select="com.enjoylearning.mybatis.mapper.PositionMapper.selectByPrimaryKey" />
    </resultMap>
    <!-- 查询语句 SQL连接查询  -->
    <select id="selectUserPosition2" resultMap="userAndPosition2">
        select
        a.id,
        a.user_name,
        a.real_name,
        a.sex,
        a.mobile,
        a.position_id,
        a.post_id
        from t_user a
    </select>

    无论是嵌套结果还是嵌套查询,只要是一对一的关联都可以用如上方法得到数据。

    细心的小伙伴可以发现,在嵌套条件时,我加入了两个association 分别对应User表中的两个Position实体,这个用处就在于,当User表关联两个Dictionary字典表时,可以进行配置多个也是可以的。

  • 相关阅读:
    ES6 -- (1) 简介、let、块级作用域、const、顶层对象的属性、globalThis对象
    TS -- (5)声明合并、代码检查
    TS -- (4)类、类与接口、泛型
    TS -- (3)声明文件、内置对象、类型别名、字符串字面量类型、元组、枚举
    TS -- (2)接口、数组的类型、函数的类型
    TS -- (1)环境,快速入门,基础类型,类型断言、变量声明、解构、展开
    css的三定位方式的区别
    Array循环
    scroll操作
    【Nodejs】记一次图像识别的冒险
  • 原文地址:https://www.cnblogs.com/monco/p/10529408.html
Copyright © 2011-2022 走看看