经典权限五张表功能实现

news2024/12/25 12:53:54

文章目录

  • 用户模块(未使用框架)
    • 查询功能
      • 实现步骤
      • 代码
    • 新增功能
      • 实现步骤
      • 代码
    • 修改功能
      • 实现步骤
      • 代码实现
    • 删除功能
      • 实现步骤
      • 代码实现
  • 用户模块会了,其他两个模块与其类似

用户模块(未使用框架)

查询功能

这里将模糊查询和分页查询写在一起
image.png

实现步骤

前端:发起请求
从userList.html中getUserList函数中书写代码
发起异步请求

  1. 请求地址:/user/query
  2. 请求参数:当前页,每页条数,用户名(模糊查询)

后端:接收请求,处理业务,响应

  1. web层接收前端传过来的数据并封装到实体类中,传给业务层,调用业务层中的方法实现,然后封装到result中,并响应给前端
  2. service层是具体写实现处理的逻辑,其中调用数据层的方法
  3. dao层就是对数据库进行查询等

模糊查询的话可以判断前端传过来的用户名是否存在,存在就是模糊查询,不存在就是分页查询
web可以分别书写俩个查询的代码

代码

前端

 //写路径
                let url="/user/findAll";
                //写参数 {currentPage:"this.pagination.pageNum",pageSize:"this.pagination.pageSize"}
                let params=`{currentPage:${this.pagination.pageNum},pageSize:${this.pagination.pageSize},"username":"${this.queryParams.username}"}`;
                //发送请求
                axios.post(url,params)
                     .then(resp=>{
                       // console.log(resp.data);
                       //定义变量接收后端响应的数据
                       let obj=resp.data;
                       //判断是否查询成功
                       if(obj.flag){
                        //查询成功
                        //提示信息
                        this.$message({
                                message: obj.message,
                                type: 'success'
                                });
                        //将查询的用户和角色信息赋值给数据模型中的userList:[]
                        this.userList=obj.result.rows;
                        //将查询的用户表的总记录数赋值给数据模型中的pagination中的total即可以显示分页栏
                        this.pagination.total=obj.result.total;
                       }else{
                        //查询失败
                        this.$message({
                                showClose: true,
                                message: obj.message,
                                type: 'error'
                                });
                       }
                     })

后端web层

 public void findAll(HttpServletRequest request, HttpServletResponse response) {

        //System.out.println("查询所有用户");

        try {
            //1.先根据前端传过来的数据即当前页码和每页条数封装到实体类QueryPageBean对象中
            QueryPageBean pb = BaseController.parseJSON2Object(request, QueryPageBean.class);

            if(pb.getUsername() != null && pb.getUsername() != ""){

                findByName(pb,response);
            }else{
                //调用工厂类来创建对象
                UserService userService = BeansFactory.getInstance("userService");

                //3.使用对象调用方法
                PageResult pr = userService.findAll(pb);
                //4.创建result对象
                Result result = new Result(true, "查询成功", pr);
                //5.将result对象转化成json响应给前端
                BaseController.printResult(response, result);
            }


        } catch (Exception e) {
            //打印到控制台
            e.printStackTrace();
            //6.创建result对象
            Result result = new Result(false, "查询失败");
            //7.将result对象转化成json响应给前端
            try {
                BaseController.printResult(response, result);
            } catch (IOException ex) {
                e.printStackTrace();
            }

        }

    }

    public void findByName(QueryPageBean pb, HttpServletResponse response) {

        try {

            //2.创建业务层对象
            UserService userService = BeansFactory.getInstance("userService");
            //3.调用业务层对象执行方法
            PageResult pr = userService.findByUserName(pb);
            //4.封装到result对象中
            Result result = new Result(true, "根据用户名查询成功", pr);
            //5.返回给前端
            BaseController.printResult(response, result);
        } catch (Exception e) {
            e.printStackTrace();
            try {
                //6.封装到result对象中
                Result result = new Result(false, "根据用户名查询失败");
                //7.返回给前端
                BaseController.printResult(response, result);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

后端service

 public PageResult findAll(QueryPageBean pageBean) {
        //1.获取mybatis会话对象
        SqlSession session = SqlSessionUtil.getSession();

        //2.获取接口代理对象
        UserMapper mapper = session.getMapper(UserMapper.class);

        //3.使用接口代理对象调用接口中分页查询的用户方法
        //select * from 表名 limit 起始索引,每页条数
        //调用方法获取起始索引
        Integer startIndex = pageBean.getOffset();
        //调用方法获取每页条数
        Integer pageSize = pageBean.getPageSize();
        List<User> list = mapper.findAll(startIndex,pageSize);

        //4.使用接口代理对象调用接口方法获取总记录数
        Long total = mapper.findCount();

        //5.对获取到的总记录数和用户封装到pageresult中
        PageResult pageResult = new PageResult(total, list);

        //6.关闭会话
        session.close();

        //7.将pageresult对象返回给web层
        return pageResult;
    }

    
public PageResult findByUserName(QueryPageBean pageBean) {
        //1.创建会话层对象
        SqlSession session = SqlSessionUtil.getSession();
        //2.创建会话层代理对象
        UserMapper mapper = session.getMapper(UserMapper.class);
        //获取参数
        Integer startIndex = pageBean.getOffset();
        Integer pageSize = pageBean.getPageSize();
        String username = pageBean.getUsername();
        //3.调用会话层代理对象执行方法
        List<User> list = mapper.findByName(username,startIndex,pageSize);
        //4.调用会话层代理对象执行方法
        Long total = mapper.findCountName(username);
        //5.创建pageResult对象
        PageResult pr = new PageResult(total,list);
        //4.关闭会话
        session.close();
        //5.返回给web层
        return pr;
    }

新增功能

image.png

实现步骤

前端
在handleCreateConfirm函数中书写代码
发起请求,请求地址:/user/add,请求参数:addUser
后端

  1. web层先进行接收前端的数据,然后分装到实体类中,传给业务层,调用业务层的方法
  2. service层书写实现逻辑,先对用户进行新增,然后在用户中间表中进行新增(用户id利用主键回填)。这其中都是调用数据层的方法
  3. dao层就是利用方法来对数据库进行访问,书写对于的sql语句

先对用户进行新增,然后再增加中间表的数据

代码

前端

 let url = "/user/add";
                        //发送请求
                        axios.post(url,this.addUser)
                             .then(resp=>{
                                //console.log(resp.data);
                                //定义一个变量
                                let obj = resp.data;
                                //判断是否成功
                                if(obj.flag){
                                    this.$message({
                                        message: obj.message,
                                        type: 'success'
                                        });
                                }else{
                                    this.$message.error(obj.message);
                                }
                             })
                        
                        //设置弹窗关闭
                        this.dialogUptFormVisible = false;
                        this.getUserList();
                    }
                });

