SpringBoot整合Mysql和Redis的详细过程

目录
  • 一、项目创建
    • 1.1创建项目
    • 1.2目录结构
    • 1.3pom.xml配置文件
  • 二、初始化数据库
  • 三、初始化代码
    • 3.1实体类entity
    • 3.2Mapper接口类
    • 3.3Redis工具类
    • 3.4Service层
    • 3.5Controller层
  • 四、单元测试
    • 4.1Respository和Service层单元测试
    • 4.2Controller层接口测试

一、项目创建

1.1 创建项目

在IDEA中,File--New--Project--Spring Initializer

名称为springboot-mysql-redis

1.2 目录结构

1.3 pom.xml配置文件

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
    username: root
    password: 1234

  redis:
    host: localhost
    port: 6379

server:
  port: 8080
mybatis:
  mapper-locations: classpath:mapper/*xml
  type-aliases-package: com.xsbc.entity
  # 开启驼峰命名
  configuration:
    map-underscore-to-camel-case: true

二、初始化数据库

drop database if exists blog;
create database blog;
user blog;
drop table if exists user;
create table user(
	id int(11) not null,
	name varchar(255) DEFAULT "",
	age int(11) DEFAULT 0,
	PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

insert into user values(1,'小王',20);
insert into user values(2,'老李',23);

三、初始化代码

3.1 实体类entity

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private int id;
    private String name;
    private int age;
}

3.2 Mapper接口类

@Mapper
public interface UserMapper {
    List<User> getAllUsers();
    int updateUser(Integer id);
}

xml映射文件

<?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.xsbc.mapper.UserMapper">
    <select id="getAllUsers" resultType="com.xsbc.entity.User">
        select * from user
    </select>

    <!--   User类的id参数是int类型,mysql默认是Integer -->
    <update id="updateUserAgeById" parameterType="java.lang.Integer">
        update user set age=age+2 where id=#{id}
    </update>
</mapper>

3.3 Redis工具类

1)config包创建类

Redis常量类RedisConstant

public class RedisConstant {
    public static String ALL_USER_KEY="allUser";
}

Redis配置类RedisConfig

@Configuration
public class RedisConfig {
    @Resource
    private RedisTemplate redisTemplate;

    @Bean
    public RedisTemplate redisTemplateInit(){
        //序列化key的实例化对象
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //序列化value的实例化对象
        redisTemplate.setValueSerializer(
            new GenericJackson2JsonRedisSerializer());
        return redisTemplate;
    }
}

2)util包下创建类

@Component
public class RedisUtil {
    @Resource
    private RedisTemplate<String,Object> redisTemplate;

    public void setRedisTemplate(RedisTemplate<String,Object> redisTemplate){
        this.redisTemplate=redisTemplate;
    }
    // 指定缓存失效时间
    public boolean expire(String key,long time) {
        try {
            if (time > 0) {
                redisTemplate.expire(key, time, TimeUnit.SECONDS);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    // 根据key获取过期时间
    public long getExpire(String key){
        return redisTemplate.getExpire(key,TimeUnit.SECONDS);
    // 判断key是否存在
    public boolean hasKey(String key){
            return redisTemplate.hasKey(key);
        }catch(Exception e){
    // 删除缓存
    @SuppressWarnings("unchecked")
    public void del(String... key){
        if (key!=null&&key.length> 0){
            if (key.length==1) {
                redisTemplate.delete(key[0]);
            }else{
              redisTemplate.delete(
                (Collection<String>)CollectionUtils.arrayToList(key));
    // 普通缓存获取
    public Object get(String key){
        return key==null?null:redisTemplate.opsForValue().get(key);
    // 普通缓存放入
    public boolean set(String key,Object value){
            redisTemplate.opsForValue().set(key,value);
    // 普通缓存放入并设置时间
    public boolean set(String key,Object value,long time){
        try{
            if(time>0){
                redisTemplate.opsForValue()
                             .set(key,value,time,TimeUnit.SECONDS);
                set(key,value);
    // 递增
    public long incr(String key,long delta){
        if(delta<0){
            throw new RuntimeException("递增因子必须大于0");
        return redisTemplate.opsForValue().increment(key,delta);
    // 递减
    public long decr(String key, long delta){
            throw new RuntimeException("递减因子必须大于0");
        return redisTemplate.opsForValue().increment(key,-delta);
    // HashGet
    public Object hget(String key,String item){
        return redisTemplate.opsForHash().get(key,item);
    // 获取hashKey对应的所有键值
    public Map<Object, Object> hmget(String key){
        return redisTemplate.opsForHash().entries(key);
    // HashSet
    public boolean hmset(String key,Map<String, Object> map){
            redisTemplate.opsForHash().putAll(key,map);
    // HashSet 并设置时间
    public boolean hmset(String key,Map<String, Object> map,long time){
            redisTemplate.opsForHash().putAll(key, map);
            if (time>0){
                expire(key,time);
    // 向一张hash表中放入数据,如果不存在将创建
    public boolean hset(String key,String item,Object value){
            redisTemplate.opsForHash().put(key,item,value);
    public boolean hset(String key,String item,Object value,long time){
    // 删除hash表中的值
    public void hdel(String key,Object... item) {
        redisTemplate.opsForHash().delete(key,item);
    // 判断hash表中是否有该项的值
    public boolean hHasKey(String key,String item) {
        return redisTemplate.opsForHash().hasKey(key,item);
    // hash递增 如果不存在,就会创建一个 并把新增后的值返回
    public double hincr(String key,String item,double by) {
        return redisTemplate.opsForHash().increment(key,item,by);
    // hash递减
    public double hdecr(String key,String item,double by) {
        return redisTemplate.opsForHash().increment(key,item,-by);
    // 根据key获取Set中的所有值
    public Set<Object> sGet(String key) {
            return redisTemplate.opsForSet().members(key);
            return null;
    // 根据value从一个set中查询,是否存在
    public boolean sHasKey(String key,Object value) {
            return redisTemplate.opsForSet().isMember(key,value);
    // 将数据放入set缓存
    public long sSet(String key,Object... values) {
            return redisTemplate.opsForSet().add(key,values);
            return 0;
    // 将set数据放入缓存
    public long sSetAndTime(String key,long time,Object... values){
            Long count=redisTemplate.opsForSet().add(key,values);
            if (time> 0)expire(key, time);
            return count;
    // 获取set缓存的长度
    public long sGetSetSize(String key){
            return redisTemplate.opsForSet().size(key);
    // 移除值为value的
    public long setRemove(String key,Object... values){
            Long count=redisTemplate.opsForSet().remove(key,values);
    // 获取list缓存的内容
    public List<Object> lGet(String key,long start,long end){
            return redisTemplate.opsForList().range(key,start,end);
    // 获取list缓存的长度
    public long lGetListSize(String key){
            return redisTemplate.opsForList().size(key);
    // 通过索引 获取list中的值
    public Object lGetIndex(String key,long index){
            return redisTemplate.opsForList().index(key,index);
    // 将list放入缓存
    public boolean lSet(String key, Object value){
            redisTemplate.opsForList().rightPush(key,value);
    public boolean lSet(String key,Object value,long time){
            if (time > 0) expire(key, time);
    public boolean lSet(String key, List<Object> value){
            redisTemplate.opsForList().rightPushAll(key,value);
    public boolean lSet(String key,List<Object> value,long time){
            if(time>0) expire(key, time);
    // 根据索引修改list中的某条数据
    public boolean lUpdateIndex(String key,long index,Object value){
            redisTemplate.opsForList().set(key,index,value);
    // 移除N个值为value
    public long lRemove(String key,long count,Object value){
            Long remove=redisTemplate.opsForList().remove(key,count,value);
            return remove;
}

3.4 Service层

1)UserService接口类

public interface UserService {
    public List<User> getAllUsers();
    public void updateUserAge();
}

2)接口实现类

@Service("userService")
public class UserServiceImpl implements UserService {
    @Resource
    private UserMapper userMapper;

    @Autowired
    private RedisUtil redisUtil;
    @Override
    public List<User> getAllUsers() {
        List<User> users=(List<User>)redisUtil
                            .get(RedisConstant.ALL_USER_KEY);
        if(CollectionUtils.isEmpty(users)){
            users=userMapper.getAllUsers();
            redisUtil.set(RedisConstant.ALL_USER_KEY,users);
        }
        return users;
    }
    @Transactional
    public void updateUserAge() {
        redisUtil.del(RedisConstant.ALL_USER_KEY);
        userMapper.updateUserAgeById(1);
        userMapper.updateUserAgeById(2);
}

3.5 Controller层

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/getAll")
    @ResponseBody
    public List<User> getUsers(){
        return userService.getAllUsers();
    }

    @RequestMapping("/update")
    @ResponseBody
    public int updateUser(){
        userService.updateUserAge();
        return 1;
    }
}

四、单元测试

4.1 Respository和Service层单元测试

@SpringBootTest
class SpringbootMysqlRedisApplicationTests {

    @Autowired
    private UserMapper userMapper;
    private UserService userService;
    @Test
    void testUserMapper(){
        userMapper.updateUserAgeById(1);
        List<User> users=userMapper.getAllUsers();
        for(User user:users){
            System.out.println(user);
        }
    }
    void testUserService(){
        userService.updateUserAge();
        List<User> users=userService.getAllUsers();
}

4.2 Controller层接口测试

到此这篇关于SpringBoot整合Mysql、Redis的文章就介绍到这了,更多相关SpringBoot整合Mysql、Redis内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Springboot整合camunda+mysql的集成流程分析

    一.创建springboot工程 使用IDEA工具,选择File->New->Project,选择Spring Initialzr 输入springboot工程基本信息,本示例命名为"camunda-demo1", jdk版本选择8 在选择springboot组件的时候,需要选择Spring Web.JDBC API.MySql Driver 这三个组件.点击下一步完成即可. 二.修改maven配置 2.1.修改springboot版本号 由于camunda版本与sprin

  • SpringBoot整合Sharding-JDBC实现MySQL8读写分离

    目录 一.前言 二.项目目录结构 三.pom文件 四.配置文件(基于YAML)及SQL建表语句 五.Mapper.xml文件及Mapper接口 六 .Controller及Mocel文件 七.结果 八.Sharding-JDBC不同版本上的配置 一.前言 这是一个基于SpringBoot整合Sharding-JDBC实现读写分离的极简教程,笔者使用到的技术及版本如下: SpringBoot 2.5.2 MyBatis-Plus 3.4.3 Sharding-JDBC 4.1.1 MySQL8集群

  • springboot整合JPA访问Mysql的实现方法

    1.代码实现: 添加依赖  <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter</artifactId>         </dependency>         <dependency>             <groupId>org

  • Springboot框架整合添加redis缓存功能

    目录 一:安装Redis 二:添加Redis依赖 三:添加Redis配置信息 四:创建RedisConfigurer 五:创建Redis常用方法 六:接口测试 Hello大家好,本章我们添加redis缓存功能 .另求各路大神指点,感谢 一:安装Redis 因本人电脑是windows系统,从https://github.com/ServiceStack/redis-windows下载了兼容windows系统的redis 下载后直接解压到自定义目录,运行cmd命令,进入到这个文件夹,在这个文件夹下运

  • springBoot整合redis使用案例详解

    一.创建springboot项目(采用骨架方式) 创建完成: 我们分析下pom文件中内容: 所使用到的关键依赖: <!--springBoot集成redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.5.4<

  • SpringBoot整合Mysql和Redis的详细过程

    目录 一.项目创建 1.1创建项目 1.2目录结构 1.3pom.xml配置文件 二.初始化数据库 三.初始化代码 3.1实体类entity 3.2Mapper接口类 3.3Redis工具类 3.4Service层 3.5Controller层 四.单元测试 4.1Respository和Service层单元测试 4.2Controller层接口测试 一.项目创建 1.1 创建项目 在IDEA中,File--New--Project--Spring Initializer 名称为springbo

  • SpringBoot整合Shiro思路(最新超详细)

    目录 1.SpringBoot整合Shiro思路 2.环境搭建 2.1创建项目 2.2引入依赖 2.3创建前端页面 2.4配置视图信息 2.5解决IDEA冲突问题 2.6测试搭建的环境 3.整合Shiro 3.1引入依赖 3.2自定义Realm 3.3Shiro配置 3.4启动测试 4.常见过滤器 5.认证和退出 5.1在index.jsp添加a标签 5.2编写controller 5.3修改自定义Realm 5.4修改ShiroConfig配置 5.5测试 6.MDSalt的认证实现 6.1创

  • SpringBoot整合mybatis-plus快速入门超详细教程

    目录 前言 mybatis-plus 简介 mybatis-plus 优点 相关链接 mybatis-plus实例 1.示例项目结构 2.数据库准备 3.pom.xml: 4.application.yml 5.User.java 6.UserMapper.java 7.UserServiceImpl.java 8.测试类 mybatis-plus的crud: 1.insert操作: 2.select操作: 3.update操作: 4.delete操作: 总结 前言 mybatis-plus 简

  • SpringBoot整合Druid、Redis的示例详解

    目录 1.整合Druid 1.1Druid简介 1.2添加上 Druid 数据源依赖 1.3使用Druid 数据源 2.整合redis 2.1添加上 redis依赖 2.2yml添加redis配置信息 2.3 redis 配置类 1.整合Druid 1.1Druid简介 Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池. Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0.DBCP 等 DB 池的优点,同时加入了日志监控. Druid

  • SpringBoot整合Shiro和Redis的示例代码

    demo源码 此demo用SpringBoot+Shiro简单实现了登陆.注册.认证.授权的功能,并用redis做分布式缓存提高性能. 1.准备工作 导入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/XM

  • SpringBoot整合Kafka工具类的详细代码

    目录 kafka是什么? 应用场景 kafka是什么? Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素. 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决. 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案.Kafka的

  • SpringBoot整合Mybatis与MybatisPlus方法详细讲解

    目录 一.整合MyBatis操作 1.配置模式 2.注解模式 3.混合模式 二.整合 MyBatis-Plus 完成CRUD 1.什么是MyBatis-Plus 2.整合MyBatis-Plus 3.CRUD功能 一.整合MyBatis操作 官网:MyBatis · GitHub SpringBoot官方的Starter:spring-boot-starter-* 第三方的starter的格式: *-spring-boot-starter <dependency> <groupId>

  • Springboot整合ActiveMQ实现消息队列的过程浅析

    目录 pom中导入坐标 书写yml配置 业务层代码 监听器代码 业务层代码 确保你启动了自己电脑的activemq. pom中导入坐标 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> 书写yml配置 spring:  activemq:

  • SpringBoot整合Thymeleaf小项目及详细流程

    目录 1.项目简绍 2.设计流程 3.项目展示 4.主要代码 1.验证码的生成 2.userController的控制层设计 3.employeeController控制层的代码 4.前端控制配置类 5.过滤器 6.yml配置 7.文章添加页面展示 8.POM.xml配置类 9.employeeMapper配置类 10.UserMapper配置类 1.项目简绍 本项目使用SpringBoot开发,jdbc5.1.48 Mybatis 源码可下载 其中涉及功能有:Mybatis的使用,Thymel

  • SpringBoot整合GitLab-CI实现持续集成的过程

    目录 写在前面 一.概述 1.1.什么是CI/CD 1.2.持续集成(CI) 1.3.持续交付(CD) 二.CI/CD流水线 2.1.Pipeline 2.2.Stages 2.3.Jobs 2.4.Runners 三.安装GitLab Runner 3.1.环境准备 3.2.创建Dockerfile 3.3.创建docker-compose 3.4.注册Runner 3.4.项目配置 3.4.1.依赖管理模块 3.4.2.通用模块 3.4.3.服务模块 写在前面 在企业开发过程中,我们开发的功

随机推荐