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/


版权声明:本文为qq_32015565原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。