Mybatis—鉴别映射器

文章目录


学习记录mybatis鉴别映射器

discriminator可以根据不同结果信息,执行不同的查询操作

Mybatis的查询

数据表:用户表user 角色表role 中间表user_role

描述:查询用户及其对应的角色信息,如果用户信息的enable为1,则查询出相应的角色信息;如果用户信息enable为0,则不需要查询角色信息。
用户表
角色表
用户-角色中间表

  1. xml:
<mapper namespace="com.liwang.mybatis02.mapper.UserMapper">  

    <!--基础User信息-->
    <resultMap id="BaseUserMap" type="com.liwang.mybatis02.model.User">
        <id property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="email" column="email"/>
        <result property="enable" column="enable"/>
    </resultMap>

    <!--User联表Role信息-->
    <resultMap id="UserMapWithRole" type="com.liwang.mybatis02.model.User" extends="BaseUserMap">
        <collection property="roles" ofType="com.liwang.mybatis02.model.Role" columnPrefix="role_"
                    resultMap="com.liwang.mybatis02.mapper.RoleMapper.BaseRoleMap">
        </collection>
    </resultMap>

    <!--使用鉴别器discriminator 判断是否需要包含Role信息-->
    <resultMap id="UserMapWithRole2" type="com.liwang.mybatis02.model.User">
        <discriminator javaType="int" column="enable">
            <case value="1" resultMap="UserMapWithRole"></case>
            <case value="0" resultMap="BaseUserMap"></case>
        </discriminator>
    </resultMap>

    <!--查询语句-->
    <select id="getUserWithRole2" resultMap="UserMapWithRole2">
        select u.*,r.id as role_id,r.name as role_name
        from user as u
        left join user_role ur on u.id = ur.uid
        left join role r on ur.rid = r.id;
    </select>

</mapper>
  1. mapper:
public interface UserMapper {
    // 获取用户信息及角色信息
    List<User> getUserWithRole2();
}
  1. test
@Test
public void getUserWithRole() {
    List<User> users = userMapper.getUserWithRole2();
        for (User user : users) {
            System.out.println("user = " + user);
        }
}
  1. 结果

结果
关于鉴别器的学习就到这里,学习后继续补充。

可以看看我的学习——基于Hexo的个人博客:
网站:https://liwangc.gitee.io/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值