SpringBoot+Mybatis+Thymeleaf实现的疫情防控物资管理系统

news2024/11/27 11:39:20

本系统具体使用的技术是:后端使用SpringBoot+Mybatis,前端使用了Thymeleaf框架,数据库使用的是MySql 8.0。开发工具使用的是IDEA。
本系统前端是使用了前辈的管理系统模板,具体的系统模块功能如下图所示:
在这里插入图片描述
一、系统首页图表展示借用了ECharts平台,效果图及具体代码如下:
在这里插入图片描述
 业务流程描述:用户登录成功进入系统的首页就能够看到这个物资数量的图表;实现方案是:监听登录事件,登录成功跳转页面,在页面启动过程中发送Ajax请求向后台请求物资的信息,Controller接收后继续调用业务逻辑层方法,业务逻辑层向Mapper请求数据,并返回给Controller,然后返回至页面,通过ECharts框架渲染成图表。
 数据持久层(Mapper):主要是操作物资的数据库表,包括查询出各种物资的库存数量,并将结果集封装好,部分代码如下:

<resultMap id="CategoryMap" type="Category">
        <id property="id" column="id"></id>
        <result property="name" column="cname"></result>
        <result property="addDate" column="addDate"></result>
        <result property="adminId" column="adminId"></result>
 </resultMap>
 <resultMap id="MaterialMap" type="Material">
        <id property="id" column="id"></id>
        <result property="name" column="name"></result>
        <result property="num" column="num"></result>
        <result property="cost" column="cost"></result>
        <result property="price" column="price"></result>
        <result property="notes" column="notes"></result>
        <result property="price" column="price"></result>
        <result property="detail" column="detail"></result>
        <result property="imageUrl" column="image_url"></result>
        <result property="status" column="status"></result>
        <collection property="category" resultMap="CategoryMap"></collection>
</resultMap>
<select id="findAllMaterial" resultMap="MaterialMap">
select m.id,m.name,m.num,m.cost,m.price,m.notes,m.detail,m.image_url,m.status,c.id,c.name cname,c.addDate,c.adminId
        from material m,category c
        where m.categoryId=c.id and m.status=1
</select>

 业务逻辑层(ServiceImpl):对物资查询的相关业务进行处理,包括来自数据持久层的业务和来自Controller层的业务,部分代码如下:

    @Override
    public List<Material> findAllMaterialCharts() {
        return materialMapper.findAllMaterial();
    }

 控制层(Controller):负责接收参数、调用相关业务、封装数据等功能,部分代码如下:

@GetMapping("findAllMaterialCharts")
@ResponseBody
public List<ECharts> findAllMaterialCharts() {
    List<Material> listMaterial = materialService.findAllMaterialCharts();
    List<ECharts> eChartsList=new ArrayList<>();
    System.out.println(listMaterial);
    listMaterial.forEach(x->{
        ECharts eCharts=new ECharts(x.getName(),x.getNum());
        eChartsList.add(eCharts);
    });
    return eChartsList;
}

二、用户管理模块的各功能效果图及关键代码如下:
在这里插入图片描述
 数据持久层(Mapper):主要是操作与用户相关的数据库表,包括查询、修改等操作,并将结果集封装好,部分代码如下:

//获得用户数据列表
    <resultMap id="UserModel" type="user">
        <id property="id" column="id"></id>
        <result property="account" column="account"></result>
        <result property="password" column="password"></result>
        <result property="name" column="name"></result>
        <result property="birthdate" column="birthdate"></result>
        <result property="sex" column="sex"></result>
        <result property="phone" column="phone"></result>
        <result property="address" column="address"></result>
        <result property="status" column="status"></result>
        <result property="role" column="role"></result>
        <result property="avatar_url" column="avatar_url"></result>
    </resultMap>
    <select id="findAllUser" resultMap="UserModel">
        select id,account,password,name,birthdate,sex,phone,address,status,role,avatar_url
        from user
    </select>
//多条件查询用户(userModel同上)
<select id="selectUserCondition" parameterType=" UserVo" resultMap="UserModel">
        select id,account,password,name,birthdate,sex,phone,address,status,role,avatar_url from user
        <where>
            <if test="role==1 || role==0 || role==2">
                role=#{role}
            </if>
            <if test="status==1 || status==0">
                and status=#{status}
            </if>
            <if test="sex==1 || sex==0">
                and sex=#{sex}
            </if>
            <if test="status==1 || status==0">
                and status=#{status}
            </if>
            <if test="keyWords!=null and keyWords !='' ">
                and (account like '%${keyWords}%' or name like '%${keyWords}%')
            </if>
        </where>
