大网站成本,品牌设计风格,网站建设可行性及需求分析,沙井网站制作联系电话目录 知识点介绍项目演示项目搭建动态菜单查询分析(权限表分析)权限系统表分析角色模块pageInfopageHelper实现前端动态分页高级查询新增与修改删除角色 分配权限-表分析角色授权数据-一级和二级权限查询 知识点介绍 项目演示
准备数据库 准备工程auth_new
tips#xff1a;… 目录 知识点介绍项目演示项目搭建动态菜单查询分析(权限表分析)权限系统表分析角色模块pageInfopageHelper实现前端动态分页高级查询新增与修改删除角色 分配权限-表分析角色授权数据-一级和二级权限查询 知识点介绍 项目演示
准备数据库 准备工程auth_new
tips 基于sspringboot的ssm架构 角色是权限系统的核心
项目搭建
一SSM整合1.导包 tipslombok在编译时生成getsetter 构造器toString等方法2.准备目录结构3.核心配置文件 yml4.启动类 加上mapper接口的扫描5.测试SpringBoot测试动态菜单查询分析(权限表分析) 权限系统表分析 角色模块
见代码
tips lombok只在编译时生成get set方法等写代码时不提示有对应方法可通过lombok插件来解决此问题 类名右键go to- test快速在测试包生成对应测试方法
pageInfo
在pageHelper里mybatis提供了pageInfo类 role_list.html
th:block th:if${pageInfo.list ! null}....../th:blockth:block th:if${!pageInfo.isFirstPage}lia hrefjavascript:void(0); aria-labelPrevious th:href{/role/index(number${pageInfo.prePage})} span aria-hiddentruelaquo;/span/a/li
/th:block
th:block th:eachnums:${pageInfo.navigatepageNums}li th:class${numspageInfo.pageNum? active : }a hrefjavascript:void(0); th:href{/role/index(number${nums})} th:text${nums} 1/a/li
/th:blockth:block th:if${!pageInfo.isLastPage}lia hrefjavascript:void(0); aria-labelNext th:href{/role/index(number${pageInfo.nextPage})} span aria-hiddentrueraquo;/span/a/li
/th:blockRoleController RequestMapping(/index)public String toRoleList(Model model){model.addAttribute(pageInfo, roleService.loadAllByQuery());return views/role/role_list;}RoleServiceImpl Overridepublic PageInfoRole loadAllByQuery() {return new PageInfo(roleMapper.loadAll());}RoleMapper !--ListRole loadAll();--select idloadAll resultTypeRoleSELECT * FROM role/selectpageHelper
是mybatis提供的分页插件这里是基于springboot的pageHelper底层用aop实现分页自己算出来 导包
!-- pagehelper分页插件依赖 --
dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper-spring-boot-starter/artifactIdversion1.2.5/version
/dependencyRoleController RequestMapping(/index)public String toRoleList(Model model){model.addAttribute(pageInfo, roleService.loadAllByQuery(new RoleQuery()));return views/role/role_list;}RoleServiceImpl Overridepublic PageInfoRole loadAllByQuery(RoleQuery roleQuery) {//使用PageHelper来做分页//1.分页参数准备Integer currentPage roleQuery.getCurrentPage();Integer pageSize roleQuery.getPageSize();//2.开启分页PageHelper.startPage(currentPage,pageSize);return new PageInfoRole(roleMapper.loadAll());}RoleMapper !--ListRole loadAll();--select idloadAll resultTypeRoleSELECT * FROM role/selectapplication.yml
#cn.ming包下所有操作打印详细日志
logging:level:cn:ming: trace实现前端动态分页
BaseQuery
Data
public class BaseQuery {private Integer currentPage 1;private Integer pageSize 5;// SpringMVC 通过使用set参数名称作为方法绑定前端传过来的参数public void setNumber(Integer currentPage) {this.currentPage currentPage;}
}RoleController RequestMapping(/index)public String toRoleList(RoleQuery roleQuery,Model model){model.addAttribute(pageInfo, roleService.loadAllByQuery(roleQuery));return views/role/role_list;}application.yml
#pagehelper分页插件
pagehelper:#分页方言 因为不同数据库拼接分页sql的关键字不同如mysql分页关键字是limit oracle分页关键字是rownumhelper-dialect: mysql#分页容错 传的当前页码小于1时定位第一页传的当前页码大于最末页时定位到末页reasonable: true#支持在参数传递分页参数 支持在mapper接口层传分页参数support-methods-arguments: true高级查询
RoleQuery
Data
public class RoleQuery extends BaseQuery{private String roleName;
}RoleServiceImpl Overridepublic PageInfoRole loadAllByQuery(RoleQuery roleQuery) {//使用PageHelper来做分页//1.分页参数准备Integer currentPage roleQuery.getCurrentPage();Integer pageSize roleQuery.getPageSize();//2.开启分页PageHelper.startPage(currentPage,pageSize);return new PageInfoRole(roleMapper.loadAll(roleQuery));}RoleMapper.xml !--ListRole loadAll(RoleQuery roleQuery);--select idloadAll resultTypeRoleSELECT * FROM rolewhereif testroleName ! null and roleName ! AND name like concat(%,#{roleName},%)/if/where/selecttips去除空格一般交给前端或controller处理避免放到数据层处理那会引起性能下降
新增与修改
tips 先看好前端页面请求过来的路径参数返回值 查询用只读事务增删改用默认的需要事务
RoleController // 添加角色RequestMapping(/save)ResponseBodypublic MapString,Object save(Role role){MapString,Object map new HashMap();try {roleService.save(role);map.put(success, true);map.put(msg,操作成功);} catch (Exception e) {e.printStackTrace();map.put(success, false);map.put(msg,系统繁忙稍后重试);}return map;}// 修改角色RequestMapping(/update)ResponseBodypublic MapString,Object update(Role role){MapString,Object map new HashMap();try {roleService.update(role);map.put(success, true);map.put(msg,操作成功);} catch (Exception e) {e.printStackTrace();map.put(success, false);map.put(msg,系统繁忙稍后重试);}return map;}RoleServiceImpl OverrideTransactionalpublic void save(Role role) {roleMapper.save(role);}OverrideTransactionalpublic void update(Role role) {roleMapper.update(role);}RoleMapper.xml !--void save(Role role);--insert idsaveINSERT INTO role(name,sn) VALUES (#{name},#{sn})/insert!--void update(Role role);--update idupdateUPDATE role SET name #{name},sn#{sn}WHERE id #{id}/update删除角色
tips中间表不应该有实体类或Mapper RoleController // 删除角色RequestMapping(/delete)ResponseBodypublic MapString,Object delete(Long id){MapString,Object map new HashMap();try {roleService.delete(id);map.put(success, true);map.put(msg,操作成功);} catch (Exception e) {e.printStackTrace();map.put(success, false);map.put(msg,系统繁忙稍后重试);}return map;}RoleServiceImpl /*** 删除角色* 1.删除角色权限中间表数据* 2.删除角色表数据*/OverrideTransactionalpublic void delete(Long roleId) {roleMapper.deleteRolePermission(roleId);roleMapper.delete(roleId);}RoleMapper.xml !--void deleteRolePermission(Long roleId);--delete iddeleteRolePermission parameterTypelongDELETE FROM role_permission WHERE role_id #{roleId}/delete!--void delete(Long roleId);--delete iddelete parameterTypelongDELETE FROM role WHERE id #{id}/delete分配权限-表分析 角色授权数据-一级和二级权限查询
RoleController // 查询一级和二级权限并返回页面RequestMapping(/toPermission)public String toRoleList(Long roleId, Model model){model.addAttribute(map, roleService.loadOneAndTwoLevel(roleId));return views/role/role_permission;}domain
Data
public class Permission {private Long id;private String name;private String url;private Long menu_id;private Permission parent;private ListPermission children new ArrayList();
}RoleServiceImpl Overridepublic MapString, Object loadOneAndTwoLevel(Long roleId) {MapString, Object map new HashMap();map.put(permissions, roleMapper.loadOneAndTwoLevel());//角色回显map.put(rid, roleId);return map;}RoleMapper.xml !--自定义结果集映射--resultMap idxx typePermissionid columnpid propertyid/result columnpname propertyname/result columnpurl propertyurl/collection propertychildren ofTypePermissionid columnid propertyid/result columnname propertyname/result columnurl propertyurl//collection/resultMap!--ListPermission loadOneAndTwoLevel();--select idloadOneAndTwoLevel resultMapxxSELECTp.id pid,p. NAME pname,p.url purl,c.*FROMpermission pJOIN permission c ON p.id c.parent_idWHEREp.parent_id IS NULL/select