SpringBoot+Mybatis+Thymeleaf实现的物资管理系统

news2025/1/24 3:49:52

本系统具体使用的技术是:后端使用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/632477.html

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

相关文章

chatgpt赋能python:Python如何删除之前的内容

Python如何删除之前的内容 在Python编程中&#xff0c;删除之前输入或者生成的内容是一个常见的需求。本文将介绍如何在Python中删除之前的内容以及相关的技巧和方法。 为什么需要删除之前的内容&#xff1f; 在Python编程中&#xff0c;我们有时需要重新输入命令或代码段&a…

OpenGl光照之材质

文章目录 设置材质光的属性完整代码 在现实世界里&#xff0c;每个物体会对光产生不同的反应。比如&#xff0c;钢制物体看起来通常会比陶土花瓶更闪闪发光&#xff0c;一个木头箱子也不会与一个钢制箱子反射同样程度的光。有些物体反射光的时候不会有太多的散射(Scatter)&…

6月10日,今日信息差

1、中国科学家实现含氯废塑料高效无害升级回收。近日&#xff0c;中国科学院上海硅酸盐研究所首席研究员黄富强团队采用新型常温脱氯法&#xff0c;将含氯废塑料直接转化成多种高附加值新材料&#xff0c;成功实现高效无害升级回收&#xff0c;可广泛应用于绿色环保、新型储能、…

Linux5.2 LVS+keepalived高可用群集

文章目录 计算机系统5G云计算第三章 LINUX LVSKeepalived群集一、Keepalived 概述1. Keepalived 作用2.Keepalived 实现原理剖析3.VRRP协议&#xff08;虚拟路由冗余协议&#xff09;4.Keepalived 主要模块及其作用5.健康检查方式&#xff08;学名&#xff1a;探针&#xff09;…

chatgpt赋能python:Python怎么删库:谨慎使用

Python怎么删库&#xff1a;谨慎使用 Python是一种强大的编程语言&#xff0c;它被广泛用于各种项目中&#xff0c;不仅仅是数据科学和机器学习。但它也可以被用来执行危险的任务&#xff0c;比如删库。当你需要在Python中进行数据库操作时&#xff0c;一定要特别小心。在这篇…

Stable-Diffusion|文生图 拍立得纪实风格的Lora 图例(三)

上篇【Stable-Diffusion|入门怎么下载与使用civitai网站的模型&#xff08;二&#xff09;】介绍了如何使用c站进行文生图&#xff0c;尤其一些Lora可能随时会下架&#xff0c;所以及时测试&#xff0c;及时保存很关键&#xff0c;更新一些笔者目前尝试比较有意思的Lora。 本篇…

【python】【excel】在UI中加载EXCEL并修改

界面 代码 import tkinter as tk from tkinter import filedialog from pandastable import Table import pandas as pd import pyperclipclass ExcelEditor(tk.Frame):def __init__(self, parentNone):tk.Frame.__init__(self, parent)self.parent parentself.grid()self.cr…

chatgpt赋能python:如何在Python中添加空行?

如何在Python中添加空行&#xff1f; 如果你是一个有经验的Python工程师&#xff0c;在编写代码时你可能会遇到需要添加空行的情况。但是有几种方法可以实现这一点&#xff0c;你应该用哪种方法呢&#xff1f;在本文中&#xff0c;我们将探讨如何在Python中添加空行以及各种添…

TypeScript 5.1发布,新功能更新

文章目录 1&#xff1a;返回类型增加undefined2&#xff1a;getter可以设置和 setter 的不相关类型3&#xff1a;对 JSX 元素和 JSX 标签的异步支持4&#xff1a;支持命名空间属性名称 JSX5&#xff1a;typeRoots在模块更新6&#xff1a;JSX 标签的链接游标7&#xff1a;param …

Python中对文件的基本操作

