项目实战之旅游网(三)后台用户管理(下)

news/2024/5/12 16:36:31/文章来源:https://blog.csdn.net/weixin_44593822/article/details/127631664

目录

一.查询用户角色

二.修改用户角色

三.修改用户状态


一.查询用户角色

 一个用户可以有多个角色,我们也可以给某个用户分配某些角色,所以我们还需要新建一个实体类(这个实体类需要放到bean下,因为这个实体类和数据据库不是对应关系,而是我们为了实现这一功能而建的一个实体类)

一是查询所有角色,二是查询该用户拥有哪些角色,这两个集合的交集展示出来就可以看到带有状态的角色。

后台代码:

我们来新建一个mapper包下的映射文件RoleMapper.java

public interface RoleMapper extends BaseMapper<Role> {//查询用户拥有的所有角色的id,即返回的是id的集合List<Integer> findRoleIdByAdmin(Integer aid);
}

然后写一下RoleMapper.xml(配置文件),还是放到resources下的同等路径中

(resources/com/first/travel/mapper/)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.first.travel.mapper.RoleMapper"><select id="findRoleIdByAdmin" parameterType="int" resultType="int">select ridfrom admin_rolewhere aid = #{aid}</select>
</mapper>

然后在Service层添加查询带有状态的角色功能:

    // 查询用户的角色情况public List<RoleWithStatus> findRole(Integer aid) {// 1.查询所有角色(selectList是BaseMapper的接口函数)List<Role> roles = roleMapper.selectList(null);// 2.查询用户拥有的角色(这是咱们自定义的函数,根据用户id查询这个用户拥有哪些角色,返回的是一个角色id的列表)List<Integer> rids = roleMapper.findRoleIdByAdmin(aid);// 3.构建带有状态的角色集合,拥有拥有状态为true,否则状态为falseList<RoleWithStatus> roleList = new ArrayList();for (Role role : roles) {// 创建带有状态的角色RoleWithStatus roleWithStatus = new RoleWithStatus();// 复制对象的属性(即把相同的属性名对应的属性值从左边那个对象赋给右边那个对象,一步到位,不用一个一个的赋值了)BeanUtils.copyProperties(role, roleWithStatus);if (rids.contains(role.getRid())) { // 用户拥有该角色roleWithStatus.setAdminHas(true);} else {roleWithStatus.setAdminHas(false);}roleList.add(roleWithStatus);}return roleList;}

 然后在controller层添加控制逻辑:

    @RequestMapping("/findRole")public ModelAndView findRole(Integer aid){List<RoleWithStatus> roles = adminService.findRole(aid);ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("roles",roles);modelAndView.addObject("aid",aid);modelAndView.setViewName("/backstage/admin_role");return modelAndView;}

前端代码:

运行i项目,点击首页的分配角色按钮,测试成功。

二.修改用户角色

为了方便起见,我们在修改用户角色时,先把该用户对用的角色全部删除,然后再重新添加一遍。

 @Param的作用就是给参数命名,一般使用在dao(mapper)层,当添加注解后(@Param("userId") int id),也就是说外部想要取出传入的id值,只需要取它的参数名userId就可以了。将参数值传如SQL语句中,通过#{userId}进行取值给SQL的参数赋值。

添加接口:

    //删除用户的所有角色void deleteAdminAllRoles(Integer id);//给用户添加角色void addAdminRole(@Param("aid") Integer aid,@Param("rid") Integer rid);

在AdminMapper.xml中添加接口配置:

    <delete id="deleteAdminAllRoles" parameterType="int">DELETE from admin_role where aid = #{aid}</delete><insert id="addAdminRole">INSERT INTO  admin_role values (#{aid},#{rid})</insert>

咱们前面说过,mapper,service,controller这三层分别是干嘛的,咱们现在再来强调一点,前面说的不够全面,service层不一定是实现接口的功能,因为的接口的功能可以由配置文件来实现,比如AdminMapper.xml,所以service层确实实现了一些功能,可以把这些功能看作是业务逻辑功能,这也可能是几个接口函数组合起来的实现的一个功能。

比如咱们下面要在service层添加的这个功能:

    // 修改用户角色public void updateRole(Integer aid, Integer[] ids) {// 删除用户的所有角色adminMapper.deleteAdminAllRoles(aid);// 重新给用户添加角色for (Integer rid : ids) {adminMapper.addAdminRole(aid, rid);}}

 控制层:

    @RequestMapping("/updateRole")public String updateRole(Integer aid,Integer[] ids){adminService.updateRole(aid,ids);return "redirect:/backstage/admin/all";}

