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实现页面缓存增删改查相关推荐

  1. AJAX面试题:一个页面实现增删改查(ASP.NET实现)

    [下载] 很多asp.net程序员面试的时候都遇到过用ajax效果实现一个页面的增删改查.这几个例子分别用纯JS,JQUERY及JSON实现.希望对大家有些帮助. 这里面的例子表格内容的刷新是直接返回 ...

  2. SpringBoot+Mysql+MDUI实现数据的增删改查和列表操作及单,多文件上传实例

    SpringBoot+Mysql+MDUI实现数据的增删改查和列表操作及单,多文件上传实例 开源地址:https://gitee.com/jfkjrym/demo.git evan原创内容!evan原 ...

  3. 【SpringBoot实战】员工部门管理页面,增删改查,含源码

    简介 基于SpringBoot,整合MyBatis, Hibernate, JPA, Druid, bootstrap, thymeleaf等,进行增删改查操作的Demo bootstrap-curd ...

  4. 基于springboot+thymeleaf+mybatis的员工管理系统 —— 增删改查

    员工管理系统 - 增删改查 entity 查询所有功能 查询所有的页面 emplist.html 保存员工 保存员工的页面 addEmp.html 删除员工 修改员工 根据id查询员工 修改员工信息 ...

  5. (写给像我一样刚离开校园进入公司的小菜鸟)在领域架构下,如何实现简单的展示页面以及增删改查(第二步)...

    这一片就简单的介绍实现增删改查 首先是显示所有数据 Service=>>> 1 /// <summary> 2 /// 加载所有数据 3 /// </summary ...

  6. 使用v-cli创建项目,引入element-ui构建用户管理页面实现增删改查

    文章目录 前言 一.使用v-cli创建vue项目文件 二.引入element-ui 三.开始实现功能 1.初步页面,表格绘制 2.实现增加功能 3.实现修改和删除功能 4.实现查询操作 总结 前言 记 ...

  7. EF-后台登陆+Index页面欢迎+增删改查

    1.设计数据库 CREATE TABLE [dbo].[AdminUser]([Id] [int] IDENTITY(1,1) NOT NULL,[Name] [varchar](50) NULL,[ ...

  8. MybatisPlus使用Wrapper实现增删改查功能

    条件构造器的格式说明 导入maven依赖 <dependency><groupId>com.github.jeffreyning</groupId><arti ...

  9. java springboot整合zookeeper入门教程(增删改查)

    java springboot整合zookeeper增删改查入门教程 zookeeper的安装与集群搭建参考:https://www.cnblogs.com/zwcry/p/10272506.html ...

最新文章

  1. python的pygame游戏开始结束信息_从0开始学python第14.8节-pygame射击游戏(一)
  2. Apple Mac OS X每日一技巧026:Spotlight打开文件所在的文件夹
  3. 微信小程序提示框提示
  4. python采用强制缩进if_Python缩进和选择解析
  5. 使用get set方法添减属性_头皮银屑病“克星”使用方法,你GET了吗?
  6. hibernate session 新增、删除,修改、查询样例
  7. 简单的eda实验vga在linux系统中,EDA实验报告-VGA彩条显示.doc
  8. 7647 余数相同问题
  9. ctfshow-WEB-web1签到题
  10. html中怎样滚动图片,CSS如何实现滚动的图片栏(代码实例)
  11. unity3d 模拟电脑实现_基于Unity3D的焊接仿真自动运条模拟方法与流程
  12. 3000行代码之医院信息管理系统(内附MYSQL语句及背景图片)
  13. 计算机无法装补丁,老司机教你win7 sp1补丁安装失败怎么办
  14. mac苹果电脑使用耳机听不到声音
  15. 【JSP课程设计】个人信息管理系统(代码保姆级)
  16. TLD 源码详解(一)--- TLD的编译和运行
  17. 修改MySQL密码策略
  18. matlab norm函数使用_MATLAB 中NORM运用
  19. 【附源码】计算机毕业设计java英语四六级在线学习系统设计与实现
  20. swiper 滚回第一个数据_分散能源数据的区块链应用

热门文章

  1. Python统计词频的几种方法
  2. 1.7-04:石头剪子布
  3. 5G连接器存在怎样的魔力?
  4. HDU2048神、上帝以及老天爷 (错排公式)
  5. 联想昭阳E260 XP驱动
  6. [已解决]win10pdf默认打开方式开机自动变为edge浏览器的解决办法
  7. PopupMenu的简要使用
  8. 什么是Vue.js?适合入门小白(笔记1)
  9. linux top显示不全
  10. 【转义字符】HTML、JS常用转义字符