springboot 整合mybatis和redis

SpringBoot+MyBatis+Redis整合(记录) 整合分为两步:1、整合MyBatis;2、整合Redis。 一、整合MyBatis。 1、创建SpringBoot项目。 2、在resources下的application.properties配置里添加如下代码: server.port=8090 ## 数据库设置 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/db 阅读详情

1.pom文件

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.2.RELEASE</version>
	</parent>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
	</dependencies>

2.配置文件/src/main/resources/application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=HlztLhy
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

mybatis.mapper-locations= classpath:mapper/*.xml
mybatis.configuration.cache-enabled=true

spring.redis.database=0
#server host
spring.redis.host=localhost
#server password
spring.redis.password=
#connection port
spring.redis.port=6379

3.RedisTemplate 的 java bean

package com.knife.bootmybatis;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;

@Configuration
public class RedisConfig {

    /**
     * 存入对象序列化信息
     * @return
     */
    @Bean
    public RedisTemplate<String,Object> redisSerizlizerObj(RedisConnectionFactory redisConnectionFactory){
    	
    	RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);  
        jackson2JsonRedisSerializer.setObjectMapper(om);

        // 设置值(value)的序列化采用Jackson2JsonRedisSerializer。
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        // 设置键(key)的序列化采用StringRedisSerializer。
        redisTemplate.setKeySerializer(new StringRedisSerializer());

        redisTemplate.afterPropertiesSet();
        return redisTemplate;

    }
    
}

4.自定义cach类

package com.knife.bootmybatis;

import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

import org.apache.ibatis.cache.Cache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.CollectionUtils;

public class MybatisRedisCache implements Cache {

    private static final Logger logger = LoggerFactory.getLogger(MybatisRedisCache.class);

    // 读写锁
    private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(true);
    
    private static ApplicationContext applicationContext;
    
    private static RedisTemplate<String, Object> redisTemplate;

    public static ApplicationContext getApplicationContext() {
		return applicationContext;
	}

	public static void setApplicationContext(ApplicationContext applicationContext) {
		MybatisRedisCache.applicationContext = applicationContext;
		redisTemplate = SpringContextHolder.getBean("redisTemplate");
	}

	private String id;

    public MybatisRedisCache(final String id) {
        if (id == null) {
            throw new IllegalArgumentException("Cache instances require an ID");
        }
        logger.info("Redis Cache id " + id);
        this.id = id;
    }

    @Override
    public String getId() {
        return this.id;
    }

    @Override
    public void putObject(Object key, Object value) {
        if (value != null) {
            // 向Redis中添加数据,有效时间是2天
            redisTemplate.opsForValue().set(key.toString(), value, 2, TimeUnit.DAYS);
        }
    }

    @Override
    public Object getObject(Object key) {
        try {
            if (key != null) {
                Object obj = redisTemplate.opsForValue().get(key.toString());
                return obj;
            }
        } catch (Exception e) {
            logger.error("redis ");
        }
        return null;
    }

    @Override
    public Object removeObject(Object key) {
        try {
            if (key != null) {
                redisTemplate.delete(key.toString());
            }
        } catch (Exception e) {
        }
        return null;
    }

    @Override
    public void clear() {
        logger.debug("清空缓存");
        try {
            Set<String> keys = redisTemplate.keys("*:" + this.id + "*");
            if (!CollectionUtils.isEmpty(keys)) {
                redisTemplate.delete(keys);
            }
        } catch (Exception e) {
        }
    }

    @Override
    public int getSize() {
        Long size = (Long) redisTemplate.execute(new RedisCallback<Long>() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                return connection.dbSize();
            }
        });
        return size.intValue();
    }

    @Override
    public ReadWriteLock getReadWriteLock() {
        return this.readWriteLock;
    }

    
}

5.模型 要实现Serializable

package com.knife.bootmybatis;

import java.io.Serializable;

public class User implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private int id;
	private String name;
	private String pw;
	private int state;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPw() {
		return pw;
	}

	public void setPw(String pw) {
		this.pw = pw;
	}

	public int getState() {
		return state;
	}

	public void setState(int state) {
		this.state = state;
	}

	public String toString() {
		return "id:" + id + " name:" + name;
	}
}

6.mapper

