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

 

转载于:https://www.cnblogs.com/monco/p/10529408.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值