云尚办公-0.1.0

二、用户管理接口

1. 建表

角色与用户是多对多的关系,所以除了角色表和用户表外,还需要第三张表表示这两者间的对应关系。关系表中的用户id和角色id分别以对应表中的id作为外键。
在这里插入图片描述

CREATE TABLE `sys_user` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '会员id',
  `username` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '用户名',
  `password` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '密码',
  `name` VARCHAR(50) DEFAULT NULL COMMENT '姓名',
  `phone` VARCHAR(11) DEFAULT NULL COMMENT '手机',
  `head_url` VARCHAR(200) DEFAULT NULL COMMENT '头像地址',
  `dept_id` BIGINT(20) DEFAULT NULL COMMENT '部门id',
  `post_id` BIGINT(20) DEFAULT NULL COMMENT '岗位id',
  `open_id` VARCHAR(255) DEFAULT NULL COMMENT '微信openId',
  `description` VARCHAR(255) DEFAULT NULL COMMENT '描述',
  `status` TINYINT(3) DEFAULT NULL COMMENT '状态(1:正常 0:停用)',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '删除标记(0:不可用 1:可用)',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_username` (`username`)
) ENGINE=INNODB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

在这里插入图片描述

CREATE TABLE `sys_user_role` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `role_id` BIGINT(20) NOT NULL DEFAULT '0' COMMENT '角色id',
  `user_id` BIGINT(20) NOT NULL DEFAULT '0' COMMENT '用户id',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '删除标记(0:不可用 1:可用)',
  PRIMARY KEY (`id`),
  KEY `idx_role_id` (`role_id`),
  KEY `idx_admin_id` (`user_id`)
) ENGINE=INNODB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='用户角色';

在这里插入图片描述

2. MyBatisPlus的代码生成器

在common模块中引入代码生成器的依赖:

	<dependency>
		<groupId>com.baomidou</groupId>
		<artifactId>mybatis-plus-generator</artifactId>
		<version>3.4.1</version>
	</dependency>

	<dependency>
		<groupId>org.apache.velocity</groupId>
		<artifactId>velocity-engine-core</artifactId>
		<version>2.0</version>
	</dependency>

接着创建一个测试类,输入以下内容:

package pers.beiluo.yunshangoffice;


import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class CodeGet {

    public static void main(String[] args) {

        // 1、创建代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 2、全局配置
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        
        //在下面写上文件在自己系统中的目录
        gc.setOutputDir("D:\\Users\\Administrator\\Desktop\\guigu-oa\\guigu-oa-parent\\service-oa"+"/src/main/java");

        gc.setServiceName("%sService");	//去掉Service接口的首字母I
        gc.setAuthor("beiluo");//设置作者
        gc.setOpen(false);
        mpg.setGlobalConfig(gc);

        // 3、数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        //以下是数据库配置,写上自己的配置
        dsc.setUrl("jdbc:mysql://localhost:3306/guigu-oa?serverTimezone=GMT%2B8&useSSL=false");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);

        // 4、包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("");
        pc.setModuleName("auth"); //模块名
        pc.setController("controller");
        pc.setService("service");
        pc.setMapper("mapper");
        mpg.setPackageInfo(pc);

        // 5、策略配置
        StrategyConfig strategy = new StrategyConfig();

        strategy.setInclude("sys_user");

        strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略

        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
        strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作

        strategy.setRestControllerStyle(true); //restful api风格控制器
        strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符

        mpg.setStrategy(strategy);

        // 6、执行
        mpg.execute();
    }
}

设置包名等时可以参考源代码给的默认值:在这里插入图片描述
运行CodeGet,即可生成代码。要注意,如果使用的是Mysql8.0版本,可能会报错:Public Key Retrieval is not allowed,解决方法是:将url改为:dsc.setUrl("jdbc:mysql://localhost:3306/yunshangoffice?allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8&useSSL=false");
生成的代码中有实体类,将它删掉并在model模块中创建SysUser类,生成的xml文件删掉即可,在生成的类上加上相应的注解。

//SysUser类
package pers.beiluo.yunshangoffice.model.system;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import pers.beiluo.yunshangoffice.model.base.BaseEntity;
import java.util.List;

@Data
@ApiModel(description = "用户")
@TableName("sys_user")
public class SysUser extends BaseEntity {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "用户名")
    @TableField("username")
    private String username;

    @ApiModelProperty(value = "密码")
    @TableField("password")
    private String password;

    @ApiModelProperty(value = "姓名")
    @TableField("name")
    private String name;

    @ApiModelProperty(value = "手机")
    @TableField("phone")
    private String phone;

    @ApiModelProperty(value = "头像地址")
    @TableField("head_url")
    private String headUrl;

    @ApiModelProperty(value = "部门id")
    @TableField("dept_id")
    private Long deptId;

    @ApiModelProperty(value = "岗位id")
    @TableField("post_id")
    private Long postId;

    @ApiModelProperty(value = "描述")
    @TableField("description")
    private String description;

    @ApiModelProperty(value = "openId")
    @TableField("open_id")
    private String openId;

    @ApiModelProperty(value = "状态(1:正常 0:停用)")
    @TableField("status")
    private Integer status;

    @TableField(exist = false)
    private List<SysRole> roleList;
    //岗位
    @TableField(exist = false)
    private String postName;
    //部门
    @TableField(exist = false)
    private String deptName;
}

完成上述工作后,开始编写控制器方法。

3. 控制器方法

创建SysUserController类:

package pers.beiluo.yunshangoffice.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.logging.log4j.message.ReusableMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import pers.beiluo.yunshangoffice.common.result.Result;
import pers.beiluo.yunshangoffice.model.system.SysUser;
import pers.beiluo.yunshangoffice.service.SysUserService;
import pers.beiluo.yunshangoffice.vo.SysUserQueryVo;

import java.util.List;

/**
 * <p>
 * 用户表 前端控制器
 * </p>
 *
 * @author beiluo
 * @since 2024-02-27
 */
@Api(tags = "用户管理")
@RestController
@RequestMapping("/admin/system/sysUser")
public class SysUserController {

    //注入service
    @Autowired
    private SysUserService sysUserService;
}

3.1 条件分页查询

首先创建条件对象:

package pers.beiluo.yunshangoffice.vo;


import lombok.Data;

import java.io.Serializable;

/**
 * <p>
 * 用户查询实体
 * </p>
 */
@Data
public class SysUserQueryVo implements Serializable {

    private static final long serialVersionUID = 1L;

    private String keyword;

    private String createTimeBegin;
    private String createTimeEnd;

    private Long roleId;
    private Long postId;
    private Long deptId;

}

编写方法:

    //分页查询
    @ApiOperation("分页查询")
    @GetMapping("/{page}/{limit}")
    public Result pageQueryUser(@PathVariable Long page,
                                @PathVariable Long limit,
                                SysUserQueryVo sysUserQueryVo){
        //创建page对象
        Page<SysUser> sysUserPage = new Page<>(page, limit);
        //创建wrapper对象
        LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();

        String keyword = sysUserQueryVo.getKeyword();
        //起始时间条件
        String createTimeBegin = sysUserQueryVo.getCreateTimeBegin();
        String createTimeEnd = sysUserQueryVo.getCreateTimeEnd();
        //封装条件
        if(StringUtils.isEmpty(keyword)){
            sysUserLambdaQueryWrapper.like(SysUser::getUsername,keyword);
        }
        if(StringUtils.isEmpty(createTimeBegin)){
            sysUserLambdaQueryWrapper.ge(SysUser::getCreateTime,createTimeBegin);
        }
        if(StringUtils.isEmpty(createTimeEnd)){
            sysUserLambdaQueryWrapper.le(SysUser::getCreateTime,createTimeEnd);
        }
        //查询
        return Result.ok(sysUserService.page(sysUserPage, sysUserLambdaQueryWrapper));
    }

在这里插入图片描述

3.2 根据id获取用户

    //根据id获取用户
    @ApiOperation("根据id获取用户")
    @GetMapping("/get/{id}")
    public Result getUserById(@PathVariable("id") Long id){
        SysUser byId = sysUserService.getById(id);
        return Result.ok(byId);
    }

在这里插入图片描述

3.3 添加用户

    //添加用户
    @ApiOperation("添加用户")
    @PostMapping("/save")
    public Result save(@RequestBody SysUser sysUser){
        boolean save = sysUserService.save(sysUser);
        if(save){
            return Result.ok();
        }else{
            return Result.fail();
        }
    }

在这里插入图片描述
在这里插入图片描述

3.4 修改用户

    //根据id修改用户信息
    @ApiOperation("根据id修改用户")
    @PostMapping("/update")
    public Result updateUserById(@RequestBody SysUser sysUser){
        boolean b = sysUserService.updateById(sysUser);
        if(b){
            return Result.ok();
        }else{
            return Result.fail();
        }
    }

在这里插入图片描述

3.5 删除用户

    //删除用户
    @ApiOperation("根据id删除用户")
    @GetMapping("/remove/{id}")
    public Result removeUserById(@PathVariable Long id){
        boolean b = sysUserService.removeById(id);
        if(b){
            return Result.ok();
        }else{
            return Result.fail();
        }
    }

在这里插入图片描述

3.6 批量删除用户

    //批量删除
    @ApiOperation("批量删除")
    @PostMapping("/batchRemove")
    public Result batchRemoveUser(@RequestBody List<Long> list){
        boolean b = sysUserService.removeByIds(list);
        if(b){
            return Result.ok();
        }else{
            return Result.fail();
        }
    }

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Vue3切换路由白屏刷新后才显示页面内容

1.首先检查页面路由以及页面路径配置是否配置错误。 在router-view 中给路由添加key标识。 &#xff01;&#xff01;注意&#xff1a;有使用layout封装布局的&#xff0c;是在layout下的主页面中的 router-view 添加标识&#xff0c;不是在src根目录下main.vue中修改&#xf…

[云原生] K8s之pod进阶

一、pod的状态说明 &#xff08;1&#xff09;Pod 一直处于Pending状态 Pending状态意味着Pod的YAML文件已经提交给Kubernetes&#xff0c;API对象已经被创建并保存在Etcd当中。但是&#xff0c;这个Pod里有些容器因为某种原因而不能被顺利创建。比如&#xff0c;调度不成功(…

【rust】11、所有权

文章目录 一、背景二、Stack 和 Heap2.1 Stack2.2 Heap2.3 性能区别2.4 所有权和堆栈 三、所有权原则3.1 变量作用域3.2 String 类型示例 四、变量绑定背后的数据交互4.1 所有权转移4.1.1 基本类型: 拷贝, 不转移所有权4.1.2 分配在 Heap 的类型: 转移所有权 4.2 Clone(深拷贝)…

linux系统Jenkins的安装

Jenkins安装 安装上传安装包解压包首次登录要去服务器查看密码&#xff0c;更改密码选择需要安装的插件设置Admin用户和密码安装完成 安装 上传安装包 上传 jdk17 tomcat jenkins.war的安装包 . 上传 tomcat安装包解压包 解压jdk tar xf jdk-11.0.18_linux-x64_bin.tar.gz解…

甲级!亚信安全再次荣膺CNCERT国家级网络安全应急服务支撑单位称号

再获认可 近日&#xff0c;国家计算机网络应急技术处理协调中心&#xff08;CNCERT&#xff09;正式公布第十届CNCERT网络安全应急服务支撑单位遴选结果&#xff0c;亚信安全凭借创新技术实力&#xff0c;以及重大突发网络安全事件的应对能力&#xff0c;再次荣获CNCERT甲级网…

AI新秀Mistral:“Open AI“ 新时代

最近互联网出现不少类似“下一代openai”、“GPT-4最强竞品”、“法国AI独角兽”、“欧洲的OpenAI”、“微软新宠儿”.... 的文章&#xff0c;都会附带一张图片&#xff0c;就是下面这张&#xff1a; 那么到底发生了什么&#xff0c;出来个什么东西呢&#xff1f;就是本文的主…

深入英伟达盈利中心,反思一个正被“忽视”的Web3.0赛道

出品&#xff5c;欧科云链研究院 作者&#xff5c;Hedy Bi 最近&#xff0c;英伟达&#xff08;Nvidia&#xff09;发布了2023年第四季度财报&#xff0c;超出了华尔街预期&#xff0c;并在美国股市的延时交易中表现出色。欧科云链研究院通过分析英伟达的财报&#xff0c;我们…

前端架构: 脚手架包管理工具之lerna的全流程开发教程

Lerna 1 &#xff09;文档 Lerna 文档 https://www.npmjs.com/package/lernahttps://lerna.js.org [请直达这个链接] 使用 Lerna 帮助我们做包管理&#xff0c;并不复杂&#xff0c;中间常用的命令并不是很多这里是命令直达&#xff1a;https://lerna.js.org/docs/api-referen…

Unity 佳能SDK 及数据获取

1. 填写信息跟官方申请SDK,大概1-2个工作日会邮件回复你 佳能(中国)- 佳定制(佳能影像产品),SDK,EDSDK,CCAPI,软件开发包下载 2. 将SDK这两个文件放到 Unity Plugins文件夹 3. 把CameraControl 下面只要是绿色的 .cs 文件都复制到Unity 中

新闻网站封锁AI爬虫 AI与新闻媒体博弈继续

随着ChatGPT等新兴AI模型的兴起&#xff0c;它们所依赖的网络爬虫正面临来自全球主流新闻网站的大规模封锁。Richard Fletcher博士团队对十个国家主流新闻网站的统计发现&#xff0c;到2023年底&#xff0c;48%的网站屏蔽了OpenAI的爬虫&#xff0c;24%屏蔽了Google的爬虫。那么…

浅析前端的堆栈原理以及深浅拷贝原理

浅析前端的堆栈原理以及深浅拷贝原理 首先来看一个案例 const obj {name:hzw,age:18 } let objName2 obj objName2.age 12 console.log(obj,objName2) // {name: hzw, age: 12} {name: hzw, age: 12}这里是不是很奇怪&#xff0c;为什么&#xff0c;为什么我改变objName2的…

type may not be empty [type-empty]

Git提交失败原因分析 原因是使用了规范commit信息的工具&#xff0c;你的提交信息不符合规范&#xff0c;所以被拒绝了 commit规范工具 commitlinthusky 我这个项目使用husky&#xff0c;提交规范比较严格。 解决方式一&#xff1a; 修改提交信息&#xff0c; 使其符合规范…

代码里没有报错,但是java编译报错找不到符号

问题分析&#xff1a; 最近在尝试maven编译&#xff0c;所以不小心点了mvn clean的命令&#xff0c;将之前编译的工程清除了&#xff0c;导致后边再编译项目上的时候就报了一堆错误。代码没问题&#xff0c;但编译不通过&#xff0c;报找不到符号的错误&#xff0c;搜了下这样解…

Windows安装VNC连接工具并结合cpolar实现远程内网Ubuntu系统桌面

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

Linux测试端口开放

Linux测试端口开放 Linux测试端口是否开放有多种命令&#xff0c;如nc、telnet、ssh、curl、wget nc nc&#xff08;netcat&#xff09;可用于创建 TCP 或 UDP 连接、扫描端口、传输文件等 扫描指定端口&#xff1a; nc -zv ip port-z 使用0输入/输出模式&#xff0c;只在…

【C#】SixLabors.ImageSharp和System.Drawing两者知多少

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

Docker数据集与自定义镜像:构建高效容器的关键要素

目录 博客前言 一.数据卷 1.数据卷介绍 2.实战 宿主机和容器共享目录 容器和容器之间共享目录 二.自定义镜像 1.自定义镜像介绍 2.实战 2.1自定义centos&#xff0c;具备vim及ifconfig作用 构建镜像 通过镜像运行一个容器进行测试 2.2自定义tomact&#xff08;文件为…

云桥通+IDC数据中心:SDWAN企业组网实现高效连接案例

一、需求和背景 云桥通曾服务的一家大型跨国企业C公司&#xff0c;C公司多个数据中心分布在全球各地。为了实现数据共享和协作&#xff0c;数据中心之间需要建立稳定高效的网络连接。然而&#xff0c;传统的MPLS专线网络存在昂贵的成本和漫长的开通周期&#xff0c;无法满足企…

轻松获取邀请奖励,提升用户参与度——xinstall免填邀请码功能实战

随着移动互联网的迅猛发展&#xff0c;App推广已成为各大企业争夺市场份额的重要手段。然而&#xff0c;在推广过程中&#xff0c;如何让用户更便捷地参与活动、绑定关系并获取奖励&#xff0c;一直是困扰企业的难题。今天&#xff0c;我们就来聊聊如何通过xinstall的免填邀请码…

初体验通义灵码-JS篇

安装 我是JetBrains IDEs的付费忠粉&#xff0c;使用的他们家的全家桶&#xff0c;故先选择在Webstorm安装通义灵码 按通义灵码的官方指引安装即可&#xff1a;https://tongyi.aliyun.com/lingma/download 使用 安装后重启webstorm&#xff0c;IED左右下会有通义灵码的登录…