当前位置: 首页 > article >正文

Spring Boot + MySQL + MyBatis(注解和XML配置两种方式)集成Redis的完整启用及配置详解,包含代码示例、注释说明和表格总结

以下是 Spring Boot + MySQL + MyBatis(注解和XML配置两种方式)集成Redis的完整启用及配置详解,包含代码示例、注释说明和表格总结:


1. 添加依赖

pom.xml中添加Spring Boot对MySQL、MyBatis和Redis的支持依赖:

<dependencies><!-- Spring Boot核心 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MySQL驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><!-- MyBatis集成 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</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-cache</artifactId></dependency><!-- JSON序列化依赖 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>
</dependencies>

2. 配置MySQL和Redis

application.properties中配置数据库和Redis信息:

# MySQL配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# Redis配置
spring.redis.host=localhost
spring.redis.port=6379# 缓存配置
spring.cache.type=redis
spring.cache.redis.key-prefix=myapp_
spring.cache.redis.time-to-live=3600000 # 全局缓存过期时间(1小时)

3. 数据库表结构(MySQL)

CREATE TABLE users (id BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(255) NOT NULL,age INT
);

4. 实体类(User)

public class User {private Long id;private String name;private Integer age;// 构造函数、Getter/Setter省略
}

5. MyBatis Mapper配置(两种方式)

方式1:注解方式
import org.apache.ibatis.annotations.*;
import java.util.List;@Mapper
public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User selectUserById(Long id);@Update("UPDATE users SET name=#{name}, age=#{age} WHERE id=#{id}")void updateUser(User user);@Delete("DELETE FROM users WHERE id=#{id}")void deleteUserById(Long id);
}
方式2:XML配置
  • 创建XML文件src/main/resources/mapper/UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper"><select id="selectUserById" resultType="User">SELECT * FROM users WHERE id = #{id}</select><update id="updateUser">UPDATE users SET name=#{name}, age=#{age} WHERE id=#{id}</update><delete id="deleteUserById">DELETE FROM users WHERE id=#{id}</delete>