文章目录 文件和目录路径文件的读取、写入、复制、删除、变更位置及修改名称解压缩zip格式的文件剪切板的应用使用python-docx处理Word文档使用openpyxl处理Excel文档示例&#xff1a;获取Excel文档中的数据生成Word文档 文件和目录路径 os库是Python内置的标准库&#xff0c;…

张天禹移动端学习

文章目录 相关概念&#xff08;一&#xff09;屏幕相关1. 屏幕大小2. 屏幕分辨率3. 屏幕密度 &#xff08;二&#xff09;像素相关1.物理像素2. css 像素3. 设备独立像素4.像素比5.像素之间的关系 &#xff08;三&#xff09;图片高清显示位图像素图片的高清显示&#xff08;媒…

chatgpt赋能python:Python下如何给网页添加背景图片

Python下如何给网页添加背景图片 随着现代互联网的快速发展&#xff0c;人们对于网页设计的要求越来越高&#xff0c;其中非常重要的一项就是背景图。在Python编程中&#xff0c;我们也可以很容易的为网页添加背景图片。 HTML中的background属性 要给网页加上背景图&#xf…

chatgpt赋能python:Python加法表达式,快速简便的计算方式

Python加法表达式&#xff0c;快速简便的计算方式 介绍 Python是一种可读性强、简洁、易于学习的编程语言&#xff0c;同时也是一种高级编程语言&#xff0c;由于其简洁性和可读性&#xff0c;越来越多的程序员们选择Python作为他们的工作语言。在Python中&#xff0c;加法表…

C++技能 - 详解使用Lambda表达式【再也不怕看不懂别人的代码了,干货还是蛮多的】

系列文章目录 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 C技能系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the future of dream w…

C语言之函数初阶(2)

目录 1. 函数是什么 2. 库函数 3. 自定义函数 4. 函数参数 5. 函数调用 6. 函数的嵌套调用和链式访问 7. 函数的声明和定义 8. 函数递归 上一篇博客我们讲解了函数的前六个比较容易理解的部分&#xff0c;这一篇博客我们来讲解最后两个部分 在讲这篇博客之前&am…

Shell免交互操作

目录 一、Here Document 免交互 1.免交互定义 2.格式和使用方法 二、Expect 免交互 1.简介 2.格式和使用 &#xff08;1&#xff09;声明解释器 &#xff08;2&#xff09;spawn&#xff08;跟踪&#xff09; &#xff08;3&#xff09;expect&#xff08;期望&#x…

SpringBoot整合minio服务(超详细)

一、使用docker部署minio 1、拉取镜像 docker pull minio/minio 2、创建目录 mkdir -p /home/minio/config mkdir -p /home/minio/data 3、创建Minio容器并运行 docker run -p 9000:9000 -p 9090:9090 \--nethost \--name minio \-d --restartalways \-e "MINIO_ACC…

基于OpenCV的自动报靶识别实验

基于OpenCV的自动报靶识别实验 问题方案实验结论 问题 户外胸环靶自动报靶问题&#xff0c;目前是通过声电等方式来识别&#xff0c;成本较高&#xff0c;本文尝试使用图像处理的方法来识别。 方案 前提&#xff1a;固定相机 确定靶子的四个顶点&#xff1a;目前使用人工手…

使用imp和exp命令对orcale进行导入和导出

docker 进行orcale 查看这篇文章 https://editor.csdn.net/md/?articleId131026846 1、进入orcale 1、进入orcale容器 docker exec -it oracle11g bash2、orcale连接sysdba用户 进入root su root密码&#xff1a;helowin切换到oracle用户 su oracle使用sqlplus登录test用户…

chatgpt赋能python:Python中如何删除字符串中某个字符

Python中如何删除字符串中某个字符 Python是一种功能强大的编程语言&#xff0c;许多开发人员喜欢使用它来编写应用程序。字符串是Python中的常见数据类型之一&#xff0c;可用于存储文本。有时&#xff0c;我们可能需要删除字符串中的某个字符。本文将介绍如何在Python中使用…