</select>
//编辑用户信息
    <update id="UpdateUserByIdAdmin" parameterType="user">
        update user set account=#{account},status=#{status},role=#{role} where id=#{id}
    </update>
//冻结/解冻用户
    <update id="updateUserStatus" parameterType="int">
        update user set status=#{status} where id=#{id}
    </update>

 业务逻辑层(ServiceImpl):对用户模块的相关业务进行处理,包括来自数据持久层的业务和来自Controller层的业务,部分代码如下:

//获得用户数据列表
    @Override
    public PageInfo findAllUser(int pageNum, int pageSize) { 
        PageHelper.startPage(pageNum,pageSize);
        System.out.println(pageNum+"-----"+pageSize); 
        List<User> list=userMapper.findAllUser();
        PageInfo<User> pageInfoUser =new PageInfo<>(list);
        System.out.println(pageInfoUser);
        return pageInfoUser;
    }
//多条件查询用户(userModel同上)
    @Override
    public PageInfo splitPageSelectUserCondition(UserVo userVo, int pageSize) {
        PageHelper.startPage(userVo.getPage(),pageSize);
        List<User> userList =userMapper.selectUserCondition(userVo);
        return new PageInfo<>(userList);
    }
//编辑用户信息
    @Override
    public int UpdateUserById(User user) {
        if (user.getName() != null){
            return userMapper.UpdateUserById(user);
        }else{
            return userMapper.UpdateUserByIdAdmin(user);
        }
    }
//冻结/解冻用户
    @Override
    public int updateUserStatus(int id, int status) {
        return userMapper.updateUserStatus(id,status);
    }

 控制层(Controller):负责接收参数、调用相关业务、封装数据等功能,部分代码如下:

//获得用户数据列表
    @RequestMapping(value = "/getAll",method = RequestMethod.GET)
    public String getAll(Model model){
        PageInfo userList=userService.findAllUser(1,PAGE_SIZE);
        System.out.println(userList.getList());
        model.addAttribute("userList",userList);
        return "userList";
    }
//多条件查询用户(userModel同上)
    @Override
    @RequestMapping("/getUserPageInfo")
    public String getInformPageInfo(UserVo userVo, Model model){
        model.addAttribute("userVo",userVo);
        System.out.println(userVo); 
        PageInfo userList=userService.splitPageSelectUserCondition(userVo,PAGE_SIZE);
        model.addAttribute("userList",userList);
        System.out.println(userList);
        return "userList";
    }
//编辑用户信息
    @RequestMapping (value = "/updateUser")
    public String updateUser(User user, Model model){
        System.out.println(user);
        int flag=userService.UpdateUserById(user);
        if (flag>0){
            model.addAttribute("msg","操作成功");
        }
        else {
            model.addAttribute("msg","操作失败");
        }
        return "forward:/user/getAll";
    }
//冻结/解冻用户
    @RequestMapping (value = "/updateStatus")
    public String updateStatus(int id,int status,Model model){
        System.out.println(id+status);
        int flag=userService.updateUserStatus(id,status);
        if (flag>0){
            model.addAttribute("msg","操作成功");
        }
        else {
            model.addAttribute("msg","操作失败");
        }
        return "forward:/user/getAll";
    }

三、系统首页的公告栏展示效果图及关键代码如下:
在这里插入图片描述

 业务流程描述:用户一进入网站即可在首页看到公告的信息,实现方案是:当系统启动时通过监听器调用ServiceImpl中的方法进而调用Mapper层方法查询相应的数据,然后返回到监听器中,存入application中,在页面中从application中取出数据即可;
 数据持久层(Mapper):主要是操作公告数据库表,查询出所有已发布的公告,并按照发布时间进行先后排序,然后将结果集封装好,部分代码如下:

<resultMap id="Inform_model1" type="Inform">
        <id property="id" column="id"></id>
        <result property="title" column="title"></result>
        <result property="content" column="content"></result>
        <result property="status" column="status"></result>
        <result property="adminId" column="adminId"></result>
        <result property="createDate" column="createDate"></result>
        <result property="user.name" column="userName"></result>
