首先說一下業務場景
用戶表:uid,name等等
user_role表
role表
role_module表
module表
這就是通用的用戶——角色——權限系統
現在前端在頁面上上要展示如下
不說了上代碼,
/**
*query對象主要是分頁的,分頁採用的是MybatisPlus的分頁方法,版本2.x
*
/
public ApiResult pageList(String token,Query query) throws Exception{
Page<User> page=new Page(query.getPageIndex(), query.getPageSize());
page.setRecords(userMapper.select(page,query));
return ResultUtils.buildSucessObject(page);
}
後臺的sql
select g.*,h.* from (select e.*,f.module_id from
(select c.*,d.name as role_name,d.role_type from
(select a.uid,a.parent_uid,a.user_name,a.user_status,a.user_tel,a.user_email,a.deleted,a.nick_name,a.shop_id,a.user_headimg, b.role_id from
(select * from qdz_user where shop_id = #{shopId} and deleted=0
<if test="uid != null ">and uid = #{uid}</if>
) a left join qdz_user_role b on a.uid=b.user_id) c
left join qdz_role d on c.role_id=d.id) e left join qdz_role_module f on e.role_id=f.role_id) g left join qdz_module h on g.module_id=h.id
mybatisPlus會自動在後面加上limit
結果
圖片有點沒對齊,用戶和角色目前是一對一就沒放出來,角色和權限是一對多,得到的結果映射之後實際上在頁面只有一條數據,這是分頁就有點尷尬了,對此直接用了一下mysql的group_concat函數,結合groupby效果看一下
select *,
group_concat(i.name separator ';') as module_name from(
select g.*,h.* from (select e.*,f.module_id from
(select c.*,d.name as role_name,d.role_type from
(select a.uid,a.user_name,a.user_status,a.user_tel,a.user_email,a.shop_id, b.role_id from
(select * from qdz_user where shop_id = '1557733645884912056'
) a left join qdz_user_role b on a.uid=b.user_id) c
left join qdz_role d on c.role_id=d.id) e left join qdz_role_module f on e.role_id=f.role_id) g left join qdz_module h on g.module_id=h.id)
i GROUP BY uid
效果
現在就是這種效果,畢竟業務只需要展示就行,一個字符串懟過去。解決!
原創文章,轉載請註明出處!