后端service

   //1.创建会话层对象
        SqlSession session = SqlSessionUtil.getSession();
        //2.创建会话层代理对象
        UserMapper mapper = session.getMapper(UserMapper.class);
        //3.调用mapper层中的方法新增用户
        mapper.add(addUser);
        //4.调用mapper层的方法在用户角色中间表
        mapper.addUserRole(addUser.getId(), addUser.getRoleIds());
        //4.关闭会话
        session.close();

修改功能

image.png

实现步骤

前端
发送异步请求,请求地址:/user/update 请求参数:updateUser
后端

  1. web接收数据分装到对于的类中,传到业务层,调用业务层方法来实现,封装到result中返回给前端
  2. service层就是先修改用户表中的数据,然后删除修改用户对应的中间表的内容,然后再添加修改后的角色到中间表中
  3. dao层就是执行上述service层的代码

代码实现

前端

  //定义url
                        let url = "/user/update";
                        //发送请求
                        axios.post(url,this.updateUser)
                             .then(resp=>{
                                //console.log(resp.data);
                                //定义变量接收数据
                                let obj = resp.data;
                                //判断是否修改成功
                                if(obj.flag){
                                    //修改成功
                                    //提示信息
                                    this.$message({
                                        message: obj.message,
                                        type: 'success'
                                        });
                                    this.updateUser=obj.result;
                                }else{
                                    //修改失败
                                    this.$message.error(obj.message);
                                }
                             }).finally(()=>{
                            this.getUserList()
                        })
                    
                    }
                });

后端service

 public void updateUser(UpdateUser updateUser) {
        //1.获取会话层
        SqlSession session = SqlSessionUtil.getSession();
        //2.获取会话层代理对象
        UserMapper mapper = session.getMapper(UserMapper.class);
        //3.调用方法来更新用户
        mapper.update(updateUser);
        //4.删除用户角色中间表中用户对应的id
        mapper.deleteUserRole(updateUser.getId());
        //5.新增用户修改后的用户角色中间表的角色
        mapper.addUserRole(updateUser.getId(), updateUser.getRoleIds());
        //6.释放资源
        session.close();

    }

删除功能

实现步骤

前端
发送异步请求 请求地址:/user/delete 请求参数:id
后端

  1. web层固定套路:接收参数,调用业务层方法,将参数传给业务层,将调用方法的结果封装到result中,返回给前端
  2. sercive层主要写实现逻辑:先删除中间表的对于用户的数据,然后再删除用户;根据逻辑调用dao层的方法
  3. dao层书写对象的sql语句进行实现