前端页面代码省略。

运行项目,现在就可以根据复选框来修改用户的角色了。

三.修改用户状态

当系统不想让管理员登录时,因为管理员可能会关联很多数据,此时往往不会删除管理员。
而是将管理员状态改为false. 接下来我们编写修改用户状态的代码。

修改service层:

    // 修改用户状态public void updateStatus(Integer aid) {Admin admin = adminMapper.selectById(aid);admin.setStatus(!admin.isStatus()); // 状态取反adminMapper.updateById(admin);}

控制层:

    @RequestMapping("/updateStatus")public String updateStatus(Integer aid){adminService.updateStatus(aid);return "redirect:/backstage/admin/all";}

运行项目,然后在主页点击”启用/禁用“按钮,查看状态一栏的变化。

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

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

相关文章

SpringCloud 网关组件 Zuul-1.0 原理深度解析

为什么要使用网关&#xff1f; 在当下流行的微服务架构中&#xff0c;面对多端应用时我们往往会做前后端分离&#xff1a;如前端分成 APP 端、网页端、小程序端等&#xff0c;使用 Vue 等流行的前端框架交给前端团队负责实现&#xff1b;后端拆分成若干微服务&#xff0c;分别…

独立开发变现周刊(第85期):一个会员服务的SaaS,月收入2万美金

分享独立开发、产品变现相关内容&#xff0c;每周五发布。目录1、Obsidian Canvas&#xff1a;一个无限的空间来构建你的想法2、message-pusher: 搭建专属于你的消息推送服务3、Careerflow LinkedIn: 40倍提升你的工作机会4、vue-pure-admin: 一款开源后台管理系统5、一个提供会…

【HarmonyOS】调测助手安装失败10内部错误

关于鸿蒙开发通过应用调测助手向watch gt 3 手表安装hap时报错。 问题背景&#xff1a; 鸿蒙开发&#xff0c;使用新建工程的helloworld 没有其他修改&#xff0c;生成hap包。然后通过应用调测助手向watch gt 3 手表安装hap时提示 安装失败:10.内部错误。 Sdk&#xff1a; a…

基于VUE学生选课管理系统

开发工具(eclipse/idea/vscode等)&#xff1a;idea 数据库(sqlite/mysql/sqlserver等)&#xff1a;mysql 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 一、登录注册模块: 1.学生&#xff0c;教师&#xff0c;管理员三个角色&#xff08;同一时刻&#xff0c;账户…

WSL2的安装、应用

WSL2的安装、应用WSL安装、升级常用命令WSL导入导出其他 - 图形界面、虚拟化WSL安装、升级 win10系统上开启WSL参考如下&#xff0c;我先是安装了WSL1&#xff0c;之后又升级到WSL2的。关键是一些Win10上电配置&#xff0c;之后在windows应用商店下载ubuntu即可。 win10上lin…

Python基础(十八):学员管理系统应用

文章目录 学员管理系统应用 一、系统简介 二、步骤分析 三、需求实现 1、显示功能界面 2、用户输入序号&#xff0c;选择功能 3、根据用户选择&#xff0c;执行不同的功能 4、定义不同功能的函数 学员管理系统应用 一、系统简介 需求&#xff1a;进入系统显示系统功能…

跨域问题以及解决跨域问题的vue-cli解决方案

跨域问题 写项目前要问后端,接口支持跨域吗? 支持就不会出现问题,不支持就需要解决跨域问题 1.如何判断一个浏览器的请求是否跨域&#xff1f; 在A地址&#xff08;发起请求的页面地址&#xff09;向B地址&#xff08;要请求的目标页面地址&#xff09;发起请求时&#xff…

Java环境配置——Linux 安装JDK

注意这是用普通用户登录后&#xff0c;单独设置用户的java环境变量&#xff0c;非root用户 root用户的编辑命令是 vi /etc/profile 下载安装包 创建java目录 mkdir java 进入目录 cd java 上传安装包 将jdk-8u161-linux-x64.tar.gz上传到java目录 配置环境变量 解压安…

leetcode——155. 最小栈

leetcode——155. 最小栈&#x1f50d;题目详情&#x1f914;解题思路&#x1f4bb;代码实现&#x1f4ac;总结&#x1f440;先看这里&#x1f448; &#x1f600;作者&#xff1a;江不平 &#x1f4d6;博客&#xff1a;江不平的博客 &#x1f4d5;学如逆水行舟&#xff0c;不进…

