• 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字典表时,可以进行配置多个也是可以的。

  • 相关阅读:
    85. Maximal Rectangle
    120. Triangle
    72. Edit Distance
    39. Combination Sum
    44. Wildcard Matching
    138. Copy List with Random Pointer
    91. Decode Ways
    142. Linked List Cycle II
    异或的性质及应用
    64. Minimum Path Sum
  • 原文地址:https://www.cnblogs.com/monco/p/10529408.html
Copyright © 2020-2023  润新知