一个springboot+mybatisplus+vue实现的增删改查加多条件查询加分页

article/2025/9/14 11:39:11

0.一个小Demo 就没有用到其它的技术了

格式如下

在这里插入图片描述

表文件

create table FinancingProduct
(id           varchar(50) not nullprimary key,risk         int         not null,income       varchar(50) not null,saleStarting datetime    not null,saleEnd      datetime    not null,end          datetime    not null
);

在这里插入图片描述

pom配置

  <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!--mybatis-plus 是自己开发的,非官方的!--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1.tmp</version></dependency><!--Mysql数据库!--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--mybatis-plus一键生成--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity</artifactId><version>1.7</version></dependency><!--阿里巴巴下的连接池!--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.1</version></dependency></dependencies>

application.yml配置


#设置端口号
server:port: 8080
#配置数据源
spring:datasource:username: rootpassword: newPassword#url中database为对应的数据库名称url: jdbc:mysql://IP地址/fina?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8driver-class-name: com.mysql.cj.jdbc.Driver#连接池type: com.alibaba.druid.pool.DruidDataSource#释放静态资源mvc:static-path-pattern: /static/**   #释放静态资源
#mybatis配置
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl    #  数据库中如果有类似 如  user_name 等命名,会将 _后的字母大写,这里是为了和实体类对应#配置驼峰命名map-underscore-to-camel-case: true#映射器位置mapper-locations: classpath:mapping/*.xml #映射文件类#类型别名包type-aliases-package: com.hexu.demo666.entity   #实体类type-enums-package: com.hexu.demo666.entity.typeEnum  #枚举类pagehelper:helperDialect: mysqlreasonable: true  #开启优化,如果开启优化,在分页页码结果没有数据的时候,会显示有数据的页码数据supportMethodsArguments: true #是否支持接口参数来传递分页参数,默认falsepageSizeZero: false #pageSize=0 返回所有params: count=countSql#showSql
logging:level:com.hexu.springbootdemo02.mapper: debug

1.实体类