【信管5.2】估算活动资源与持续时间

估算活动资源与持续时间在经过上次课程的学习后&#xff0c;我们已经了解到了进度、活动的概念及定义&#xff0c;并且简单地学习了下活动顺序如何排列的一些工具技术。今天&#xff0c;我们学习的主要方向是估算活动资源与估算活动持续时间这两个过程&#xff0c;另外我们还会…

WMS类图分析-android12

为什么要分析类图&#xff1f; WMS是一个复杂的模块&#xff0c;就像一个很大的家族&#xff0c;里面有各种角色&#xff0c;认识类图就像是认识WMS模块中的各个角色&#xff0c;不先把人认清楚了&#xff0c;怎么更好的理解他们之间的交互&#xff1f; 我觉得&#xff0c;这…

达梦数据IPO过会:拟募资24亿 光谷“扫地僧”冯裕才将敲钟

雷递网 雷建平 12月23日武汉达梦数据库股份有限公司&#xff08;简称&#xff1a;“达梦数据”&#xff09;日前IPO过会&#xff0c;准备在科创板上市。达梦数据计划募资23.51亿元。其中&#xff0c;3.52亿元用于集群数据库管理系统升级项目&#xff0c;3.43亿元用于高性能分布…

pytorch 多卡运行详细教程

先说明一下背景&#xff0c;目前正在魔改以下这篇论文的代码&#xff1a; https://github.com/QipengGuo/GraphWriter-DGLgithub.com 由于每次完成实验需要5个小时&#xff08;baseline&#xff09;&#xff0c;自己的模型需要更久&#xff08;2倍&#xff09;&#xff0c;非…

2022星空创造营应用创新大赛圆满落幕,获奖名单出炉!

​12月22日&#xff0c;2022星空创造营应用创新大赛在2022手机创新周暨第十届手机设计大赛颁奖典礼上作为特别专场正式公布获奖名单。2022星空创造营应用创新大赛由联通在线、手机设计大赛天鹅奖组委会联合主办&#xff0c;联通在线音乐公司及工信部赛迪研究院共同承办&#xf…

小学生C++编程基础 课程10

938.最小公倍数的简单方法 &#xff08;课程A&#xff09; 难度&#xff1a;1 登录 939.最大公约数的简单方法 ( 课程A&#xff09; 难度&#xff1a;1 登录 940.韩信点兵 &#xff08;课程A&#xff09; 难度&#xff1a;1 登录 941.求123…N的和 &#xff08;课程A&#x…

Spring MVC【返回数据与请求转发和重定向】

Spring MVC【返回数据与请求转发和重定向】&#x1f34e;一. 返回数据&#x1f352;1.1 返回静态页面&#x1f352;1.2 返回一个非静态页面&#x1f352;1.3 返回text/html类型页面&#x1f352;1.4 返回JSON对象&#x1f352;1.5 实现计算器功能&#x1f352;1.6 使用ajax方式…

【算法】P1 算法简介

算法什么是算法正确与错误的算法算法可以解决什么问题本专栏有哪些算法什么是算法 算法 (Algorithm) 取某个值或集合作为 输入&#xff0c;并产生某个值或集合作为 输出。算法就是把输入转换为输出的计算&#xff0c;描述这个计算的过程来实现输入与输出的关系。 正确与错误的…

股票量化分析工具QTYX使用攻略——实盘交易信号监控(更新2.5.7)

搭建自己的量化系统如果要长期在市场中立于不败之地&#xff01;必须要形成一套自己的交易系统。如何学会搭建自己的量化交易系统&#xff1f;边学习边实战&#xff0c;在实战中学习才是最有效地方式。于是我们分享一个即可以用于学习&#xff0c;也可以用于实战炒股分析的量化…

插值算法基本原理

插值&#xff1a;数据处理的手段 将缺失数据补全处理 线性内插 拉格朗日插值法 牛顿插值 拟合&#xff1a;预测&#xff0c;寻找规律的手段 是插值的外延 插值算法&#xff1a;使用在现有的数据极少&#xff0c;不足以支撑分析的进行&#xff0c;这时就需要使用一些数学方法…

【Vue】Vue重写教室管理系统的前端网页V1(前后端分离)--20221222

项目说明 目的 练习并熟悉Vue2 的API&#xff0c;来为Vue项目做准备&#xff1a; 插值语法插槽props和data父子组件通信Ajax异步请求数据生命周期函数methods方法computed属性vue-router、路由守卫、query/params传参、编程函数式路由模拟后端服务器传送数据打包项目 需要加…