Springboot+Redis+MybatisPlus实现页面缓存增删改查
1.导入依赖
本章需要特别导入的依赖
<!-- 添加jedis依赖 --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.0.1</version></dependency><!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
全文依赖
<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.15</version></dependency><!--Velocity(默认--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.2</version></dependency><!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!-- 添加jedis依赖 --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.0.1</version></dependency><!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><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.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></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></dependencies>
2.yml文件配置
spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/goodsusername: rootpassword: sasa#配置redisredis:#设置数据库0-15database: 0#主机号host: 127.0.0.1#端口号port: 6379jedis:pool:max-wait: 1000msmax-active: 8max-idle: 8min-idle: 5mvc:pathmatch:matching-strategy: ant_path_matcher
#mp日志报错
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3.数据库展示
4.包展示
5. HTML页面展示
1.首页页面
redis缓存数据
2.新增页面
因为我这里用的是批量新增,所有新增了三条数据
redis缓存数据
3.删除页面
这里我们删除最后一条冰红茶的数据,就只有两条冰红茶数据了
redis缓存数据
4.修改页面
我们把最后一条冰红茶数据修改成可乐
redis缓存数据
6.HTML代码实现
总共用到了三个页面
list.html页面代码实现
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
</head>
<body>
<div style="text-align: center"><table style="margin: 0px auto"><tr><td>商品编号</td><td>商品名字</td><td>商品价格</td><td>库存</td><td>所属类型</td><td>操作</td></tr><tr th:each="list:${page}"><td th:text="${list.id}" id="id"></td><td th:text="${list.name}"></td><td th:text="${list.price}"></td><td th:text="${list.count}"></td><td th:text="${list.type}"></td><td><input type="button" onclick="location.href='/goods/toInsert'" th:value="新增"></td><td><input th:type="button" th:value ="删除" th:onclick="dele([[${list.id}]])" ></td><td><a th:href="'/goods/toUpdate/'+${list.id}">修改</a></td></tr><tr align="center"></tr></table>
</div>
</body>
<script>function dele(a) {$.ajax({url:'/goods/delete/'+a,type:'delete',dataType:'json',success:function (bool){if (bool==true)alert("删除成功")location.href="/goods/list"if (bool==false)alert("删除失败")},contentType: 'application/json;charset=UTF-8'})}
</script>
</html>
insert.html页面代码实现
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
</head>
<body>
商品名称<input type="text" id="name" >
商品价格<input type="text" id="price" >
库存<input type="text" id="count" >
商品类型<input type="text" id="type" >
<input type="button" value="新增" onclick="insert()">
</body>
<script>function insert() {var name=$("#name").val()var price=$("#price").val()var count=$("#count").val()var type=$("#type").val()var a={'name':name,'price':price,'count':count,'type':type}$.ajax({url:'/goods/save',type:'post',dataType:'json',data:JSON.stringify(a),success:function (data){if (data==true) {alert("新增成功")location.href="/goods/list"}},contentType: 'application/json;charset=UTF-8'})}</script>
</html>
update.html页面代码实现
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
</head>
<body>
<!--<input type="text" th:value="${allGoodsById.id}" id="id" hidden>-->
<!--商品名称<input type="text" th:value="${allGoodsById.name}" id="name">-->
<!--商品价格<input type="text" th:value="${allGoodsById.price}" id="price">-->
<!--库存<input type="text" th:value="${allGoodsById.count}" id="count">-->
<!--所属类型<input type="text" th:value="${allGoodsById.type}" id="type"><br>-->
<!--<input type="button" onclick="update()" value="修改">-->
<input type="text" id="id" th:value="${allGoodsById.id}" hidden>
商品名称<input type="text" id="name">
商品价格<input type="text" id="price">
库存<input type="text" id="count">
所属类型<input type="text" id="type"><br>
<input type="button" onclick="update()" value="修改">
</body>
<script>function update() {var id=$("#id").val()var name=$("#name").val()var price=$("#price").val()var count=$("#count").val()var type=$("#type").val()var data={'id':id,'name':name,'price':price,'count':count,'type':type}$.ajax({url:'/goods/update',type:'post',data:JSON.stringify(data),dataType:'json',success:function (bool){if (bool==true){alert("修改成功!")location.href="/goods/list"}if (data==false){alert("修改失败!")}},contentType: 'application/json;charset=UTF-8'})}
</script>
</html>
7.controller层代码实现
package com.xcj.controller;
import com.xcj.pojo.Goods;
import com.xcj.service.GoodsService;
import com.xcj.utils.JsonUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import redis.clients.jedis.Jedis;
import java.util.List;@Controller
@RequestMapping("/goods")
public class GoodsController {@Autowiredprivate GoodsService goodsService;@RequestMapping("/list")public String getAllGoodes(Model model, JsonUtils jsonUtils, Jedis jedis){Object sel = goodsService.sel(jsonUtils, jedis);List<Goods> ts =jsonUtils.jsonToList((String) sel,Goods.class);model.addAttribute("page",ts);return "list";}//跳转新增页面@RequestMapping("/toInsert")public String toInsert(){return "insert";}//新增商品@ResponseBody@PostMapping("/save")public boolean save(Jedis jedis,@RequestBody Goods goods){return goodsService.saves(goods,jedis);}//根据id删除商品@ResponseBody@DeleteMapping("/delete/{id}")public boolean toDelete(@PathVariable("id")Integer id,Jedis jedis){return goodsService.removeId(id,jedis);}//跳转修改页面@RequestMapping("/toUpdate/{id}")public String toUpdate(@PathVariable("id")Integer id,Model model){Goods allGoodsById = goodsService.getById(id);model.addAttribute("allGoodsById",allGoodsById);return "update";}//修改数据@RequestMapping(value = "/update",method = RequestMethod.POST)@ResponseBodypublic boolean update(@RequestBody Goods goods, Jedis jedis){return goodsService.Update(goods,jedis);}}
8.实体类代码实现
这里用的是MybatisX自动生成实体类
package com.xcj.pojo;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;/*** * @TableName goods*/
@TableName(value ="goods")
@Data
public class Goods implements Serializable {/*** */@TableId(type = IdType.AUTO)private Integer id;/*** */private String name;/*** */private Integer price;/*** */private Integer count;/*** */private Integer type;@TableField(exist = false)private static final long serialVersionUID = 1L;@Overridepublic boolean equals(Object that) {if (this == that) {return true;}if (that == null) {return false;}if (getClass() != that.getClass()) {return false;}Goods other = (Goods) that;return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))&& (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))&& (this.getPrice() == null ? other.getPrice() == null : this.getPrice().equals(other.getPrice()))&& (this.getCount() == null ? other.getCount() == null : this.getCount().equals(other.getCount()))&& (this.getType() == null ? other.getType() == null : this.getType().equals(other.getType()));}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((getId() == null) ? 0 : getId().hashCode());result = prime * result + ((getName() == null) ? 0 : getName().hashCode());result = prime * result + ((getPrice() == null) ? 0 : getPrice().hashCode());result = prime * result + ((getCount() == null) ? 0 : getCount().hashCode());result = prime * result + ((getType() == null) ? 0 : getType().hashCode());return result;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append(getClass().getSimpleName());sb.append(" [");sb.append("Hash = ").append(hashCode());sb.append(", id=").append(id);sb.append(", name=").append(name);sb.append(", price=").append(price);sb.append(", count=").append(count);sb.append(", type=").append(type);sb.append(", serialVersionUID=").append(serialVersionUID);sb.append("]");return sb.toString();}
}
9.工具类代码实现
package com.xcj.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Component;import java.util.List;@Component
public class JsonUtils {// 定义jackson对象private static final ObjectMapper MAPPER = new ObjectMapper();/*** 将对象转换成json字符串。* <p>Title: pojoToJson</p>* <p>Description: </p>* @param data* @return*/public static String objectToJson(Object data) {try {String string = MAPPER.writeValueAsString(data);return string;} catch (JsonProcessingException e) {e.printStackTrace();}return null;}/*** 将json结果集转化为对象** @param jsonData json数据* @param class 对象中的object类型* @return*/public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {try {T t = MAPPER.readValue(jsonData, beanType);return t;} catch (Exception e) {e.printStackTrace();}return null;}/*** 将json数据转换成pojo对象list* <p>Title: jsonToList</p>* <p>Description: </p>* @param jsonData* @param beanType* @return*/public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);try {List<T> list = MAPPER.readValue(jsonData, javaType);return list;} catch (Exception e) {e.printStackTrace();}return null;}}
10.service层代码实现
GoodsService
package com.xcj.service;import com.xcj.pojo.Goods;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xcj.utils.JsonUtils;
import redis.clients.jedis.Jedis;import java.util.List;/**
* @author 24371
* @description 针对表【goods】的数据库操作Service
* @createDate 2022-11-28 18:24:20
*/
public interface GoodsService extends IService<Goods> {/*** redis缓存查询数据* @return object* */Object sel(JsonUtils jsonUtils, Jedis jedis);/*** redis删除缓存数据* @return boolean* */boolean removeId(Integer id,Jedis jedis);/*** redis新增缓存数据* @return boolean* */boolean saves(Goods goods, Jedis jedis);/*** redis修改缓存数据* @return boolean* */boolean Update(Goods goods, Jedis jedis);
}
GoodsServiceImpl
package com.xcj.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xcj.config.JedisDao;
import com.xcj.pojo.Goods;
import com.xcj.service.GoodsService;
import com.xcj.mapper.GoodsMapper;
import com.xcj.utils.JsonUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;import java.util.ArrayList;
import java.util.List;/**
* @author 24371
* @description 针对表【goods】的数据库操作Service实现
* @createDate 2022-11-28 18:24:20
*/
@Service
public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods>implements GoodsService{@Autowiredprivate GoodsMapper goodsMapper;@Overridepublic Object sel(JsonUtils jsonUtils, Jedis jedis) {//从redis缓存中获取goods,获取到了直接返回if (jedis.get("goods") != null) {String s = jedis.get("goods");return s;} else {//没获取到的话进入到mysql查询到了数据再返回List<Goods> goods = goodsMapper.selectList(null);jedis.set("goods", jsonUtils.objectToJson(goods));String s = jedis.get("goods");return s;}}@Overridepublic boolean removeId(Integer id, Jedis jedis) {//如果有数据可删除if (goodsMapper.deleteById(id) > 0) {//删除redis缓存数据jedis.del("goods");//删除mysql中数据goodsMapper.deleteById(id);return true;}return false;}@Overridepublic boolean saves(Goods goods, Jedis jedis) {List<Goods> list = new ArrayList<>();for (int i = 0; i < 3; i++) {list.add(goods);}if (list != null) {//MybatisPlus批量新增saveBatch(list);//刷新redis库jedis.flushDB();return true;}return false;}@Overridepublic boolean Update(Goods goods, Jedis jedis) {if (goods != null) {//修改数据saveOrUpdate(goods);//刷新redis库jedis.flushDB();return true;}return false;}
}
Springboot+Redis+MybatisPlus实现页面缓存增删改查相关推荐
- AJAX面试题:一个页面实现增删改查(ASP.NET实现)
[下载] 很多asp.net程序员面试的时候都遇到过用ajax效果实现一个页面的增删改查.这几个例子分别用纯JS,JQUERY及JSON实现.希望对大家有些帮助. 这里面的例子表格内容的刷新是直接返回 ...
- SpringBoot+Mysql+MDUI实现数据的增删改查和列表操作及单,多文件上传实例
SpringBoot+Mysql+MDUI实现数据的增删改查和列表操作及单,多文件上传实例 开源地址:https://gitee.com/jfkjrym/demo.git evan原创内容!evan原 ...
- 【SpringBoot实战】员工部门管理页面,增删改查,含源码
简介 基于SpringBoot,整合MyBatis, Hibernate, JPA, Druid, bootstrap, thymeleaf等,进行增删改查操作的Demo bootstrap-curd ...
- 基于springboot+thymeleaf+mybatis的员工管理系统 —— 增删改查
员工管理系统 - 增删改查 entity 查询所有功能 查询所有的页面 emplist.html 保存员工 保存员工的页面 addEmp.html 删除员工 修改员工 根据id查询员工 修改员工信息 ...
- (写给像我一样刚离开校园进入公司的小菜鸟)在领域架构下,如何实现简单的展示页面以及增删改查(第二步)...
这一片就简单的介绍实现增删改查 首先是显示所有数据 Service=>>> 1 /// <summary> 2 /// 加载所有数据 3 /// </summary ...
- 使用v-cli创建项目,引入element-ui构建用户管理页面实现增删改查
文章目录 前言 一.使用v-cli创建vue项目文件 二.引入element-ui 三.开始实现功能 1.初步页面,表格绘制 2.实现增加功能 3.实现修改和删除功能 4.实现查询操作 总结 前言 记 ...
- EF-后台登陆+Index页面欢迎+增删改查
1.设计数据库 CREATE TABLE [dbo].[AdminUser]([Id] [int] IDENTITY(1,1) NOT NULL,[Name] [varchar](50) NULL,[ ...
- MybatisPlus使用Wrapper实现增删改查功能
条件构造器的格式说明 导入maven依赖 <dependency><groupId>com.github.jeffreyning</groupId><arti ...
- java springboot整合zookeeper入门教程(增删改查)
java springboot整合zookeeper增删改查入门教程 zookeeper的安装与集群搭建参考:https://www.cnblogs.com/zwcry/p/10272506.html ...
最新文章
- python的pygame游戏开始结束信息_从0开始学python第14.8节-pygame射击游戏(一)
- Apple Mac OS X每日一技巧026:Spotlight打开文件所在的文件夹
- 微信小程序提示框提示
- python采用强制缩进if_Python缩进和选择解析
- 使用get set方法添减属性_头皮银屑病“克星”使用方法,你GET了吗?
- hibernate session 新增、删除,修改、查询样例
- 简单的eda实验vga在linux系统中,EDA实验报告-VGA彩条显示.doc
- 7647 余数相同问题
- ctfshow-WEB-web1签到题
- html中怎样滚动图片,CSS如何实现滚动的图片栏(代码实例)
- unity3d 模拟电脑实现_基于Unity3D的焊接仿真自动运条模拟方法与流程
- 3000行代码之医院信息管理系统(内附MYSQL语句及背景图片)
- 计算机无法装补丁,老司机教你win7 sp1补丁安装失败怎么办
- mac苹果电脑使用耳机听不到声音
- 【JSP课程设计】个人信息管理系统(代码保姆级)
- TLD 源码详解(一)--- TLD的编译和运行
- 修改MySQL密码策略
- matlab norm函数使用_MATLAB 中NORM运用
- 【附源码】计算机毕业设计java英语四六级在线学习系统设计与实现
- swiper 滚回第一个数据_分散能源数据的区块链应用