鉴别器映射
有时一个单独的数据库查询会返回很多不同数据类型(希望有些关联〉的结果集。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(); } }
测试结果如下:
至此,告一段落。