</resultMap>
<select id="findAllInformByStatus" parameterType="int" resultMap="Inform_model1">
        select inform.id as id,title,content,inform.status as status,adminId,createDate,user.name as userName from inform,user where user.id=inform.adminId and inform.status=#{status} order by createDate desc;
</select>

 业务逻辑层(ServiceImpl):对公告模块的相关业务进行处理,包括来自数据持久层的业务和来自Controller层的业务,部分代码如下:

    @Override
    public List<Inform> findAllInformByStatus(int pageNum,int pageSize,int status) {
        return informMapper.findAllInformByStatus(status);
    }

 监听器Listener:监听系统启动、调用相关业务等功能,部分代码如下:

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent){
        ServletContext application=servletContextEvent.getServletContext();
        List<Inform> informs=informService.findAllInformByStatus(1,10,1);
        Collections.shuffle(informs);
        System.out.println(informs);
        application.setAttribute("informs",informs);
    }

因文章篇幅限制,本文只列出一些关键功能的分析及代码示例,如需完整的代码可私我(其他文章有v)。

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

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

相关文章

《环信开发者技术等级考试》有奖问答正在进行中。。。

欢迎参加《环信开发者技术等级考试》&#xff0c;希望大家凝神静气&#xff0c;考出水平。 值此环信十周年&#xff0c;参与本次考试所有考生均可凭实力获得周年大礼包。 考场设置 本次考试主要考察大家对集成环信IM以及环信开通服务的熟悉度。 题型包含单选和多选&#xff…

算法修炼之筑基篇——筑基一层初期(解决01背包问题)

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法修炼之练气篇​​​​​ ✨博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;学习了算法修炼之练气篇想必各位蒟蒻们的基础已经非常的扎实了&#xff0c;下来我们进阶到算法修炼之筑基篇的学习。筑基期和练气期…

物联网网关,原来是这么回事,感谢!

《高并发系统实战派》-- 你值得拥有 文章目录 物联网网关是什么&#xff1f;为什么要搞物联网网关&#xff1f;物联网网关作用&#xff1f; 物联网网关技术原理物联网网关实战开发边缘计算与物联网网关的碰撞边缘计算的理解物联网网关结合边缘计算 物联网网关是什么&#xff1f…

Windows10下docker安装及遇到的问题并且在docker快速部署onlyoffice

docker安装官网地址 docker安装超链接点击进入下载 这里下载的是window版的docker&#xff0c;你们根据自身实际情况下载&#xff1b; 安装docker遇到的问题: 第一个问题 : 启动遇到Docker Desktop is unable to detect a Hypervisor 虚拟化技术没打开&#xff0c;需要打开…

有哪些你觉得非常好用的软件?

以下是我认为非常好用的软件&#xff1a; 1. 金鸣表格文字识别&#xff1a;由深圳市金鸣科技有限公司开发&#xff0c;系统采用超前AI&#xff0c;经深度学习&#xff0c;识别精准&#xff0c;可将图片、PDF等转为excel、word&#xff0c;同时支持证件、票据等批量合并转为结构…

“好不容易进的腾讯,你凭什么要离开?”

前几天&#xff0c;我在网上看到一个故事。 故事的主人翁是18届的校招生&#xff0c;目前入职腾讯&#xff0c;工作了一个月。这一个月给他的感受是大量的写测试用例&#xff0c;感觉自己写测试用例的能力熟练了不少&#xff0c;测试技能倒是没有多大的提高&#xff0c;真正需…

vue使用纪要

一、基础总结 1、构成 1&#xff09;位置目录 如下图所示&#xff1a; 一个页面一个vue文件&#xff0c;位置在src下边的views里边&#xff1b; 如下图&#xff1a; 一个vue文件&#xff0c;对应一个或多个js文件&#xff0c;js放在src下边的api中&#xff1b; 2&#xf…

开源杀毒引擎库libclamav的使用方法

《开源杀毒引擎ClamAV的源码编译安装》中我们讲了ClamAV的安装和使用方法&#xff0c;可以很方便的使用ClamAV提供的工具进行病毒扫描&#xff0c;当然我们也可以在我们的程序中集成它提供的libclamav开发库来实现病毒扫描&#xff0c;libclamav是一个功能强大的病毒扫描库&…

代码随想录刷题第46天|LeetCode139单词拆分、多重背包

1、LeetCode139单词拆分 题目链接&#xff1a;139单词拆分 1、dp[i] : 字符串长度为i的话&#xff0c;dp[i]为true&#xff0c;表示可以拆分为一个或多个在字典中出现的单词。 2、递推公式&#xff1a;如果确定dp[j] 是true&#xff0c;且 [j, i] 这个区间的子串出现在字典里…

