【筆記】Mybatis高階查詢(六)--鑑別器discrimiator的使用
阿新 • • 發佈:2018-11-01
<discrimiator>
鑑別器標籤用來處理不同資料型別執行不同操作的。與java的switch語句相似。有以下屬性:
<discrimiator>
標籤可以有1個或多個<case>
標籤,<case>
有以下三個屬性:
value:該值為
<discrimiator>
指定column用來匹配的值。
resultMap:當column的值與value的值匹配時,可以配置使用resultMap對映,resultMap優先順序高於resultType。resultType:當column的值與value的值匹配時,可以配置使用resultType對映。
<case>
標籤下面可以包含標籤與<resultMap>
一樣,用法也一樣。
<discrimiator>
使用例子:
<!-- 使用resultMap的<discrimiator>標籤進行選擇查詢,相當於java的switch --> <resultMap id="rolePrisMapChoose" type="ex.mybatis.rbac.model.SysRole"> <!-- discrimiator鑑別器 --> <discriminator column="enabled" javaType="int"> <case value="1" resultMap="rolePrisMapSel" /> <case value="0" resultMap="roleMap" /> </discriminator> </resultMap> <!-- 使用resultMap的鑑別器<discrimiator>標籤查詢 --> <select id="selectRolesByIdChoose" resultMap="rolePrisMapChoose"> 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>
@Test
public void testSelectRolesByIdChoose() {
// 獲取SqlSession
SqlSession sqlSession = openSession();
try {
// 獲取SysRoleMapper介面
SysRoleMapper roleMapper = sqlSession.getMapper(SysRoleMapper.class);
// 呼叫selectRolesByIdChoose方法
List<SysRole> roles = roleMapper.selectRolesByIdChoose(1L);
System.out.println("角色數:" + roles.size());
for (SysRole role : roles) {
System.out.println("角色[" + role.getRoleName() + "]呼叫role.getPrivileges()");
List<SysPrivilege> privileges = role.getPrivileges();
if (privileges != null) {
for (SysPrivilege privilege : privileges) {
System.out.println("--許可權:" + privilege);
}
}
System.out.println();
}
System.out.println();
} finally {
sqlSession.close();
}
}
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - ==> Preparing: 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 = ?
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - ==> Parameters: 1(Long)
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - <== Columns: id, role_name, enabled, create_by, create_time
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - <== Row: 1, 管理員, 1, 1, 2018-10-01 18:27:36.0
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - <== Row: 2, 普通使用者, 0, 1, 2018-10-01 18:27:37.0
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - <== Total: 2
角色數:2
角色[管理員]呼叫role.getPrivileges()
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - ==> Preparing: select id, privilege_name, privilege_url from sys_privilege p inner join sys_role_privilege rp on rp.privilege_id = p.id where rp.role_id = ?
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - ==> Parameters: 1(Long)
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Columns: id, privilege_name, privilege_url
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Row: 1, 使用者管理, /users
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Row: 2, 角色管理, /roles
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Row: 3, 系統日誌, /logs
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Total: 3
--許可權:SysPrivilege [id=1, privilegeName=使用者管理, privilegeUrl=/users]
--許可權:SysPrivilege [id=2, privilegeName=角色管理, privilegeUrl=/roles]
--許可權:SysPrivilege [id=3, privilegeName=系統日誌, privilegeUrl=/logs]
角色[普通使用者]呼叫role.getPrivileges()
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - ==> Preparing: 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 = ?
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - ==> Parameters: 1(Long)
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - <== Columns: id, role_name, enabled, create_by, create_time
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - <== Row: 1, 管理員, 1, 1, 2018-10-01 18:27:36.0
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - <== Row: 2, 普通使用者, 1, 1, 2018-10-01 18:27:37.0
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - <== Total: 2
角色數:2
角色[管理員]呼叫role.getPrivileges()
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - ==> Preparing: select id, privilege_name, privilege_url from sys_privilege p inner join sys_role_privilege rp on rp.privilege_id = p.id where rp.role_id = ?
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - ==> Parameters: 1(Long)
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Columns: id, privilege_name, privilege_url
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Row: 1, 使用者管理, /users
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Row: 2, 角色管理, /roles
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Row: 3, 系統日誌, /logs
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Total: 3
--許可權:SysPrivilege [id=1, privilegeName=使用者管理, privilegeUrl=/users]
--許可權:SysPrivilege [id=2, privilegeName=角色管理, privilegeUrl=/roles]
--許可權:SysPrivilege [id=3, privilegeName=系統日誌, privilegeUrl=/logs]
角色[普通使用者]呼叫role.getPrivileges()
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - ==> Preparing: select id, privilege_name, privilege_url from sys_privilege p inner join sys_role_privilege rp on rp.privilege_id = p.id where rp.role_id = ?
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - ==> Parameters: 2(Long)
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Columns: id, privilege_name, privilege_url
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Row: 4, 人員維護, /persons
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Row: 5, 單位維護, /companies
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Total: 2
--許可權:SysPrivilege [id=4, privilegeName=人員維護, privilegeUrl=/persons]
--許可權:SysPrivilege [id=5, privilegeName=單位維護, privilegeUrl=/companies]
<case>
屬性與resultType使用
<!-- 使用resultMap的<discrimiator>標籤進行選擇查詢,相當於java的switch -->
<resultMap id="rolePrisMapChoose" type="ex.mybatis.rbac.model.SysRole">
<!-- discrimiator鑑別器 -->
<!--
<discriminator column="enabled" javaType="int">
<case value="1" resultMap="rolePrisMapSel" />
<case value="0" resultMap="roleMap" />
</discriminator>
-->
<discriminator column="enabled" javaType="int">
<case value="1" resultMap="rolePrisMapSel" />
<case value="0" resultType="ex.mybatis.rbac.model.SysRole">
<id column="id" property="id" />
<result column="role_name" property="roleName" />
</case>
</discriminator>
</resultMap>
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - ==> Preparing: 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 = ?
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - ==> Parameters: 1(Long)
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - <== Columns: id, role_name, enabled, create_by, create_time
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - <== Row: 1, 管理員, 1, 1, 2018-10-01 18:27:36.0
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - <== Row: 2, 普通使用者, 0, 1, 2018-10-01 18:27:37.0
[ex.mybatis.rbac.mapper.SysRoleMapper.selectRolesByIdChoose] - <== Total: 2
角色數:2
角色[管理員]呼叫role.getPrivileges()
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - ==> Preparing: select id, privilege_name, privilege_url from sys_privilege p inner join sys_role_privilege rp on rp.privilege_id = p.id where rp.role_id = ?
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - ==> Parameters: 1(Long)
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Columns: id, privilege_name, privilege_url
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Row: 1, 使用者管理, /users
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Row: 2, 角色管理, /roles
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Row: 3, 系統日誌, /logs
[ex.mybatis.rbac.mapper.SysPrivilegeMapper.selectPriByRoleId] - <== Total: 3
SysRole [id=1, roleName=管理員, enabled=1, createBy=1, createTime=Mon Oct 01 18:27:36 CST 2018]
--許可權:SysPrivilege [id=1, privilegeName=使用者管理, privilegeUrl=/users]
--許可權:SysPrivilege [id=2, privilegeName=角色管理, privilegeUrl=/roles]
--許可權:SysPrivilege [id=3, privilegeName=系統日誌, privilegeUrl=/logs]
角色[普通使用者]呼叫role.getPrivileges()
SysRole [id=2, roleName=普通使用者, enabled=0, createBy=1, createTime=Mon Oct 01 18:27:37 CST 2018]