代码实现

前端

  let url = "/user/delete";
                    //书写参数
                    let params = `id=${row.id}`;
                    //发送请求
                    axios.post(url,params)
                         .then(resp=>{
                            let obj = resp.data;
                            if(obj.flag){
                                this.$message({
                                        message: obj.message,
                                        type: 'success'
                                        });
                            
                            }else{
                                this.$message.error(obj.message);
                            }
                         }).finally(()=>{
                            this.getUserList();
                        })
                }).catch(() => {
                    this.$message.info('已取消操作!')
                });

后端service层

//1.创建会话层对象
        SqlSession session = SqlSessionUtil.getSession();
        //2.创建会话层代理对象
        UserMapper mapper = session.getMapper(UserMapper.class);
        //3.调用代理对象执行方法删除从表中的数据
        mapper.deleteUserRole(id);
        //4.调用代理对象执行方法删除主表的数据
        mapper.delete(id);
        //5.释放资源
        session.close();

先书写sql代码,然后根据sql代码和产品原型确定前端的请求参数、还有后端的实体类的书写,然后前端书写发送请求代码,后端web层接收,service层书写逻辑,dao层进行数据的访问等

用户模块会了,其他两个模块与其类似

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

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

相关文章

Linux下安装gmp6.2.1的详细操作(深度学习)

方式一&#xff1a;编译gmp GMP官方地址https://gmplib.org/ 1. 官网下载gmp安装包 2. 解压下载好的安装包 tar -zxvf gmp-6.2.1.tar.bz2 3. 进入解压后的文件夹 cd gmp-6.2.1 4. 指定安装路径进行安装 # /usr/local换成自己的安装路径 ./configure --prefix/usr/local 5. 编…

Excel快速填充序号的方法

Excel快速填充序号常用的方法。 方法一&#xff1a;填充前面序号后拖拽 特点&#xff1a; 能有规律的填充&#xff0c;排序的行数由拖拽的行数决定。 此方法填充的序号等效于手打的序号&#xff0c;删除一行后下一行不会自动更新排序。 步骤&#xff1a;输入两个初始序号&…

org.springframework.jdbc.BadSqlGrammarException

Cause: java.sql.SQLSyntaxErrorException: Table ‘web.emp’ doesn’t exist 产生原因&#xff1a;web表找不到&#xff0c;所以可能数据库配置错误 spring.datasource.urljdbc:mysql://localhost:3306/web02 更改完成后运行成功

windows@注册表介绍@注册表的查看和编辑操作

文章目录 abstractrefs注册表的主要组件包括根键极其缩写名称&#x1f47a;子键特性 查看注册表&#x1f47a;使用powershell查看路径下的子路径声明概念Get-ChildItem查看注册表路径下的项Set-Location进入注册表路径举例说明查看文件系统某个路径下的项查看某个注册表路径的项…

系统分析师论文——论软件需求分析方法和工具的选用

现已临近2024年软考&#xff0c;周围一些报名参加系统分析师考试的“小伙伴”还未准备论文&#xff0c;我分享早年写的一些内容&#xff08;包括参加继续教育准备的论文&#xff09;&#xff0c;仅供大家结合最新考纲要求酌情参考&#xff0c;希望予人玫瑰&#xff0c;手有余香…

【CTF MISC】XCTF GFSJ0513 pdf Writeup(PDF隐写)

pdf 菜猫给了菜狗一张图&#xff0c;说图下面什么都没有 解法 打开 pdf&#xff0c;只看见一张图片。 用浏览器搜索 flag&#xff0c;发现图片中间藏了一行字。 复制出来&#xff0c;得到 flag。 Flag flag{security_through_obscurity}声明 本博客上发布的所有关于网络攻…

Arduino-ILI9341驱动开发TFT屏显示任意内容三

Arduino-ILI9341驱动开发TFT屏显示任意内容三 1.概述 这篇文章介绍使用ILI9341驱动提供的函数控制TFT屏显示字符串、图形、符号等等内容的编辑和展示。 2.硬件 2.1.硬件列表 名称数量Arduino Uno12.8" TFT彩色液晶触摸屏模块&#xff08;ILI9431&#xff09;110K 电阻…

从JSON数据到Pandas DataFrame:如何解析出所需字段

目录 一、引言 二、JSON数据的基本结构 三、使用Pandas从JSON数据中读取数据 四、从DataFrame中解析出所需字段 解析对象字段 解析嵌套对象字段 解析数组字段 五、案例与代码示例 六、总结 一、引言 在数据分析和处理的日常工作中&#xff0c;我们经常需要从各种…