Using index Using where和 Using where Using index有何区别

先把结论呈现出来&#xff1a; 1、Using index : 查询的列被索引覆盖&#xff0c;并且where筛选条件是索引的是前导列&#xff0c;Extra中为Using index 2、 Using index &#xff0c;Using where&#xff1a;查询的列被索引覆盖&#xff0c;数据都是先通过索引查询出来的…

语法篇JS基础

一、初识JavaScript 1.1前景 CSS 预处理器 CSS 预处理器定义了一种新的语言&#xff0c;其基本思想是&#xff0c;用一种专门的编程语言&#xff0c;为 CSS 增加了一些 编程的特性&#xff0c;将 CSS 作为目标生成文件&#xff0c;然后开发者就只要使用这种语言进行 CSS 的编码…

cookies介绍

cookies介绍 Cookies概述 Cookies是网络浏览器中用于存储用户信息的小文本文件。Cookie的大小通常限制在4KB以内&#xff08;不同浏览器内核可能有细微差异或有单域名更高的限制&#xff09;。当你访问某个网站时&#xff0c;该网站可能会在你的计算机上创建一个cookie&#…

PDB Database - ESM Atlas PDB 数据集的多维度分析与整理 (3)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131095395 PDB 三大数据集的多维度分析与整理&#xff1a; 人工提交 - RCSB PDB&#xff1a;PDB Database - RCSB PDB 数据集的多维度分…

YUV4:2:0是什么意思

我们经常看到YUV中4&#xff1a;2&#xff1a;0&#xff0c;看着好像懂&#xff0c;仔细看又不懂。 比例&#xff0c;N1:N2:N3里面的数字指水平方向上的相对采样率&#xff0c;N1表示在奇数行和偶数行里Y样本的个数&#xff0c;N2表示奇数行里Cb和Cr样本的个数&#xff0c;N3…

ciscn_2019_s_4-栈迁移

1&#xff0c;三连 程序功能&#xff1a;两次输入 题目类型猜测&#xff1a;栈溢出&#xff0c;栈迁移 2&#xff0c;ida分析 溢出点&#xff1a; system_plt地址: 思路&#xff1a;由于无直接getshell的利用函数&#xff0c;溢出空间只有8字节&#xff08;ebpret占用无法继续…

数据结构与算法脑图

数据结构 非受限线性表 顺序结构 数组 支持 O(1) 的随机访问平均为 O(n) 的插入和删除警惕越界错误,导致 Stack Over Flow链式结构 单链表 不支持随机访问,需要遍历去访问结点插入和删除只需要移动指针,时间复杂度为 O(1)每个结点需要额外的空间存储指针,需要的内存比数组…

控制视图内容的位置

文本域中的提示内容在默认情况下是垂直居中的&#xff0c;要改变文本在文本域中的位置&#xff0c;可以使用android:gravity来实现。 利用android:gravity可以指定如何在视图中放置视图内容&#xff0c;例如&#xff0c;如何在文本域中放置文本。 如果希望视图文本显示在上方&a…

RocketMQ 学习社区重磅上线!AI 互动,一秒了解 RocketMQ 功能源码

作者&#xff1a;RocketMQ学习社区 RocketMQ 背景 Apache RocketMQ 诞生至今&#xff0c;一直服务于 100% 阿里集团内部业务、阿里云以及开源社区数以万计的企业客户。 历经十多年双十一严苛流量验证的 RocketMQ&#xff0c;承载了超过万亿级消息规模的洪峰压力。2021 年 Ap…

大数据权限与安全

大数据权限与安全 1、权限概述 1.1、大数据平台权限管控现状 权限的管控&#xff0c;历来是大数据平台中最让人头疼的问题之一。管得严了&#xff0c;业务不流畅&#xff0c;用户不开心&#xff0c;放得宽了&#xff0c;安全没有底。而且大数据平台组件&#xff0c;服务众多…

InnoDB - 页结构

InnoDB - 页结构 文章目录 InnoDB - 页结构1. InnoDB页简介2. InnoDB页结构2.1 User Records&#xff08;数据&#xff09;2.2 Page Directory&#xff08;页目录&#xff09;2.3 Page Header&#xff08;页头部信息&#xff09;2.4 File Header&#xff08;文件头&#xff09;…