Fork me on GitHub

鉴别器映射

  有时一个单独的数据库查询会返回很多不同数据类型(希望有些关联〉的结果集。discriminator 鉴别器标签就是用来处理这种情况的,鉴别器非常容易理解,因为它很像java语言中的 switch语句。
1. roleMapper.xml中:
<resultMap id="rolePrivilegeListMapChoose"
               type="com.example.simple.model.SysRole">
        <discriminator column="enabled" javaType="int">
            <case value="1" resultMap="rolePrivilegeListMapSelect"/>
            <case value="0" resultMap="roleMap"/>
        </discriminator>
    </resultMap>

    <select id="selectRoleByUserIdChoose" resultMap="rolePrivilegeListMapChoose">
        select
        r.id ,
        r.role_name ,
        r.enabled,
        r.create_by,
        r.create_time
        from sys_role r
        inner join sys_user_role ur on ur.role_id = r.id
        where ur.user_id = #{userId}
    </select>


    <update id="updateById">
        update sys_role
        set enabled = #{enabled}
        where id = #{id}
    </update>

2. 增加接口:

/*
     * 根据主键更新
     * */
    int updateById(SysRole sysRole);

    /*
     * 根据用户ID获取用户信息
     * */
    List<SysRole> selectRoleByUserIdChoose(Long userId);

3. 测试如下:

 @Test
    public void testSelectRoleByUserIdChoose(){
        SqlSession sqlSession = getSqlSession();
        try{
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
            SysRole role = roleMapper.selectById(2L);
            role.setEnabled(0);
            roleMapper.updateById(role);
            //获取用户为1的角色
            List<SysRole> roleList = roleMapper.selectRoleByUserIdChoose(1L);
            for(SysRole role1 : roleList){
                System.out.println("角色名:"+ role1.getRoleName());
                if(role1.getId().equals(1L)){
                    Assert.assertNotNull(role1.getPrivilegeList());
                }else if(role1.getId().equals(2l)){
                    Assert.assertNull(role1.getPrivilegeList());
                    break;
                }
                for(SysPrivilege sysPrivilege : role1.getPrivilegeList()){
                    System.out.println("权限名:" + sysPrivilege.getPrivilegeName());
                }
            }

        }finally {
            sqlSession.close();
        }

    }

测试结果如下:

 

 至此,告一段落。

posted @ 2020-12-22 20:22  叶语婷  阅读(82)  评论(0编辑  收藏  举报