B059-权限管理系统01

目录

      • 知识点介绍
      • 项目演示
      • 项目搭建
      • 动态菜单查询分析(权限表分析)
      • 权限系统表分析
      • 角色模块
        • pageInfo
        • pageHelper
        • 实现前端动态分页
        • 高级查询
        • 新增与修改
        • 删除角色
      • 分配权限-表分析
      • 角色授权数据-一级和二级权限查询

知识点介绍

在这里插入图片描述

项目演示

准备数据库
在这里插入图片描述
准备工程auth_new

tips:
基于sspringboot的ssm架构
角色是权限系统的核心

项目搭建

一:SSM整合1.导包									tips:lombok在编译时生成get,setter ,构造器,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:block><th:block th:if="${!pageInfo.isFirstPage}"><li><a href="javascript:void(0);" aria-label="Previous"  th:href="@{/role/index(number=${pageInfo.prePage})}" ><span aria-hidden="true">&laquo;</span></a></li>
</th:block>
<th:block  th:each="nums:${pageInfo.navigatepageNums}"><li th:class="${nums==pageInfo.pageNum? 'active' : ''}"><a href="javascript:void(0);"  th:href="@{/role/index(number=${nums})}"  th:text="${nums}"  >1</a></li>
</th:block><th:block th:if="${!pageInfo.isLastPage}"><li><a href="javascript:void(0);" aria-label="Next"   th:href="@{/role/index(number=${pageInfo.nextPage})}" ><span aria-hidden="true">&raquo;</span></a></li>
</th:block>

RoleController

    @RequestMapping("/index")public String toRoleList(Model model){model.addAttribute("pageInfo", roleService.loadAllByQuery());return "views/role/role_list";}

RoleServiceImpl

    @Overridepublic PageInfo<Role> loadAllByQuery() {return new PageInfo<>(roleMapper.loadAll());}

RoleMapper

    <!--List<Role> loadAll();--><select id="loadAll" resultType="Role">SELECT * FROM role</select>
pageHelper

是mybatis提供的分页插件,这里是基于springboot的pageHelper,底层用aop实现分页,自己算出来
导包

<!-- pagehelper分页插件依赖 -->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.5</version>
</dependency>

RoleController

    @RequestMapping("/index")public String toRoleList(Model model){model.addAttribute("pageInfo", roleService.loadAllByQuery(new RoleQuery()));return "views/role/role_list";}

