经典权限五张表功能实现

文章目录

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

用户模块(未使用框架)

查询功能

这里将模糊查询和分页查询写在一起
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层进行数据的访问等

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

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

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

相关文章

泵站远程监控

在科技日新月异的今天&#xff0c;智能化管理已经成为各行业提升效率、降低成本的关键手段。特别是在水利领域&#xff0c;泵站作为水资源调配的重要节点&#xff0c;其运行效率和安全稳定性直接关系到整个供水系统的稳定。HiWoo Cloud平台凭借其强大的物联网和云计算技术&…

两重惊喜!奥特曼预告GPT-4和ChatGPT重大更新,Open AI要放大招

OpenAI在今天官宣13日&#xff08;下周一10点&#xff09;开启线上直播&#xff0c;将会展示全新的ChatGPT demo的演示以及GPT-4的重大更新&#xff01; OpenAI首席执行官Sam Altman在X上表示&#xff0c;这些的发布会&#xff0c;公司不会宣布下一代对话式人工智能GPT-5或人工…

游戏安全干货报告干货下载 |《2023年度游戏安全观察与实践报告》

AIGC浪潮从大洋彼岸袭来&#xff0c;使得全球资本市场看好AIGC将对游戏行业“成本”与“效率”带来革命性的变化&#xff1b;年末&#xff0c;国家新闻出版署一次性批准了105款国产游戏版号&#xff0c;为历史之最&#xff1b;全年亦有不少“某某大厂裁撤游戏业务”、“某某游戏…

C语言写扫雷游戏(数组和函数实践)

目录 最后是代码啦&#xff01; 手把手教你用C语言写一个扫雷游戏&#xff01; 1.我们搭建一下这个多文件形式的扫雷游戏文件结构 2.在主函数里面设置一个包含游戏框架的菜单 菜单可以方便游戏玩家选择要进行的动作和不断地进行下一局。 3.switch语句连接不同的结果 菜单可…

C++实现一个简单的控制cpu利用率的程序

写一个程序&#xff0c;让控制cpu利用率在20%左右 思路很简单&#xff1a;每个循环控制sleep的时间占比 #include <iostream> #include <chrono> #include <unistd.h>int main() {int ratio 20;int base_time 1000;int sleeptime base_time * (100-ratio…

信息系统架构模型_3.企业数据交换总线

1.企业数据交换总线 实践中&#xff0c;还有一种较常用的架构&#xff0c;即企业数据交换总线&#xff0c;即不同的企业应用之间进行信息交换的公共通道&#xff0c;如图1所示。 图1 企业数据交换总线架构 这种架构在大型企业不同应用系统进行信息交换时使用较普遍&am…

uniapp管理后台编写,基于uniadmin和vue3实现uniapp小程序的管理后台

一&#xff0c;创建uniAdmin项目 打开开发者工具Hbuilder,然后点击左上角的文件&#xff0c;点新建&#xff0c;点项目。如下图。 选择uniadmin&#xff0c;编写项目名&#xff0c;然后使用vue3 记得选用阿里云服务器&#xff0c;因为最便宜 点击创建&#xff0c;等待项目创…

2024年4月12日饿了么春招实习试题【第三题】-题目+题解+在线评测,2024.4.12,饿了么机试【Kruskal 算法, 最小生成树】

2024年4月12日饿了么春招实习试题【第三题】-题目题解在线评测&#xff0c;2024.4.12&#xff0c;饿了么机试 &#x1f3e9;题目一描述&#xff1a;样例1样例2解题思路一&#xff1a;[Kruskal 算法](https://baike.baidu.com/item/%E5%85%8B%E9%B2%81%E6%96%AF%E5%8D%A1%E5%B0%…

牛客网Java实战项目--仿牛客网社区的学习笔记

仿牛客网社区的学习笔记 1. 项目环境搭建1.1 开发社区首页 2.开发社区登录模块2.1 发送邮件2.2 开发注册功能2.3 会话管理2.4 生成验证码2.5 开发登录、退出功能2.6 显示登录信息 4 Redis实现点赞关注4.1 Spring整合Redis访问Redis的方法&#xff1a; 4.2 Redis实现点赞4.2.1 点…