package com.knife.bootmybatis;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper {
	public List<User> all();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.knife.bootmybatis.UserMapper">

	<cache type="com.knife.bootmybatis.MybatisRedisCache" />
	<select id="all" resultType="com.knife.bootmybatis.User">
		<![CDATA[
			select * from user
		]]>
	</select>

</mapper>

7.初始化

package com.knife.bootmybatis;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class App {
	
	public static void main(String[] args) {
		MybatisRedisCache.setApplicationContext(SpringApplication.run(App.class, args));
	}
}

8.测试接口

package com.knife.bootmybatis;



import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class C {

	@Autowired
	private UserMapper dao;
	
	
	@RequestMapping("list")
	@ResponseBody
	public Object getUser(){
		return dao.all();
	}
}

9.结果

访问测试接口

查看redis

springboot+mybatis+redis实现二级缓存 Mybatis提供了对缓存的支持,分为一级缓存和二级缓存,其查询顺序为:二级缓存>一级缓存->数据库,最原始是直接查询数据库,为了提高效率和节省资源,引入了一级缓存,为了进一步提高效率,引入了二级缓存。Mybatis一级缓存是sqlSession级别的缓存,缓存的数据只在sqlSession内有效。Mybatis二级缓存是mapper级别的缓存,同一个namespace公用这一个缓存,对sqlSession是共享的。 阅读详情

相关推荐

SpringBoot整合Mybatis和Redis

Java配置的方式 Spring从开始出现到现在,共经历了5个大的版本,并依次推出了3种配置方式:XML配置,注解配置和Java配置。 实现Java配置方式 示例:创建一个userBean: public class User { private Integer userId; private String userName; public User() { } @Override public String toString() {

yananye的博客 1451

SpringBoot+mybatis+redis的简单使用

spring boot、mybatis、redis的简单整合

避免再次发明轮子( 1859

springboot+mybatis+redis整合

springBoot+mybatis+redis整合,这里搭建一个简单的框架是为了记录怎么使用redis做缓存。 一、构建一个springboot的maven项目,目录结构如下: 二、在pom.xml文件中引入依赖jar包 <dependencies> <dependency> <groupId>org.sprin...

qq_39660344的博客 1101

springboot+mybatis-plus+redis整合(附上脚手架完整代码)

首先新建一个springboot项目 next到这里的时候,我们可以选择用jdk几,还有就是group,这个一般就是com.公司名字了,artifact就是项目名字。个人开发我还是喜欢用com.名字前缀哈。 到了这一步的话,如果对这个项目有什么别的需求,比如需要用到mybatis啥的可以勾相应的选项。其实就是idea自动帮咱导入相关的依赖。这里我们暂且啥也不勾。写过这么多的项目,咱们自己整合的依赖还是挺香的哈。 2:导入依赖 可能我比较懒,喜欢用mybatisplus,这些是整合mybatisplus需要

风团团 6880

Java之Spring Boot入门到精通【IDEA版】SpringBoot整合其他框架【Junit,Redis,MyBatis

创建数据库!t_useridusernamepasswordidt_user*/t_useridusernamepassword创建实体类return id;

m0_60635609的博客 1208

LaTeX伪代码字体大小调整全攻略:从algorithm到algorithm2e的实战技巧

本文详细介绍了在LaTeX中调整伪代码字体大小的全面技巧,涵盖algorithm、algorithmicx和algorithm2e等主流算法包的使用方法。从基础命令到高级配置,帮助用户解决学术论文和技术文档中的伪代码排版问题,提升算法展示的专业性和可读性。特别针对不同期刊格式要求,提供了实用的字体调整方案。

weixin_29297127的博客 437

springboot+mybatis+redis整合(超方便的框架)

springboot+mybatis+redis整合(超方便的框架)一、先整合springboot+mybatis(_一定要注意自己的springboot版本,去找对应版本的参考,不然坑很多~_)1、创建好springboot框架项目2、添加pom.xml的jar包依赖(所有)3、把数据库中的表建好(注意使用建表语句创建表,直接使用工具创建一直失败,PS:似乎是编码格式的问题~)4、把model里...

萝卜坑 1万+

JavaFx之集成FontAwesomeFX与JFoenix(十五)

本文详细介绍了如何在JavaFx项目中同时集成JFoenix和FontAwesomeFX,以创建现代化、美观的桌面应用界面。通过Maven依赖配置、动态代码创建和FXML静态声明两种方式,演示了如何将JFoenix的Material Design控件与FontAwesomeFX的丰富矢量图标完美结合,并提供了实战案例展示如何构建一个功能完善的现代化工具栏。

pepsi的博客 437

springboot 整合 Mybatis、JPA、Redis

引言 在springboot 项目中,我们是用ORM 框架来操作数据库变的非常方便。下面我们分别整合mysql ,spring data jpa 以及redis 。让我们感受下快车道。 我们首先创建一个springboot 项目,创建好之后,我们来一步步的实践。 使用mybatis 引入依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis

程序员爱酸奶 1万+

PDF与OFD电子发票解析技术实战:从格式转换到精准识别

本文深入探讨了PDF与OFD电子发票解析技术的实战应用,从格式转换到精准识别,提供了全面的解决方案。通过OFD转PDF技术、动态定位算法和多重校验机制,显著提升电子发票识别效率与准确率,助力企业财务数字化转型。

weixin_42565652的博客 164

基于ESP32的无线DMX节点设计:从Art-Net/sACN到DMX512的协议转换与实现

在舞台灯光和建筑照明控制系统中,DMX512是行业标准的数字调光协议,用于控制灯具的亮度、颜色和效果。其原理是通过RS-485差分信号串行传输512个通道的数据,每个通道对应一个控制值。然而,传统有线DMX布线复杂、成本高,在移动装置、历史建筑或临时活动中部署困难。为解决此问题,业界发展出了基于以太网的灯光控制协议,如Art-Net和sACN(E1.31),它们将DMX数据封装在UDP包中,通过网络传输。这项技术的核心价值在于实现了灯光控制的网络化与无线化,大幅提升了系统的灵活性和部署效率。其典型应用场景包

weixin_30175731的博客 227

Spring Boot整合 MyBatis 和 Redis

Spring Boot整合 MyBatis 和 Redis 1.Java配置的方式 1.1初识 Java 配置的方式 spring从开始出现到现在,共经历了5个大的版本,并一次推出了3种配置方式: XML配置方式 优点:便于阅读、与业务代码解耦 缺点:解析XML影响性能、开发工作量大,编译器不可校验配置正确性 注解配置方式 优点:开发便捷、编译期可校验配置正确性 缺点:注解与代码绑定,配置分散,不利于统一处理 Java配置方式 优点:编译期可校验配置正确性、配置简单,方便维护和管理、可以使

m0_61311086的博客 1997

硅传CC1310二次开发必备:手把手教你用JTAG解锁被锁定的Flash存储器

本文针对硅传CC1310模块二次开发中常见的Flash锁定问题,提供了从原理剖析到实战操作的完整解决方案。详细介绍了如何使用Uniflash和Flash Programmer 2等工具进行Flash解锁和擦除,并强调了硬件连接稳定性与供电质量的关键作用,帮助开发者彻底解决烧录障碍,为后续应用开发铺平道路。

weixin_29189373的博客 253

springboot整合mybatis和redis

关于SpringBoot介绍 所谓SpringBoot并不是对于spring技术的扩展.其实它的出现就是为了让我们更好的使用spring技术,简化了我们的开发,让我们使用spring技术开发项目变得更加方便快捷. SpringBoot的特点 == 起步依赖== 所谓起步依赖就是说我们在项目开始的时候导入一些坐标,这里导入一个坐标就相当于我们在spring中导入许多坐标,大大的简化了我们导入坐标的操作. == 自动配置== 所谓自动配置就是说我们在使用spring的时候,通常会写大量的配置文件,但是spri

qq_44334291的博客 360

2026年信创系统技术应用专业人才培养基地建设方案(高职、信创新专业、人才培养、专业代码:510221)

响应国家信创产业战略及教育部新增“信创系统技术应用”专业(代码510221)的部署,联合麒麟软件、华为鸿蒙等领军企业,建设高水平信创人才培养基地。方案基于国家政策导向(如2027年央企全面国产化替代目标)和行业人才缺口(2025年缺口超80万人),提出以“产教融合、创新驱动”为核心,构建集教学、实训、认证于一体的综合性培养体系。 建设内容涵盖五大方向: 专业规划:分三阶段(2025-2030年)推进专业申报、课程开发与区域辐射,最终建成区域性信创技术创新平台。 课程体系:围绕运维、云计算、数据库、适配

啊碧根果的博客 1596

嵌入式STM32F407CET6移植OpenHarmony系统方法

文件末尾添加:export PATH=~/gcc-arm-none-eabi-10-2020-q4-major/bin:$PATH。编译完成文件输出在LiteOs源码目录下out/STM32F407_ATK_Explorer文件夹中。②点击connect to the target,下方会自动显示识别出来的芯片型号以及flash大小。⑤点击program verify并点击start,等待烧写并校验完成,你就能看到程序正在运行了。,在选择刚才我们说的Huawei_LiteOS.hex文件。

嵌入式技术开发 546

SpringBoot整合Mybatis和Redis案例

项目结构: 一、引入相关jar <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <depende...

hq.zheng的博客 977

别再让 AI 瞎写 SAP 代码了!这套 Claude Code Skill 的验证机制才是关键

本文深入解析了专为SAP CAP开发设计的AI辅助工具sap-cap-capire的技术架构。该工具采用四层设计:协议层集成MCP和LSP实现实时模型访问与语法检查;智能层通过4个专业化Agent(数据建模、服务开发等)分工协作;验证层确保代码质量;知识层存储文档模板。这种工程化设计解决了通用AI在CAP开发中面临的上下文不足、专业性缺失和代码质量保证等核心问题,通过本地化服务和实时反馈机制显著提升了开发效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 882

SpringBoot整合Mybatis 与 Redis

1.SpringBoot整合Mybatis 1.1导入依赖 <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-st...

qq_44784185的博客 361

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【SpringBoot 框架】- SpringBoot 整合 Mybatis、Junit、Redis

SpringBoot 系列: 【SpringBoot 框架】- 入门——环境搭建、工程热部署、idea快捷创建SpringBoot项目【SpringBoot 框架】- SpringBoot 原理分析【SpringBoot 框架】- SpringBoot 配置文件【SpringBoot 框架】- SpringBoot 整合 Mybatis、Junit、Redis 目录 零、前言 一、Sp...

ONESTARの博客 5769

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Springboot整合Redis作为Mybatis的二级缓存

文章转载声明:转载请附带原文链接 0. 环境准备 以下是我本机的环境: SpringBoot2.3.x Mybatis3.x Redis5.x 本机或者服务器中搭建好redis环境,并启动成功!这里我用的是阿里云学生机上部署的redis5.x IDEA2020.x ,Eclipse2020也是可以的,编辑器选择无所谓! 1. 新版本springboot和IDEA编辑器踩坑(可以直接跳过该章节,遇到类似的错误再回头看) 如果您在实操过程中,使用的是IDEA2020 和springboot2.3.x 版.

兴趣使然的草帽路飞 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring Boot整合mybatis和redis

一、Spring Boot整合mybatis 1、项目结构 2、pom.xml配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...

qq_36908783的博客 396

SpringBoot整合MyBatis和Redis

SpringBoot整合Mybatis和Redis

weixin_47541976的博客 788

SpringBoot整合Redis、MyBatis-Plus

最近笔者在搭一个自己的小框架,基于SpringBoot全家桶整合了SpringSecurity、Redis、MyBatis-Plus、RSA加密等,所以我打算将搭建过程记录下来以做学习只用,好了废话不多说,下面开始。 针对Redis在项目中的使用场景,最基础的便是存取用户登录凭证----token,所以必须使用数据库去查询登录用户信息,那么文章就先从整合MyBatis-Plus开始。 SpringBoot整合MyBatis-Plus 写在前面: MyBatis-Plus是一个非常强大且轻量的ORM框架,

FirstMrRight的博客 1210

springboot整合mybatis 使用redis 缓存

Auth:TIAN Time:2019年4月13日 e-mail:zhangqihao@hnu.edu.cn 开发环境:window10 IDEA2018 1、安装docker & redis 如果不清楚docker是什么,请查看docker的文档和简介,这里给出docker的安装过程 1.1 安装虚拟机(如果有远程服务器的,请略过此步骤) 本文推荐VMvare,...

weixin_42060512的博客 654
上一篇: mybatis 整合 mybatis-redis
下一篇: springboot 打war包
knife1220
博客等级 码龄15年 33粉丝 176原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值