</mapper>
  • 配置MyBatis扫描路径:在application.properties中添加:
    mybatis.mapper-locations=classpath:mapper/*.xml
    

6. 自定义Redis缓存配置

创建配置类以自定义Redis的序列化方式和缓存行为:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.time.Duration;@Configuration
public class RedisConfig {@Beanpublic RedisCacheConfiguration redisCacheConfiguration() {return RedisCacheConfiguration.defaultCacheConfig()// 键序列化器为String类型.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))// 值序列化器为JSON类型.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))// 默认缓存过期时间(覆盖全局配置).entryTtl(Duration.ofMinutes(30));}
}

7. Service层集成缓存

在Service层使用@Cacheable@CachePut等注解,结合MyBatis查询:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.*;
import org.springframework.stereotype.Service;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;// 1. 缓存查询用户的结果@Cacheable(value = "userCache", key = "#id")public User getUserById(Long id) {System.out.println("从数据库查询用户ID:" + id);return userMapper.selectUserById(id);}// 2. 更新用户信息并更新缓存@CachePut(value = "userCache", key = "#user.id")public User updateUser(User user) {System.out.println("更新用户缓存:" + user.getId());userMapper.updateUser(user);return user;}// 3. 删除指定用户的缓存@CacheEvict(value = "userCache", key = "#id")public void deleteUserById(Long id) {System.out.println("删除用户缓存:" + id);userMapper.deleteUserById(id);}
}

8. Controller层示例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/api/users")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public User getUser(@PathVariable Long id) {return userService.getUserById(id);}@PutMapping("/update")public User updateUser(@RequestBody User user) {return userService.updateUser(user);}@DeleteMapping("/{id}")public void deleteUser(@PathVariable Long id) {userService.deleteUserById(id);}
}

9. 关键配置与注解总结

模块配置/注解作用示例
依赖mybatis-spring-boot-starter集成MyBatis与Spring Bootpom.xml添加依赖
数据库配置spring.datasource.*配置MySQL连接信息spring.datasource.url=jdbc:mysql://...
Redis配置spring.redis.*配置Redis服务器地址和端口spring.redis.host=localhost
MyBatis注解方式@Mapper标识MyBatis接口映射@Mapper
MyBatis XML方式mybatis.mapper-locations指定XML映射文件路径classpath:mapper/*.xml
缓存管理@EnableCaching启用Spring缓存注解支持主类添加注解
缓存注解@Cacheable缓存方法返回结果,避免重复数据库查询@Cacheable(value = "userCache", key = "#id")
更新缓存@CachePut更新缓存而不影响方法执行(如更新用户信息)@CachePut(value = "userCache", key = "#user.id")
清除缓存@CacheEvict删除指定缓存或全部缓存(如删除用户后清除对应缓存)@CacheEvict(value = "userCache", key = "#id")

10. 注意事项

  1. Mapper配置

    • 注解方式:需在启动类或配置类上添加@MapperScan("com.example.mapper")指定包路径。
    • XML方式:需在application.properties中配置mybatis.mapper-locations
  2. 序列化

    • 默认使用JdkSerializationRedisSerializer,若需JSON序列化需自定义配置(如GenericJackson2JsonRedisSerializer)。
  3. 缓存键设计

    • 确保缓存键唯一且可读,如使用#id动态生成键。
    • 可通过keyGenerator自定义键生成逻辑。
  4. 事务管理

    • 对于数据库操作,需结合@Transactional注解确保数据一致性。

通过以上步骤,可实现Spring Boot + MySQL + MyBatis(注解或XML配置)与Redis的高效集成,利用缓存减少数据库压力,提升系统性能。

相关文章:

Spring Boot + MySQL + MyBatis(注解和XML配置两种方式)集成Redis的完整启用及配置详解,包含代码示例、注释说明和表格总结

以下是 Spring Boot MySQL MyBatis&#xff08;注解和XML配置两种方式&#xff09;集成Redis的完整启用及配置详解&#xff0c;包含代码示例、注释说明和表格总结&#xff1a; 1. 添加依赖 在pom.xml中添加Spring Boot对MySQL、MyBatis和Redis的支持依赖&#xff1a; <d…...

Webpack vs Vite:现代前端构建工具的巅峰对决与选型指南

构建工具的进化革命当雪碧瓶上的水珠折射出前端工程的变迁史&#xff0c;Webpack与Vite的决战已然成为现代前端开发的分水岭。这场始于打包理念的革命&#xff0c;正在重塑整个前端生态的底层逻辑。本文将从原理架构、性能表现、开发体验三个维度&#xff0c;结合真实项目数据对…...

2023-2024总结记录

概括经历 这一年算是一个人生节点&#xff0c;2023年花了一整年的时间在准备考研&#xff0c;基本上等于一个人奋战&#xff0c;我不怎么去图书馆&#xff0c;只呆在无人的实验室&#xff0c;还好有对象陪我&#xff0c;不然可能要抑郁了。作息上还是很随意&#xff0c;什么时…...

技术驱动革新,强力巨彩LED软模组助力创意显示

随着LED显示技术的不断突破&#xff0c;LED软模组因其独特的柔性特质和个性化显示效果&#xff0c;正逐渐成为各类应用场景的新宠。强力巨彩软模组R3.0H系列具备独特的可塑造型能力与技术创新&#xff0c;为商业展示、数字艺术、建筑装饰等领域开辟全新视觉表达空间。    LED…...

Spring 核心技术解析【纯干货版】- XVIII:Spring 网络模块 Spring-WebSocket 模块精讲

在现代 Web 开发中&#xff0c;实时通信已成为提升用户体验的关键技术之一。传统的 HTTP 轮询方式存在较高的延迟和带宽开销&#xff0c;而 WebSocket 作为一种全双工通信协议&#xff0c;能够在客户端和服务器之间建立持久连接&#xff0c;实现高效的双向数据传输。 Spring 框…...

Spark,HDFS概述

HDFS组成构架&#xff1a; 注&#xff1a; NameNode&#xff08;nn&#xff09;&#xff1a;就是 Master&#xff0c;它是一个主管、管理者。 (1) 管理 HDFS 的名称空间&#xff1b; (2) 配置副本策略。记录某些文件应该保持几个副本&#xff1b; (3) 管理数据块&#xff08;…...

【数据结构】图论进阶:生成树、生成森林与权值网络的终极解析

图的基本概念 导读一、图中的树与森林1.1 生成树与生成森林1.1.1 生成树1.1.2 生成森林1.1.3 生成树、生成森林与连通分量结点的关系边的关系 1.2 有向图中的树与森林1.2.1 有向树与有向森林1.2.2 生产有向树与生成有向森林1.2.3 有向树与生成有向树的区别1.2.4 有向森林与生成…...

C和C++(list)的链表初步

链表是构建其他复杂数据结构的基础&#xff0c;如栈、队列、图和哈希表等。通过对链表进行适当的扩展和修改&#xff0c;可以实现这些数据结构的功能。想学算法&#xff0c;数据结构&#xff0c;不会链表是万万不行的。这篇笔记是一名小白在学习时整理的。 C语言 链表部分 …...

深入浅出 TypeScript 泛型:类型安全的艺术与实践

文章目录 一、泛型的核心概念1.1 类型参数&#xff1a;代码中的类型变量1.2 类型推断&#xff1a;让代码保持简洁 二、泛型的四大应用场景2.1 泛型函数&#xff1a;打造通用工具库2.2 泛型接口&#xff1a;定义灵活的数据结构2.3 泛型类&#xff1a;构建类型安全的容器2.4 泛型…...

【KWDB创作者计划】_KaiwuDB 2.1.0 单节点裸机部署

大家好&#xff0c;这里是 DBA学习之路&#xff0c;专注于提升数据库运维效率。 目录 前言KWDB 介绍安装准备环境信息配置要求操作系统软件依赖端口要求安装包下载 部署 KWDB简单实用连接数据库创建数据库创建用户创建时序表 前言 今天无意间在墨天轮看到一个征文活动 征文大赛…...

洛谷题单3-P5720 【深基4.例4】一尺之棰-python-流程图重构

题目描述 《庄子》中说到&#xff0c;“一尺之棰&#xff0c;日取其半&#xff0c;万世不竭”。第一天有一根长度为 a a a 的木棍&#xff0c;从第二天开始&#xff0c;每天都要将这根木棍锯掉一半&#xff08;每次除 2 2 2&#xff0c;向下取整&#xff09;。第几天的时候木…...

前端快速入门学习3——CSS介绍与选择器

1.概述 CSS全名是cascading style sheets,中文名层叠样式表。 用于定义网页样式和布局的样式表语言。 通过 CSS&#xff0c;你可以指定页面中各个元素的颜色、字体、大小、间距、边框、背景等样式&#xff0c;从而实现更精确的页面设计。 HTML与CSS的关系&#xff1a;HTML相当…...

Redash:一个开源的数据查询与可视化工具

Redash 是一款免费开源的数据可视化与协作工具&#xff0c;可以帮助用户快速连接数据源、编写查询、生成图表并构建交互式仪表盘。它简化了数据探索和共享的过程&#xff0c;尤其适合需要团队协作的数据分析场景。 数据源 Redash 支持各种 SQL、NoSQL、大数据和 API 数据源&am…...

嵌入式Linux驱动—— 1 GPIO配置

目录 1.GPIO操作 1.1 IO命名 1.2 GPIO 时钟使能&#xff08;CCM&#xff09; 1.3 IO 复用&#xff08;IOMUXC&#xff09; 1.4 IO 配置 1.5 GPIO 配置 1.GPIO操作 GPIO操作主要是以下流程&#xff1a; 使能某组GPIO模块&#xff08;GPIO1、2、...&#xff09;&#…...

[ICLR 2025]Biologically Plausible Brain Graph Transformer

论文网址&#xff1a;Biologically Plausible Brain Graph Transformer 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 …...

SpringBoot+MyBatis Plus+PageHelper+vue+mysql 实现用户信息增删改查功能

静态资源展示 &#xff08;1&#xff09;静态资源下载 &#xff08;2&#xff09;下载后文件放到resources/static 目录下 (3) main函数启动项目访问对应文件&#xff0c;http://127.0.0.1:8080/user-list.html 数据库添加表和数据 SET FOREIGN_KEY_CHECKS0;-- --------…...

企业常用Linux服务搭建

1.需要两台centos 7服务器&#xff0c;一台部署DNS服务器&#xff0c;另一台部署ftp和Samba服务器。 2. 部署DNS 服务器​ #!/bin/bash# 更新系统 echo "更新系统..." sudo yum update -y# 安装 BIND 和相关工具 echo "安装 BIND 和相关工具..." sudo y…...

Qwen-7B-Chat 本地化部署使用

通义千问 简介 通义千问是阿里云推出的超大规模语言模型&#xff0c;以下是其优缺点&#xff1a; 优点 强大的基础能力&#xff1a;具备语义理解与抽取、闲聊、上下文对话、生成与创作、知识与百科、代码、逻辑与推理、计算、角色扮演等多种能力。可以续写小说、编写邮件、解…...

QGIS获取建筑矢量图-Able Software R2V

1.QGIS截图 说明&#xff1a;加载天地图矢量图层&#xff0c;然后进行截图。 2.Able Software R2V 说明&#xff1a;Able Software R2V 是一款​​将光栅图像&#xff08;如扫描图纸、航拍照片&#xff09;自动转换为矢量图形&#xff08;如DXF格式&#xff09;​​的软件&a…...

CSS:换行与不换行

一、CSS 不允许换行 在 CSS 中&#xff0c;有几种方法可以控制文本不换行&#xff1a; 1. 使用 white-space 属性 .no-wrap {white-space: nowrap; } white-space: nowrap; 会强制文本在一行显示&#xff0c;不换行。 2. 使用 overflow 和 text-overflow 通常与 white-sp…...

【MiniMind】不能全局用 `pip install --upgrade pip`

Q&#xff1a;WARNING: Running pip as the ‘root’ user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.…...

form实现pdf文件转换成jpg文件

说明&#xff1a; 我希望将pdf文件转换成jpg文件 请去下载并安装 Ghostscript&#xff0c;gs10050w64.exe 配置环境变量&#xff1a;D:\Program Files\gs\gs10.05.0\bin 本地pdf路径&#xff1a;C:\Users\wangrusheng\Documents\name.pdf 输出文件目录&#xff1a;C:\Users\wan…...

STM32单片机入门学习——第13节: [6-1] TIM定时中断

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.04 STM32开发板学习——第13节: [6-1] TIM定时中断 前言开发板说明引用解答和科普一…...

量子纠错码实战:从Shor码到表面码

引言&#xff1a;量子纠错的必要性 量子比特的脆弱性导致其易受退相干和噪声影响&#xff0c;单量子门错误率通常在10⁻~10⁻量级。量子纠错码&#xff08;QEC&#xff09;通过冗余编码测量校正的机制&#xff0c;将逻辑量子比特的错误率降低到可容忍水平。本文从首个量子纠错…...

【2】搭建k8s集群系列(二进制)之安装etcd数据库集群

一、etcd服务架构 Etcd 是一个分布式键值存储系统&#xff0c;Kubernetes 使用 Etcd 进行数据存储&#xff0c;所以先 准备一个 Etcd 数据库&#xff0c;为解决 Etcd 单点故障&#xff0c;应采用集群方式部署&#xff0c;这里使用 3 台组建集群&#xff0c;可容忍 1 台机器故障…...

Linux常用命令详解:从基础到进阶

目录 一、引言 二、文件处理相关命令 &#xff08;一&#xff09;grep指令 &#xff08;二&#xff09;zip/unzip指令 ​编辑 &#xff08;三&#xff09;tar指令 &#xff08;四&#xff09;find指令 三、系统管理相关命令 &#xff08;一&#xff09;shutdown指…...

【Docker】使用Docker快速部署n8n和unclecode/crawl4ai

Docker部署自动化工具n8n和crawl4ai详细教程 前言 本文将详细介绍如何使用 Docker 来部署和运行自动化工作流工具 n8n 以及 crawl4ai。这两个工具对于需要进行自动化工作流程的开发者来说都非常有用。 一、环境准备 在开始之前&#xff0c;请确保您的系统已经安装了&#x…...

数据库权限获取

1. into outfile(手写) 1.1. 利用条件 • web 目录具有写入权限,能够使用单引号 • 知道网站绝对路径(根目录,或则是根目录往下的目录都行) • secure_file_priv 没有具体值(在 mysql/my.ini 中查看) 1.2. secure_file_priv 介绍 secure_file_priv 是用来限制 loa…...

基于spring boot的外卖系统的设计与实现【如何写论文思路与真正写出论文】

目录 系统开发实现链接&#xff1a; 背景与分析&#xff1a; 背景&#xff08;题目&#xff09;&#xff1a; 用户功能 配送员功能 管理员功能 分析&#xff1a; 过程&#xff08;主体展示为主&#xff0c;部分功能不一一展示&#xff09;&#xff1a; 目录 论文前面…...

Kubernetes 存储 Downward API

1.介绍 1.提供容器元数据 比如我们 golang语言 我们说他会根据当前CPU的数量 以此去确认我们的进程 线程 和协程之间的关系 以此去释放我们当前CPU的更大的 这么一个并行任务的能力 但是这里会出现一个问题 容器它是把当前的应用 封装在我们固定的名称空间了 而且给它以特定的…...