Git系列:git merge 使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Redis基础面试知识点(1)

相比于C字符串&#xff0c;SDS的优势&#xff1a; O(1)获取字符串的长度不会缓冲区溢出减少修改字符串时所需的内存重新分配的次数&#xff08;空间预分配、惰性空间释放&#xff09;二进制API安全&#xff08;通过len获取长度&#xff09;兼容部分C字符串函数 Redis hash策略…

SpringAMQP Work Queue 工作队列

消息模型: 代码模拟: 相较于之前的基础队列&#xff0c;该队列新增了消费者 不再是一个&#xff0c;所以我们通过代码模拟出两个consumer消费者。在原来的消费者类里写两个方法 其中消费者1效率高 消费者2效率低 RabbitListener(queues "simple.queue")public voi…

机器学习算法应用——CART决策树

CART决策树&#xff08;4-2&#xff09; CART&#xff08;Classification and Regression Trees&#xff09;决策树是一种常用的机器学习算法&#xff0c;它既可以用于分类问题&#xff0c;也可以用于回归问题。CART决策树的主要原理是通过递归地将数据集划分为两个子集来构建决…

【nodejs 命令行交互神器 - inquirer.js】

需求 大家在开发时&#xff0c;有时需要从命令行读取用户的输入&#xff0c;或者让用户选择。在nodejs中&#xff0c;这个怎么实现? 原生实现 ❌ process.stdin.setEncoding(utf8);process.stdin.on(readable, () > {let chunk;// 使用循环确保我们读取所有的可用输入wh…

【C++算法】队列相关经典算法题

1. N叉树的层序遍历 首先我们遇到这个题目&#xff0c;没有任何思路&#xff0c;我们就可以来模拟一下层序的流程&#xff0c;首先我们肯定是访问根节点1&#xff0c;访问之后呢就是访问下一层的最左节点3&#xff0c;此时第一层的节点1已经访问过了就可以不要了&#xff0c;然…

词令蚂蚁新村今日答案:微信小程序怎么查看蚂蚁新村今天问题的正确答案?

微信小程序怎么查看蚂蚁新村今天问题的正确答案&#xff1f; 1、打开微信&#xff0c;点击搜索框&#xff1b; 2、打开搜索页面&#xff0c;选择小程序搜索&#xff1b; 3、在搜索框&#xff0c;输入词令搜索点击进入词令微信小程序&#xff1b; 4、打开词令微信小程序关键词口…

每日10亿数据的日志分析系统OOM

背景 一个每日10亿数据的日志清洗系统&#xff0c;主要工作就是从消息队列中消费各种各样的日志&#xff0c;然后对日志进行清洗&#xff0c;例如&#xff1a;用户敏感信息(姓名、手机号、身份证)进行脱敏处理,然后把清理完的数据交付给其他系统使用。 我们项目中&#xff0c;…

设计模式2——原则篇:依赖倒转原则、单一职责原则、合成|聚合复用原则、开放-封闭原则、迪米特法则、里氏代换原则

设计模式2——设计原则篇 目录 一、依赖倒转原则 二、单一职责原则&#xff08;SRP&#xff09; 三、合成|聚合复用原则&#xff08;CARP&#xff09; 四、开放-封闭原则 五、迪米特法则&#xff08;LoD&#xff09; 六、里氏代换原则 七、接口隔离原则 八、总结 一、依赖…

《2024年AI安全报告》:AIML工具使用量飙升594.82%

人工智能&#xff08;AI&#xff09;不仅仅是一种开拓性的创新技术&#xff0c;甚至已经成为一种常态&#xff0c;企业正在工程、IT营销、财务、客户服务等领域迅速采用AI和机器学习&#xff08;ML&#xff09;工具。但与此同时&#xff0c;他们必须平衡AI工具带来的诸多风险&a…

JWT深入浅出

文章目录 JWT深入浅出1.JWT是什么2.为什么选JWT2.1 传统Session认证2.2 JWT认证 3.JWT怎么用4. jwt绝对安全吗&#xff1f; JWT深入浅出 1.JWT是什么 JWT&#xff08;JSON Web Token&#xff09;是一种用于在网络应用间传递信息的开放标准&#xff0c;通常用于身份认证和非敏…