springboot+mybatis+redis整合

        springBoot+mybatis+redis整合,这里搭建一个简单的框架是为了记录怎么使用redis做缓存。

一、构建一个springboot的maven项目,目录结构如下:

 

二、在pom.xml文件中引入依赖jar包

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

   <!--mybatis整合springboot-->
   <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.0.0</version>
   </dependency>

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

   <!--redis缓存-->
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
   </dependency>
   <!--mysql JDBC驱动 -->
   <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.39</version>
   </dependency>

   <!--这个特别记得引入-->
   <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
      <version>2.0</version>
   </dependency>

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

</dependencies>

三、application.properties配置文件

server.port=8029
数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/redis_test?useUnicode=true
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456

#mybatis配置
mybatis.type-aliases-package=com.example.springboot_redis.entity
mybatis.mapper-locations=classpath:mapper/*.xml

#打印sql时的语句 ========================
logging.level.com.acong.dao = debug
logging.file=d:/logs/bsbdj.log

#将themilef的默认缓存禁用,热加载生效
spring.thymeleaf.cache=false

#redis配置
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
#redis最大池连接数
spring.redis.jedis.pool.max-active=8
#redis最大空闲连接
spring.redis.jedis.pool.max-idle=8
#redis最大阻塞等待时间(负值表示无限制)
spring.redis.jedis.pool.max-wait=1001
#redis最小空闲连接
spring.redis.lettuce.pool.min-idle=0
#redis 超时时间
spring.redis.timeout=12000

四、框架代码:

1、创建一个User实体,和数据库表对应。注意这里实体一定要序列化,redis存储对象的时候要序列化存储

public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    private String id;
    private String name;
    private String password;
    private String phone;

    public String getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

2、创建数据交互层UserDao接口,加上@Mapper注解

@Mapper
public interface UserDao {
  public User findById(String id);

   public int delete(String id);

   public int update(String id);
}

3、mapper.xml配置文件,这里SQL中id和UserDao接口的方法对应。不知道的先学习mybatis

<?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.example.springboot_redis.dao.UserDao">

    <select id="queryAll" resultType="com.example.springboot_redis.entity.User">
        select * from user
    </select>

    <select id="findById" resultType="com.example.springboot_redis.entity.User" parameterType="String">
        select * from user where id = #{id}
    </select>

    <update id="update" parameterType="String">
        update user set name = 'tom'
        where id = #{id}
    </update>

    <delete id="delete" parameterType="String">
        delete from user where id = #{id}
    </delete>

</mapper>

4、创建UserService接口以及接口实现类

//接口

public interface UserService {

    public User findById(String id);

    public int delete(String id);

    public  int update (String id);
}

//实现类

@Transactional
@Service("UserService")
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Autowired
    private RedisTemplate redisTemplate;



    @Override
    public User findById(String id) {
        String key = "user_"+id;
        //先从缓存获取用户,如果没有再从数据库获取
        ValueOperations<String,User> valueOperations = redisTemplate.opsForValue();
        boolean haskey = redisTemplate.hasKey(key);
        if(haskey){
            User user = valueOperations.get(key);
            System.out.println("缓存中获取数据=="+user.getName());
            return user;
        }else {
            User user = userDao.findById(id);
            System.out.println("从数据库=="+user.getName());
            valueOperations.set(key,user,5, TimeUnit.HOURS);  //写入缓存
            return user;
        }
    }

    @Override
    public int delete(String id) {
        int result = userDao.delete(id);
        String key = "user_"+id;

        //先删除数据库数据再删除缓存数据
        if(result != 0){
            if(redisTemplate.hasKey(key)){
                redisTemplate.delete(key);
            }
        }
        return  result;
    }

    @Override
    public int update(String id) {
        int result = userDao.update(id);
        String key = "user_" + id;
        if(result!=0){
            if(redisTemplate.hasKey(key)){
                redisTemplate.delete(key);
            }
            //重新写入缓存
            User user = userDao.findById(id);
            redisTemplate.opsForValue().set(key,user,5,TimeUnit.HOURS);
        }
        return result;
    }
}

5、创建控制层;

@RestController
@RequestMapping("/test")
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping("{id}/findById")
    public User test(@PathVariable("id") String id){
        return userService.findById(id);
    }

    @GetMapping("/find")
    public User hh(){
        String key = "user_"+"faffdasf45485fdas54f5daf4";
        ValueOperations<String,User> valueOperations = redisTemplate.opsForValue();
        return valueOperations.get(key);
    }

    @GetMapping("{id}/del")
    public int delele(@PathVariable("id") String id){
       return userService.delete(id);
    }

    @GetMapping("{id}/up")
    public int up(@PathVariable("id") String id){
        return userService.update(id);
    }
}

五、接口测试结果1.查看

 

 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值