RoleServiceImpl

    @Overridepublic PageInfo<Role> loadAllByQuery(RoleQuery roleQuery) {//使用PageHelper来做分页//1.分页参数准备Integer currentPage = roleQuery.getCurrentPage();Integer pageSize = roleQuery.getPageSize();//2.开启分页PageHelper.startPage(currentPage,pageSize);return new PageInfo<Role>(roleMapper.loadAll());}

RoleMapper

    <!--List<Role> loadAll();--><select id="loadAll" resultType="Role">SELECT * FROM role</select>

application.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 PageInfo<Role> loadAllByQuery(RoleQuery roleQuery) {//使用PageHelper来做分页//1.分页参数准备Integer currentPage = roleQuery.getCurrentPage();Integer pageSize = roleQuery.getPageSize();//2.开启分页PageHelper.startPage(currentPage,pageSize);return new PageInfo<Role>(roleMapper.loadAll(roleQuery));}

RoleMapper.xml

    <!--List<Role> loadAll(RoleQuery roleQuery);--><select id="loadAll" resultType="Role">SELECT * FROM role<where><if test="roleName != null and roleName != ''">AND name like concat("%",#{roleName},"%")</if></where></select>

tips:去除空格一般交给前端或controller处理,避免放到数据层处理,那会引起性能下降

新增与修改

tips:
先看好前端页面请求过来的路径,参数,返回值
查询用只读事务,增删改用默认的需要事务

RoleController

    // 添加角色@RequestMapping("/save")@ResponseBodypublic Map<String,Object> save(Role role){Map<String,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 Map<String,Object> update(Role role){Map<String,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

    @Override@Transactionalpublic void save(Role role) {roleMapper.save(role);}@Override@Transactionalpublic void update(Role role) {roleMapper.update(role);}

RoleMapper.xml

    <!--void save(Role role);--><insert id="save">INSERT INTO role(name,sn) VALUES (#{name},#{sn})</insert><!--void update(Role role);--><update id="update">UPDATE role SET name = #{name},sn=#{sn}WHERE id = #{id}</update>
删除角色

tips:中间表不应该有实体类或Mapper
RoleController

    // 删除角色@RequestMapping("/delete")@ResponseBodypublic Map<String,Object> delete(Long id){Map<String,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.删除角色表数据*/@Override@Transactionalpublic void delete(Long roleId) {roleMapper.deleteRolePermission(roleId);roleMapper.delete(roleId);}

RoleMapper.xml

    <!--void deleteRolePermission(Long roleId);--><delete id="deleteRolePermission" parameterType="long">DELETE FROM role_permission WHERE role_id = #{roleId}</delete><!--void delete(Long roleId);--><delete id="delete" parameterType="long">DELETE 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 List<Permission> children = new ArrayList<>();
}

RoleServiceImpl

    @Overridepublic Map<String, Object> loadOneAndTwoLevel(Long roleId) {Map<String, Object> map = new HashMap<>();map.put("permissions", roleMapper.loadOneAndTwoLevel());//角色回显map.put("rid", roleId);return map;}

RoleMapper.xml

    <!--自定义结果集映射--><resultMap id="xx" type="Permission"><id column="pid" property="id"/><result column="pname" property="name"/><result column="purl" property="url"/><collection property="children" ofType="Permission"><id column="id" property="id"/><result column="name" property="name"/><result column="url" property="url"/></collection></resultMap><!--List<Permission> loadOneAndTwoLevel();--><select id="loadOneAndTwoLevel" resultMap="xx">SELECTp.id pid,p. NAME pname,p.url purl,c.*FROMpermission pJOIN permission c ON p.id = c.parent_idWHEREp.parent_id IS NULL</select>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/324973.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins接口调用

Jenkins是好用&#xff0c;但是接口文档写的稀烂 1、授权&#xff0c;Jenkins不推荐使用创建单个任务时创建的token&#xff0c;推荐这个用户下的创建user token。 点击自己账号信息&#xff0c;即可创建token。 2、postman选择basic auth&#xff0c;输入账号密码&#xff0…

高并发如何保证接口的幂等性?

前言 接口幂等性问题&#xff0c;对于开发人员来说&#xff0c;是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法&#xff0c;绝大部分内容我在项目中实践过的&#xff0c;给有需要的小伙伴一个参考。 不知道你有没有遇到过这些场景&#xff1a; 有时我…

LLM增强LLM;通过预测上下文来提高文生图质量;Spikformer V2;同时执行刚性和非刚性编辑的通用图像编辑框架

文章首发于公众号&#xff1a;机器感知 LLM增强LLM&#xff1b;通过预测上下文来提高文生图质量&#xff1b;Spikformer V2&#xff1b;同时执行刚性和非刚性编辑的通用图像编辑框架 LLM Augmented LLMs: Expanding Capabilities through Composition 本文研究了如何高效地组…

STM32F4 IAP升级 Bootloader程序+上位机下载程序源码

目录 一、硬件设计 二、软件设计 三、上位机设计 四、IAP说明 五、下载验证 资料下载地址&#xff1a;STM32F4 IAP升级 Bootloader程序上位机下载程序源码 一、硬件设计 升级下载程序采用外部硬件触发的方式。 PB-20M4硬件板 预留一个IO口处理代码下载及更新的功能。 功…

数据采集:获取有价值信息的关键步骤

在当今数据驱动的时代&#xff0c;数据已成为企业、组织和个人做出明智决策的重要依据。而数据采集作为数据分析和应用的第一步&#xff0c;其重要性不言而喻。本文将探讨数据采集的概念意义、方法工具、面临的挑战和应对策略以及注意事项。 一、数据采集的定义和重要性 &…

win10电脑提示“KBDSG.DLL文件缺失”,软件游戏无法启动运行,快速修复方法

很多用户在日常使用电脑的时候&#xff0c;或多或少都遇到过&#xff0c;在启动游戏或软件的时候&#xff0c;Windows桌面会弹出错误提示框“KBDSG.DLL文件缺失&#xff0c;造成软件无法启动或运行&#xff0c;请尝试重新安装解决”。 不少用户&#xff0c;会根据提示重装游戏或…

Nginx 的 gzip 压缩

目录 1. 为什么要开启gzip 压缩 2.对网站配置文件进行修改 1. 为什么要开启gzip 压缩 nginx使用gzip压缩主要是为了降低网站的带宽消耗和提升访问速度。通过对页面进行压缩&#xff0c;可以减少传输的数据量&#xff0c;从而减少网络传输的时间和带宽消耗。 当浏览器接收到压…

MySQL——视图

目录 一.视图介绍 二.基本使用 三.视图规则和限制 一.视图介绍 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 二.基本使用 创…

rancher 手册

官方 https://www.rancher.com/https://github.com/rancher/rancherhttps://docs.rke2.io/ rancher 安装要求kubernetesl yaml deploy rancher serverHelm Deploy Online Rancher DemoHelm & Kubernetes Offline Deploy Rancher v2.7.5 Demohelm upgrade rancher server…

一篇文章认识微服务中Eureka的原理和服务注册与发现

目录 1、认识Eureka 2、Eureka原理 2.1 和Dubbo架构对比&#xff1a; 2.2 三大角色 3、微服务常见的注册中心 3.1 Zookeeper 3.2 Eureka 3.3 Consul 3.4 Nacos 3.5 区别 Netflix 在设计Eureka 时&#xff0c;遵循的就是AP原则。 CAP原则又称CAP定理&#xff0c;指的…

LeGO-LOAM 安装以及运行

一、源码地址&#xff1a; GitHub - RobustFieldAutonomyLab/LeGO-LOAM: LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable TerrainLeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain - GitH…

第三届先进控制、自动化与机器人国际会议(ICACAR 2024) | Ei、Scopus双检索

会议简介 Brief Introduction 2024年第三届先进控制、自动化与机器人国际会议(ICACAR 2024) 会议时间&#xff1a;2024年5月24-26日 召开地点&#xff1a;中国重庆 大会官网&#xff1a;ICACAR 2024-2024 3rd International Conference on Advanced Control, Automation and Ro…