【尚庭公寓SpringBoot + Vue 项目实战】后台用户信息管理(十七)

【尚庭公寓SpringBoot + Vue 项目实战】后台用户信息管理(十七)


文章目录

      • 【尚庭公寓SpringBoot + Vue 项目实战】后台用户信息管理(十七)
        • 1、业务说明
        • 2、逻辑模型介绍
        • 3、接口开发
          • 3.1、根据条件分页查询后台用户列表
          • 3.2、根据ID查询后台用户信息
          • 3.3、保存或更新后台用户信息
          • 3.4、判断后台用户名是否可用
          • 3.5、根据ID删除后台用户信息
          • 3.6、根据ID修改后台用户状态

1、业务说明

后台用户信息管理共有六个接口

  1. 根据条件分页查询后台用户列表
  2. 根据id查询后台用户信息
  3. 保存或更新后台用户信息
  4. 判断后台用户是否可用
  5. 根据id删除后台用户信息
  6. 根据id修改后台用户状态

接口定义-后台-系统用户管理-用户列表

2、逻辑模型介绍

image-20240618121938150

通过岗位id从岗位信息表中查询岗位

3、接口开发
3.1、根据条件分页查询后台用户列表

查看接口

image-20240618122228702

代码开发

  • 查看请求和响应的数据结构

    • 请求的数据结构

      • currentsize为分页相关参数,分别表示当前所处页面每个页面的记录数

      • SystemUserQueryVo为房间的查询条件,详细结构如下:

        @Data
        @Schema(description = "员工查询实体")
        public class SystemUserQueryVo {@Schema(description= "员工姓名")private String name;@Schema(description= "手机号码")private String phone;
        }
        
    • 响应的数据结构

      单个系统用户信息的结构可查看web-admin模块下的com.atguigu.lease.web.admin.vo.system.user.SystemUserItemVo,具体内容如下:

      @Data
      @Schema(description = "后台管理系统用户基本信息实体")
      public class SystemUserItemVo extends SystemUser {@Schema(description = "岗位名称")@TableField(value = "post_name")private String postName;
      }
      
  • 编写Controller层逻辑

    SystemUserController中增加如下内容

    @Operation(summary = "根据条件分页查询后台用户列表")
    @GetMapping("page")
    public Result<IPage<SystemUserItemVo>> page(@RequestParam long current, @RequestParam long size, SystemUserQueryVo queryVo) {IPage<SystemUser> page = new Page<>(current, size);IPage<SystemUserItemVo> systemUserPage = service.pageSystemUserByQuery(page, queryVo);return Result.ok(systemUserPage);
    }
    
  • 编写Service层逻辑

    • SystemUserService中增加如下内容

      IPage<SystemUserItemVo> pageSystemUserByQuery(IPage<SystemUser> page, SystemUserQueryVo queryVo);
      
    • SystemUserServiceImpl中增加如下内容

      @Override
      public IPage<SystemUserItemVo> pageSystemUserByQuery(IPage<SystemUser> page, SystemUserQueryVo queryVo) {return systemUserMapper.pageSystemUserByQuery(page, queryVo);
      }
      
  • 编写Mapper层逻辑

    • SystemUserMapper中增加如下内容

      IPage<SystemUserItemVo> pageSystemUserByQuery(IPage<SystemUser> page, SystemUserQueryVo queryVo);
      
    • SystemUserMapper.xml中增加如下内容

      <select id="pageSystemUserByQuery"resultType="com.atguigu.lease.web.admin.vo.system.user.SystemUserItemVo">select su.id,username,su.name,type,phone,avatar_url,additional_info,post_id,su.status,sp.name post_namefrom system_user suleft join system_post sp on su.post_id = sp.id and sp.is_deleted = 0<where>su.is_deleted = 0<if test="queryVo.name != null and queryVo.name != ''">and su.name like concat('%',#{queryVo.name},'%')</if><if test="queryVo.phone !=null and queryVo.phone != ''">and su.phone like concat('%',#{queryVo.phone},'%')</if></where>
      </select>
      

      知识点

      password字段不要查询。

3.2、根据ID查询后台用户信息

查看接口

image-20240618122349161

代码开发

  • 编写Controller层逻辑

    SystemUserController中增加如下内容

    @Operation(summary = "根据ID查询后台用户信息")
    @GetMapping("getById")
    public Result<SystemUserItemVo> getById(@RequestParam Long id) {SystemUserItemVo systemUser = service.getSystemUserById(id);return Result.ok(systemUser);
    }
    
  • 编写Service层逻辑

    • SystemUserServcie中增加如下内容

      SystemUserItemVo getSystemUserById(Long id);
      
    • SystemUserServcieImpl中增加如下内容

      @Override
      public SystemUserItemVo getSystemUserById(Long id) {SystemUser systemUser = systemUserMapper.selectById(id);SystemPost systemPost = systemPostMapper.selectById(systemUser.getPostId());SystemUserItemVo systemUserItemVo = new SystemUserItemVo();BeanUtils.copyProperties(systemPost, systemUserItemVo);systemUserItemVo.setPostName(systemUserItemVo.getPostName());return systemUserItemVo;
      }
      

      知识点

      system_user表中的password字段不应查询,需要在SystemUserpassword字段的@TableField注解中增加select=false参数。

3.3、保存或更新后台用户信息

查看接口

image-20240618122519682

代码开发

  • 编写Controller层逻辑

    SystemUserController中增加如下内容

    @Operation(summary = "保存或更新后台用户信息")
    @PostMapping("saveOrUpdate")
    public Result saveOrUpdate(@RequestBody SystemUser systemUser) {if(systemUser.getPassword() != null){systemUser.setPassword(DigestUtils.md5Hex(systemUser.getPassword()));}service.saveOrUpdate(systemUser);return Result.ok();
    }
    

    知识点

    • 密码处理

      用户的密码通常不会直接以明文的形式保存到数据库中,而是会先经过处理,然后将处理之后得到的"密文"保存到数据库,这样能够降低数据库泄漏导致的用户账号安全问题。

      密码通常会使用一些单向函数进行处理,如下图所示

      常用于处理密码的单向函数(算法)有MD5、SHA-256等,Apache Commons提供了一个工具类DigestUtils,其中就包含上述算法的实现。

      Apache Commons是Apache软件基金会下的一个项目,其致力于提供可重用的开源软件,其中包含了很多易于使用的现成工具。

      使用该工具类需引入commons-codec依赖,在common模块的pom.xml中增加如下内容

      <dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId>
      </dependency>
      
    • Mybatis-Plus update strategy

      使用Mybatis-Plus提供的更新方法时,若实体中的字段为null,默认情况下,最终生成的update语句中,不会包含该字段。若想改变默认行为,可做以下配置。

      • 全局配置

        application.yml中配置如下参数

        mybatis-plus:global-config:db-config:update-strategy: <strategy>
        

        :上述<strategy>可选值有:ignorenot_nullnot_emptynever,默认值为not_null

        • ignore:忽略空值判断,不管字段是否为空,都会进行更新

        • not_null:进行非空判断,字段非空才会进行判断

        • not_empty:进行非空判断,并进行非空串(“”)判断,主要针对字符串类型

        • never:从不进行更新,不管该字段为何值,都不更新

      • 局部配置

        在实体类中的具体字段通过@TableField注解进行配置,如下:

        @Schema(description = "密码")
        @TableField(value = "password", updateStrategy = FieldStrategy.NOT_EMPTY)
        private String password;
        
3.4、判断后台用户名是否可用

查看接口

image-20240618122615593

代码开发

SystemUserController中增加如下内容

@Operation(summary = "判断后台用户名是否可用")
@GetMapping("isUserNameAvailable")
public Result<Boolean> isUsernameExists(@RequestParam String username) {LambdaQueryWrapper<SystemUser> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(SystemUser::getUsername, username);long count = service.count(queryWrapper);return Result.ok(count == 0);
}
3.5、根据ID删除后台用户信息

查看接口

image-20240618122657979

代码开发

SystemUserController中增加如下内容

@DeleteMapping("deleteById")
@Operation(summary = "根据ID删除后台用户信息")
public Result removeById(@RequestParam Long id) {service.removeById(id);return Result.ok();
}
3.6、根据ID修改后台用户状态

查看接口

image-20240618122747424

代码开发

SystemUserController中增加如下内容

@Operation(summary = "根据ID修改后台用户状态")
@PostMapping("updateStatusByUserId")
public Result updateStatusByUserId(@RequestParam Long id, @RequestParam BaseStatus status) {LambdaUpdateWrapper<SystemUser> updateWrapper = new LambdaUpdateWrapper<>();updateWrapper.eq(SystemUser::getId, id);updateWrapper.set(SystemUser::getStatus, status);service.update(updateWrapper);return Result.ok();
}

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

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

相关文章

grafana连接influxdb2.x做数据大盘

连接influxdb 展示数据 新建仪表盘 选择存储库 设置展示

Handler机制

目录 一、简介二、相关概念解释2.1 Message&#xff08;消息&#xff09;2.2 Handler&#xff08;处理器&#xff09;2.2.1 Handler的构造方法2.2.2 Handler sendMessage&#xff08;&#xff09;相关的方法2.2.3 Handler dispatchMessage&#xff08;&#xff09;方法 2.3 Mes…

NSSCTF-Web题目9

目录 [SWPUCTF 2021 新生赛]sql 1、题目 2、知识点 3、思路 [SWPUCTF 2022 新生赛]xff 1、题目 2、知识点 3、思路 [FSCTF 2023]源码&#xff01;启动! 1、题目 2、知识点 3、思路 [SWPUCTF 2021 新生赛]sql 1、题目 2、知识点 SQL注入&#xff0c;空格、注释符等…

京东和天猫各渠道区别是什么?你了解吗?如何快速了解两个平台渠道推广

1.快车/直通车区别: 京东:不能投竞品词,能投定向商品选竞品,因为京东是卖平台流量和商品(自营(主收入)),不可以投竞品词是为了保护自己店铺的品牌流量; 天猫:只卖平台流量,不卖商品,所以允许竞品词投放; 2.竞品人群圈选: 因为数坊是自身品牌数据分析平台,所…

基于EXCEL数据表格创建省份专题地图

1 数据源 随着西藏于5月1日发布2022年一季度经济运行情况&#xff0c;31省份一季度GDP数据已全部出炉。 总量方面&#xff0c;粤苏鲁稳居前三&#xff1b;增速方面&#xff0c;23省份高于“全国线”&#xff0c;新疆表现最佳&#xff0c;增速达到7.0%。 表格表现数据不够直观…

Aeron:Multi-Destination-Cast

Multi-Destination-Cast&#xff08;MDC&#xff09;是一种功能&#xff0c;允许 Aeron 从单个 Publication 同时向多个目的地传送数据。Multiple-Destination-Cast是 Aeron 的一项高级功能&#xff0c;本指南将介绍如何开发一个简单示例的基本知识。 一、MDC Publications 注&…

MAP REDUCE

大数据处理框架概念 定义&#xff1a;由一系列组件构成&#xff0c;负责对数据系统中的数据进行计算。组件&#xff1a; 处理引擎&#xff1a;实际执行数据操作的独立组件。处理框架&#xff1a;包含多个协同工作的组件。 框架与引擎的区别 引擎&#xff1a;单一的&#xf…

NV-Embed论文阅读笔记

这是NVIDIA的一篇论文&#xff0c;LLM通常使用的是GPT的decoder范式作为一个生成模型&#xff0c;文章探讨如何利用这样的decoder生成模型来实现BERT这样的encoder的功能&#xff0c;即提取有效的embedding。现有的方法提取embedding的方式无非是 1 mean pooling&#xff1b; 2…

计算机相关专业是否仍是“万金油”的选择?

亲爱的朋友们&#xff1a; 2024 年高考已然落幕&#xff0c;数百万高三学子站在了人生的重要十字路口&#xff0c;面临着选择大学专业这一关键抉择。在这个节点上&#xff0c;计算机相关专业是否还能被称为“万金油”的选择呢&#xff1f; 相信大家都知道&#xff0c;在最近这几…

经典神经网络(11)VQ-VAE模型及其在MNIST数据集上的应用

经典神经网络(11)VQ-VAE模型及其在MNIST数据集上的应用 我们之前已经了解了PixelCNN模型。 经典神经网络(10)PixelCNN模型、Gated PixelCNN模型及其在MNIST数据集上的应用 今天&#xff0c;我们了解下DeepMind在2017年提出的一种基于离散隐变量&#xff08;Discrete Latent va…

celery骚操作之把任务写在类中可能造成的问题

celery注册异步函数是模块级别的&#xff0c;也就是同个模块不能有同名函数&#xff0c;比如搞个骚操作&#xff0c;将celery任务写在类中如下(注意这个静态方法是个特殊的装饰器&#xff0c;他实际是个描述器&#xff0c;他必须写在最上面) 实际注册的任务是apps.business.tas…

3D视觉引导机器人提升生产线的自动化水平和智能化程度

随着智能化技术的不断发展&#xff0c;汽车制造企业正积极寻求提升智能化水平的途径。富唯智能的3D视觉引导机器人抓取技术为汽车制造企业提供了一种高效、智能的自动化解决方案。 项目目标 某汽车制造企业希望通过引入智能化技术提升生产线的自动化水平和智能化程度。他们希望…

python错题(3)

round四舍五入 title()把单词首字母大写 all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE&#xff0c;如果是返回 True&#xff0c;否则返回 False。 元素除了是 0、空、None、False 外都算 True 。空元组、空列表返回值为True&#xff0c;这里要特…

2023数A题——WLAN网络信道接入机制建模

A题——WLAN网络信道接入机制建模 思路&#xff1a;该题主要考察的WLAN下退避机制建模仿真。 资料获取 问题1&#xff1a; 假设AP发送包的载荷长度为1500Bytes&#xff08;1Bytes 8bits&#xff09;&#xff0c;PHY头时长为13.6μs&#xff0c;MAC头为30Bytes&#xff0c;MA…

是否可以外链代发?

当然是可以的&#xff0c;代发外链是一种有效的提升网站SEO排名和流量的方法。通过在高质量的网站上发布包含你网站链接的内容&#xff0c;可以提高你网站的权重和可信度。而在所有代发外链的方式中&#xff0c;GPB外链无疑是最好的选择。 GPB外链&#xff0c;每一条GPB外链都是…

【UE4】角色御剑飞行的蓝图实现

沉沉更鼓急&#xff0c;渐渐人声绝 吹灯窗更明&#xff0c;月照一天雪 UE4简单的实现御剑飞行的功能 契子✨ 所谓的御剑飞行的原理就跟 《御板》 飞行的原理差不多&#xff0c;不过是在人物脚上插把剑在飞行的时候显示出来罢了。简单来讲就是只要渲染做的足够牛&#xff0c;土鸡…

App上架和推广前的准备

众所周知&#xff0c;App推广的第一步是上架各大应用下载市场&#xff0c;然后才是其他推广渠道。所以本文主要分两部分&#xff0c;第一部分主要介绍的是上架各大应用市场方面的准备&#xff0c;第二部分主要介绍的是其他渠道推广方面的准备。 一、App上架前的准备 1.1 上架…

Servlet基础(续集2)

HttpServletResponse web服务器接收到客户端的http的请求&#xff0c;针对这个请求&#xff0c;分别创建一个代表请求的HttpServletRequest对象&#xff0c;代表响应的一个HttpServletResponse 如果要获取客户端请求过来的参数&#xff1a;找HttpServletRequest如果要给客户端…

【前端面试】二叉树递归模板和题解

递归模板和步骤 递归题目的通用步骤递归模板总结1. 树的遍历&#xff08;DFS&#xff09;2. 二叉树的最大深度3. 二叉树的最近公共祖先 递归题目的记忆技巧 递归题目的通用步骤 明确递归函数的功能&#xff1a;确定递归函数的输入参数和返回值&#xff0c;明确函数的功能。基准…

如何在本地部署ChatTTS? 完美部署 简单几步 cpu gpu cuda

前言 最近,24-05-27号,github上出现了一个新项目,ChatTTS。该项目提供了一个文本转语音(Text To Speech)的开源方案,同时支持中文和英文。在官网的演示视频中,可以看到合成效果高度接近真人。 到目前(06-04)为止,已经有18.3k的star。 那我们就来看看这个模型的基本…