Financingproduct类
package com.hexu.demo666.entity;import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.hexu.demo666.entity.typeEnum.TypeEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.io.Serializable;
import java.time.LocalDateTime;/*** <p>* * </p>** @author hexu* @since 2021-12-28*/
@Data@EqualsAndHashCode(callSuper = false)@TableName("FinancingProduct")
public class Financingproduct implements Serializable {private static final long serialVersionUID = 1L;private String id;//跟枚举类对应private TypeEnum risk;private String income;@TableField("saleStarting")private LocalDateTime salestarting;@TableField("saleEnd")private LocalDateTime saleend;private LocalDateTime end;}

创建vo

FinancingproductVo类
package com.hexu.demo666.entity.vo;import lombok.Data;/*** @Classname FinancingproductVo* @Description TODO* @Author 86176* @Date 2021-12-28 9:18* @Version 1.0**/
@Data
public class FinancingproductVo {//条件Idprivate String id;//条件类型private String risk;//页码private Integer pageNum = 1;//数量private Integer pageSize = 3;
}

创建枚举

typeEnum类
package com.hexu.demo666.entity.typeEnum;import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;/*** <p>* </p>** @author yuxiaobin* @date 2018/8/31*/
public enum TypeEnum {YI(1, "R1"),ER(2, "R2"),SAN(3, "R3");@EnumValueprivate Integer key;@JsonValueprivate String display;TypeEnum(Integer key, String display) {this.key = key;this.display = display;}public Integer getKey() {return key;}public String getDisplay() {return display;}
}

2.持久层

创建mapper

FinancingproductMapper类
package com.hexu.demo666.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hexu.demo666.entity.Financingproduct;/*** <p>*  Mapper 接口* </p>** @author hexu* @since 2021-12-28*/
public interface FinancingproductMapper extends BaseMapper<Financingproduct> {}

3.业务层

创建service

FinancingproductService类
package com.hexu.demo666.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.hexu.demo666.entity.Financingproduct;/*** <p>*  服务类* </p>** @author hexu* @since 2021-12-28*/
public interface FinancingproductService extends IService<Financingproduct> {}
实现类
package com.hexu.demo666.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hexu.demo666.entity.Financingproduct;
import com.hexu.demo666.mapper.FinancingproductMapper;
import com.hexu.demo666.service.FinancingproductService;
import org.springframework.stereotype.Service;/*** <p>*  服务实现类* </p>** @author hexu* @since 2021-12-28*/
@Service
public class FinancingproductServiceImpl extends ServiceImpl<FinancingproductMapper, Financingproduct> implements FinancingproductService {}

4.工具类

ResponseMessage统一返回格式类

ResponseMessage类
package com.hexu.demo666.util;import java.util.HashMap;
import java.util.Map;/*** <p>项目文档: 响应数据封装</p>** @author <a href="https://github.com/laomu/laomu.github.io">大牧</a>* @version V1.0*/
public class ResponseMessage {private String errorCode;private String errorMsg;private Map<String, Object> objectMap = new HashMap<>();public String getErrorCode() {return errorCode;}public void setErrorCode(String errorCode) {this.errorCode = errorCode;}public String getErrorMsg() {return errorMsg;}public void setErrorMsg(String errorMsg) {this.errorMsg = errorMsg;}public Map<String, Object> getObjectMap() {return objectMap;}public void setObjectMap(Map<String, Object> objectMap) {this.objectMap = objectMap;}public ResponseMessage addObject(String key, Object value) {this.objectMap.put(key, value);return this;}public static ResponseMessage success() {ResponseMessage rm = new ResponseMessage();rm.setErrorCode("100");rm.setErrorMsg("处理成功");return rm;}public static ResponseMessage error() {ResponseMessage rm = new ResponseMessage();rm.setErrorCode("200");rm.setErrorMsg("处理失败");return rm;}
}

5.控制层

FinancingproductController类

package com.hexu.demo666.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hexu.demo666.entity.Financingproduct;
import com.hexu.demo666.entity.vo.FinancingproductVo;
import com.hexu.demo666.service.FinancingproductService;
import com.hexu.demo666.util.ResponseMessage;
import org.springframework.stereotype.Controller;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;/*** <p>*  前端控制器* </p>** @author hexu* @since 2021-12-28*/
@Controller
public class FinancingproductController {@Resourceprivate FinancingproductService financingproductService;/*** 根据条件查询** @param vo 条件类* @return*/@PostMapping("/getAllger")@ResponseBodypublic ResponseMessage getAllger(@RequestBody FinancingproductVo vo) {//分页设置PageHelper.startPage(vo.getPageNum(), vo.getPageSize());//进行条件查询QueryWrapper<Financingproduct> queryWrapper = new QueryWrapper<>();if (vo.getId() != null && !"".equals(vo.getId())) {queryWrapper.like("id", vo.getId());}if (vo.getRisk() != null && !"".equals(vo.getRisk())) {queryWrapper.eq("risk", vo.getRisk());}List<Financingproduct> list = financingproductService.list(queryWrapper);PageInfo<Financingproduct> pageInfo = new PageInfo<>(list);//统一返回格式return ResponseMessage.success().addObject("list", pageInfo);}/*** 根据Id删除** @param id* @return*/@GetMapping("/deleteById/{id}")@ResponseBodypublic ResponseMessage deleteById(@PathVariable Integer id) {Assert.notNull(id, "不能为null");boolean b = financingproductService.removeById(id);return b ? ResponseMessage.success() : ResponseMessage.error();}/*** 增加* @param financingproduct* @return*/@PostMapping("/addAll")@ResponseBodypublic ResponseMessage addAll(@RequestBody Financingproduct financingproduct) {boolean save = financingproductService.save(financingproduct);return save ? ResponseMessage.success() : ResponseMessage.error();}/*** 根据Id查询** @param id* @return*/@PostMapping("/getById/{id}")@ResponseBodypublic ResponseMessage getById(@PathVariable Integer id) {Assert.notNull(id, "不能为null");Financingproduct byId = financingproductService.getById(id);return ResponseMessage.success().addObject("list", byId);}/*** 根据Id修改* @param financingproduct* @return*/@PostMapping("/updateById")@ResponseBodypublic ResponseMessage updateById(@RequestBody Financingproduct financingproduct) {boolean b = financingproductService.updateById(financingproduct);return b ? ResponseMessage.success() : ResponseMessage.error();}//以下是跳转@RequestMapping("/in")public String index() {return "index";}@RequestMapping("/update")public String update() {return "update";}@RequestMapping("/add")public String add() {return "add";}}

前端

前端index页面

index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="div"><!--条件查询-->产品代码  <input type="text" v-model="vo.id">风险评级<select v-model="vo.risk"><option value="">请选择</option><option value="1">R1</option><option value="2">R2</option><option value="3">R3</option></select><input type="button" @click="btm()" value="搜索">
<!--渲染页面--><table border="2"><tr><td>产品代码</td><td>风险评级</td><td>预期收益</td><td>起始日</td><td>截止日</td><td>到期日</td><td>操作</td></tr><tr v-for="fina in list1.list"><td>{{fina.id}}</td><td>{{fina.risk}}</td><td>{{fina.income}}</td><td>{{finasalestarting}}</td><td>{{fina.saleend}}</td><td>{{fina.end}}</td><td @click="del(fina.id)">删除</td><td @click="upe(fina.id)">修改</td></tr></table><a href="/add">增加</a><!--分页操作--><span>{{list1.pageNum}} / {{list1.pages}}</span><span @click="page(list1.nextPage)">下一页</span><span @click="page(list1.prePage)">上一页</span><span><input type="text" size="2" v-model="aaa"><input type="button" value="Go" @click="page(aaa)"></span><span @click="page(1)">第一页</span><span @click="page(list1.pages)">最后一页</span>
</div>
<script type="text/javascript"  src="/static/jquery-1.8.3.js"></script>
<script type="text/javascript" src="/static/vue.js"></script>
<script type="text/javascript" src="/static/axios.js"></script>
<script>var arr = new Vue({el: "#div",data() {return {/*获取后端传来的数据*/list1: [],//获取条件参数vo: {},}},mounted() {/*初始化*/this.list();},methods: {list() {axios.post("/getAllger", this.vo).then(res => {if (res.data.errorCode === "100") {this.list1 = res.data.objectMap.list}})},/*删除*/del(id) {alert(id)axios.get("/deleteById/" + id).then(data => {if (data.data.errorCode === "100") {alert("删除成功")this.list();}})},/*分页*/page(id) {this.vo.pageNum = id;this.list()},//修改页面upe(id) {location.href = "/update?id=" + id;},/*条件查询*/btm() {arr.list();}}})
</script>
</body>
</html>

add页面

add.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="div">产品代码<input type="text" v-model="financingproduct.id">风险评级<select v-model="financingproduct.risk"><option value="R1">R1</option><option value="R2">R2</option><option value="R3">R3</option>
</select>预期收益<input type="text" v-model="financingproduct.income">起始日<input type="datetime-local" v-model="financingproduct.salestarting">截止日<input type="datetime-local" v-model="financingproduct.saleend">到期日<input type="datetime-local" v-model="financingproduct.end"><input type="button" @click="add()" value="提交"><p>{{financingproduct}}</p>
</div>
<script type="text/javascript" src="/static/vue.js"></script>
<script type="text/javascript" src="/static/axios.js"></script>
<script>new Vue({el: "#div",data: {/*获取绑定对象*/financingproduct: {},},mounted() {},methods: {add() {axios.post("/addAll", this.financingproduct).then(res => {if (res.data.errorCode === "100") {alert("增加成功")location.href = "/in"}})}}})</script>
</body>
</html>

update页面

update.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="div"><!--条件查询-->产品代码<input type="text" v-model="financingproduct.id">风险评级<select v-model="financingproduct.risk"><option value="R1">R1</option><option value="R2">R2</option><option value="R3">R3</option></select>预期收益<input type="text" v-model="financingproduct.income">起始日<input type="text" v-model="financingproduct.salestarting">截止日<input type="text" v-model="financingproduct.saleend">到期日<input type="text" v-model="financingproduct.end"><input type="button" @click="upeById()" value="提交">
</div>
<script type="text/javascript" src="/static/vue.js"></script>
<script type="text/javascript" src="/static/axios.js"></script>
<script>new Vue({el: "#div",data: {//用来接收绑定的数据financingproduct: {},},mounted() {//初始化渲染this.getById();},methods: {getById() {// 获得idvar arr = location.href.split("?id=")var id = arr[1];alert(id)axios.post("/getById/" + id).then(res => {if (res.data.errorCode === "100") {this.financingproduct = res.data.objectMap.list;}})},upeById() {axios.post("/updateById", this.financingproduct).then(res => {if (res.data.errorCode === "100") {alert("修改成功")location.href = "/in"}})}}})</script>
</body>
</html>

前后端分离跨域为解决

/*** @Classname CorsConfig* @Description TODO* @Author 86176* @Date 2021-12-18 9:30* @Version 1.0**/
@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOriginPatterns("*").allowCredentials(true).allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH").maxAge(3600);}
}

http://chatgpt.dhexx.cn/article/htt5LVcG.shtml

相关文章

加多宝首度披露"换头手术"的详细内幕

12 月下旬&#xff0c;加多宝与王老吉的“改名案”和“怕上火案”判决结果先后出台&#xff0c;两大凉茶巨头之间的官司纠纷再起波澜。而加多宝集团品牌管理部负责人王月贵&#xff0c;在出席活动时首度披露了加多宝“换头手术”的详细内幕——由此&#xff0c;加多宝打赢凉茶之…

ASEMI整流桥MB10S出来的电压是多少,MB10S加多大电容

编辑-Z MB10S参数描述 型号&#xff1a;MB10S 封装&#xff1a;MBS-4 (SOP-4) 特性&#xff1a;小方桥、贴片桥堆 电性参数&#xff1a;1A 1000V 芯片材质&#xff1a;GPP 正向电流(Io)&#xff1a;1A 芯片个数&#xff1a;4 正向电压(VF)&#xff1a;1.0V 芯片尺寸&…

加多宝李二强:营销数字化闭环初体验,真的很爽

作者 | 中国软件网 曹开彬 艾佳 校对 | 中国软件网 马志学 企业数字化轰轰烈烈二十年&#xff0c;却始终在实践探索的峭壁上攀援。一方面作为技术手段的数字信息科技快速演进&#xff0c;将企业数字化导入泛摩尔定律循环&#xff0c;如逆水行舟不进则退&#xff1b;另一方面数字…

用JavaScript实现,用户输入自己的汽油编号,然后输入自己加多少升,就弹出价格

Ⅰ、问题描述&#xff1a; 一个加油站为了鼓励车主多加油&#xff0c;出行优惠政策&#xff1a; 加的多有优惠&#xff1a; 92 号汽油&#xff0c;每升 6 元&#xff1b;如果大于等于 20 升&#xff0c;那么每升 5.9 元&#xff1b; 97 号汽油&#xff0c;每升 7 元&#xff1…

微信每天加多少人不会封号?(行业经验)

微信8.0版本开始微信好友的最大数量&#xff0c;将之前的最多5000好友提升到现在的10000好友。 不要相信那些一天加500人1000人的&#xff0c;不可能的&#xff01;腾讯对这方面是有严格限制的。 但是会区分你的微信号质量&#xff0c;质量越好加人越有利。以下内容是增对普通…

企业微信一天最多可以加多少人? 企业微信加好友功能会被限制吗?

企业微信已经成为私域运营必备工具,最近经常有人问我企业微信一天可以主动加多少人这个问 企业微信已经成为私域运营必备工具,最近经常有人问我企业微信一天可以主动加多少人这个问题,我每次都是很纠结,如果微信告诉你一天可以加多少人,那么大家不就在这个红线下面疯狂的…

❤️创意网页:高考加油倒计时网页文字加多版 - 增加祝福语句和下雪背景效果

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

tomcat优化(生产环境) 加多实例部署

来做一个tomcat多实例部署 1.首先安装jdk和tomcat 然后复制/usr/local的tomcat 2.配置tomcat环境变量 把两个tomcat都配置一下 环境变量的位置指向不能错 vim /etc/profile.d/tomcat.sh export CATALINA_HOME1/usr/local/tomcat/ export CATALINA_BASE1/usr/local/tomcat/…

el-table自定义表头,el-table 加多选列

element el-table 加多选列 <el-table :data"tableData" height"500" style"width: 100%" center highlight-current-row ><el-table-column type"index" label"序号" width"50" align"center"…

element-ui下拉选项加多选框(带全部)

代码全在一个页面实现 效果&#xff1a; 代码&#xff1a; <template><div class"select-checked"><el-select:value"selected"multipleplaceholder"请选择":popper-append-to-body"false"><el-option :value&q…

elementUI之下拉选项加多选框功能实现

elementUI之下拉选项加多选框功能实现 elementUI之下拉加多选框功能实现下拉加多选框升级—添加全部选项需求改版完善 elementUI之下拉加多选框功能实现 因产品需求和UI样式调整&#xff0c;和element自带的下拉多选有冲突&#xff0c;索性自己尝试修改如下&#xff1a; 下拉…

elementUI下拉选项加多选框功能实现(自己添加“全部”选项)

本文包含三部分&#xff1a; 1.下拉加多选框 2.升级—添加全部选项 3.需求改版完善 一、下拉加多选框 效果如下图&#xff1a; 封装如下&#xff1a; <template><div class"select-checked"><!-- 下拉加多选框 --><el-selectv-model"val…

Js计算指定日期加上多少天,加多少月,加多少年的日期 (实用)

原文出处&#xff1a;Js计算指定日期加上多少天&#xff0c;加多少月&#xff0c;加多少年的日期 - 庞国明 - 博客园Js计算指定日期加上多少天&#xff0c;加多少月&#xff0c;加多少年的日期https://www.cnblogs.com/pangguoming/p/8854999.html function DateAdd(interva…

加多宝二次创业五周年:解锁品牌持续增长密码

今年作为后疫情时代元年&#xff0c;首要的任务是提振经济、重振信心&#xff0c;其中消费市场的提振至关重要。 春江水暖鸭先知。每当消费市场开始复苏&#xff0c;食品饮料行业的回暖一般会更明显。而要扩大食品饮料的消费规模、提振消费信心&#xff0c;关键在于品牌结合外…

阿里技术专家加多:Java异步编程实战之基于JDK中的Future实现异步编程

正文共&#xff1a;14244 字 8 图 预计阅读时间&#xff1a; 36 分钟 本节内容摘自《Java异步编程实战》中的一小节。 一、前言 本节主要讲解如何使用JDK中的Future实现异步编程&#xff0c;这包含如何使用FutureTask实现异步编程以及其内部实现原理以及FutureTask的局限性。 二…

如何理解向量组的秩和矩阵的秩

1 向量组的轶指的是极大线性无关组中向量的个数 矩阵的轶是把一个矩阵分为行向量组和列向量组,这两个向量组的轶分别称为行轶和列轶.可以证明的是行轶和列轶相等,这就是矩阵的轶. 这里提醒一下就是: n-r为线性无关的解向量的个数,而r为极大无关组的个数 n-r也为基础解析向量的…

线性代数[矩阵的秩]

系列文章目录 第一章 线性代数[初等变换(一)] 第二章 线性代数[初等变换(二)] 第三章 线性代数[初等变换(三)] 提示&#xff1a;线性代数[矩阵的秩](林耀东&#xff0c;东叔讲解限定版) 文章目录 系列文章目录 文章目录 一、矩阵的“秩”是什么&#xff1f; 二、矩阵的秩 1.…

矩阵的秩-理解

求解形如上面的n元一次方程组的解法 n个未知数的方程组需要有n个“干货”的方程才能解出唯一个结果&#xff0c;这里的干货就是矩阵的秩。 即矩阵的秩回答了解得唯一性。 线性无关与线性有关&#xff1a; 例如&#xff1a; 此时矩阵的秩就是2&#xff0c;即矩阵的秩是矩阵中的…

【线性代数(9)】矩阵的秩

矩阵的秩 1 k阶子式和秩的定义2 矩阵的秩的定理3 有关秩的性质 手动反爬虫&#xff1a; 原博地址 知识梳理不易&#xff0c;请尊重劳动成果&#xff0c;文章仅发布在CSDN网站上&#xff0c;在其他网站看到该博文均属于未经作者授权的恶意爬取信息如若转载&#xff0c;请标明出…

矩阵秩的几何意义

矩阵的秩是什么&#xff1f; 文章目录 前言一、矩阵秩的定义&#xff1f;二、矩阵乘法的几何意义三、几何上理解矩阵的秩1.矩阵 A A A是方阵时2.矩阵 A A A是方阵时&#xff08;3*3&#xff09;3.矩阵 A A A非方阵时&#xff08;3*2&#xff09; 总结参考 前言 相信大家刚开始…