基于单片机的空气质量检测系统设计(51+4G版)-设计说明书

设计摘要&#xff1a; 本设计是基于单片机的空气质量检测系统设计涉及以下主要功能&#xff0c;旨在监测甲烷和一氧化碳的浓度&#xff0c;并在浓度过高时采取相应措施&#xff0c;以确保室内空气质量的安全。该系统使用传感器对甲烷和一氧化碳的浓度进行检测。传感器将收集到…

大数据Scala教程从入门到精通第七篇:Scala在IDEA中编写Hello World

一&#xff1a;Scala在IDEA中编写Hello World 想让我们的idea支持scala的编写&#xff0c;需要安装一个插件。

kdb 调试内核-延迟驱动加载

说明: 系统在启动过程中&#xff0c;一些要调试的驱动在 "进入kdb 之前" 就已经加载了&#xff0c; 那么&#xff0c;我们就需要延迟 "加载驱动" #define XX_module_platform_driver(__platform_driver) \XX_module_driver(__platform_driver, platform_d…

以太ETH链市值机器人

在数字资产交易市场的浪潮中&#xff0c;如何高效地管理市值、提升交易流动性并保障资金安全&#xff0c;一直是交易所和项目方关注的焦点。市值管理机器人飞机//aishutuyu以太ETH链市值机器人凭借其卓越的功能和强大的安全保障&#xff0c;为数字资产交易市场带来了革命性的变…

python视频转码脚本

今天有一个临时的需求&#xff0c;就是需要将一个wmv的初步转码成mp4的格式。找了一圈&#xff0c;免费的工具少&#xff0c;即使有免费的工具&#xff0c;在功能上也是有所限制&#xff0c;或者会给你塞广告或者附带安装其它流氓小游戏或者杀毒程序。 我并非不支持正版&#…

矩阵稀疏扫描 - 矩阵

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、Java代码五、测试用例提示 前言 本人最近再练习算法&#xff0c;所以会发布一些解题思路&#xff0c;希望大家多指教 一、题目描述 如果矩阵中的许多系数都为零&#xff0c;那么该矩阵就是稀…

【Spring】初识 Spring AOP(面向切面编程)

目录 1、介绍AOP 1.1、AOP的定义 1.2、AOP的作用 1.3、AOP的核心概念及术语 2、AOP实现示例 3、EnableAspectJAutoProxy注解 1、介绍AOP 1.1、AOP的定义 AOP&#xff08;Aspect Orient Programming&#xff09;&#xff0c;直译过来就是面向切面编程&#xff0c;AOP 是一…

windows使用Docker-Desktop部署lobe-chat

文章目录 window安装docker-desktop下载和启动lobe-chatAI大语言模型的选择lobe-chat设置大模型连接 window安装docker-desktop docker-desktop下载地址 正常安装应用&#xff0c;然后启动应用&#xff0c;注意启动docker引擎 打开右上角的设置&#xff0c;进入Docker Engine设…

wangEditor富文本编辑器与layui图片上传

记录&#xff1a;js 显示默认的wangEditor富文本编辑器内容和图片 <style>body {background-color: #ffffff;}.layui-form-select dl{z-index:100000;} </style> <div class"layui-form layuimini-form"><div class"layui-form-item"…

【IC前端虚拟项目】验证环境env与base_teat思路与编写

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 上一篇里解决了最难搞的axi_ram_model,接下来呢就会简单又常规一些了,比如这一篇要说的env和base_test的搭建。在这里我用了gen_uvm_tb脚本: 【前端验证】验证自动化脚本的最后一块拼图补全——gen_t…

一个全栈SpringBoot项目-Book Social Network

一个全栈SpringBoot项目-Book Social Network BSN是一个会员之间交换图书的社交网络平台。图书社交网络是一个全栈应用程序&#xff0c;使用户能够管理他们的图书收藏并与图书爱好者社区互动。它提供的功能包括用户注册、安全电子邮件验证、图书管理&#xff08;包括创建、更新…

使用SPI驱动串行LCD的驱动实现(STM32F4)

目录 概述 1. 硬件介绍 1.1 ST7796-LCD 1.2 MCU IO与LCD PIN对应关系 2 功能实现 2.1 使用STM32Cube配置Project 2.2 STM32Cube生成工程 3 代码实现 3.1 SPI接口实现 3.2 LCD驱动程序实现 3.3 测试程序实现 4 测试 源代码下载地址&#xff1a; https://gitee.com/mf…