1. 程式人生 > 資料庫 >spring+springmvc+mybatis整合redis快取

spring+springmvc+mybatis整合redis快取

spring springmvc mybatis整合redis快取

一、搭建基礎的mvc框架

1.1新建maven專案

  • 注:本文使用idea最新版可以直接建立web專案
    在這裡插入圖片描述
    在這裡插入圖片描述

1.2新增專案相關依賴

  • 為了方便起見,在pom檔案中統一配置各個依賴版本號
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
        <junit.version>5.7.0</junit.version>
        <spring.version>5.2.0.RELEASE</spring.version>
        <mybatis.version>3.4.6</mybatis.version>
        <mysql.version>8.0.22</mysql.version>
        <druid.version>1.2.4</druid.version>
        <jedis.version>3.4.1</jedis.version>
        <fastjson.version>1.2.75</fastjson.version>
        <mybatis.spring.version>1.3.2</mybatis.spring.version>
        <spring.data.redis.version>2.4.2</spring.data.redis.version>
  • 新增相關依賴
		<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${mybatis.spring.version}</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>${jedis.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>${spring.data.redis.version}</version>
        </dependency>
  • 完整pom檔案
<?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"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>codetiger.ssmredis</groupId>
    <artifactId>ssm-redis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>ssm-redis</name>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
        <junit.version>5.7.0</junit.version>
        <spring.version>5.2.0.RELEASE</spring.version>
        <mybatis.version>3.4.6</mybatis.version>
        <mysql.version>8.0.22</mysql.version>
        <druid.version>1.2.4</druid.version>
        <jedis.version>3.4.1</jedis.version>
        <fastjson.version>1.2.75</fastjson.version>
        <mybatis.spring.version>1.3.2</mybatis.spring.version>
        <spring.data.redis.version>2.4.2</spring.data.redis.version>
    </properties>


    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${mybatis.spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>${jedis.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>${spring.data.redis.version}</version>
        </dependency>


        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.0</version>
            </plugin>
        </plugins>
    </build>
</project>

1.3新增配置檔案

1.3.1 新增spring 基礎配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--    配置包自動掃描-->
    <context:component-scan base-package="codetiger.ssmredis.ssm_redis">
<!--        排除檢視層-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>


</beans>

1.3.2 新增mybatis配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

<!--    引入jdbc配置檔案-->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!--    配置連線池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <!--        配置基本屬性-->
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>

<!--        其他屬性-->
<!--        初始化大小-->
        <property name="initialSize" value="5"/>
        <!--        最小連線池數量-->
        <property name="minIdle" value="5"/>
        <!--        最大連線池數量-->
        <property name="maxActive" value="20"/>
        <!--        獲取連線時最大等待時間,單位毫秒-->
        <property name="maxWait" value="60000"/>
        <!--        配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒-->
        <property name="timeBetweenEvictionRunsMillis" value="60000"/>
        <!--        配置一個連線在池中最小生存的時間,單位是毫秒-->
        <property name="minEvictableIdleTimeMillis" value="300000"/>
        <!--        測試連線-->
        <property name="validationQuery" value="SELECT 1 from DUAL"/>
        <!--        申請連線的時候檢測,建議配置為true,不影響效能,並且保證安全性-->
        <property name="testWhileIdle" value="true"/>
        <!--        獲取連線時執行檢測,建議關閉,影響效能-->
        <property name="testOnBorrow" value="false"/>
        <!--        歸還連線時執行檢測,建議關閉,影響效能-->
        <property name="testOnReturn" value="false"/>
        <!--        是否開啟PSCache,PSCache對支援遊標的資料庫效能提升巨大,oracle建議開啟,mysql下建議關閉-->
        <property name="poolPreparedStatements" value="false"/>
        <!--        開啟poolPreparedStatements後生效-->
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
        <!--        配置擴充套件外掛,常用的外掛有=>stat:監控統計  slf4j:日誌  wall:防禦sql注入-->
        <property name="filters" value="stat,wall,slf4j"/>
        <property name="connectionProperties" value="druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000"/>
    </bean>

    <!--        配置SqlSession的工廠-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入資料庫連線池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 配置MyBaties全域性配置檔案:mybatis-config.xml -->
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <!--配置Mybatis的對映xml檔案路徑-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

    <!--指定Mybatis的mapper介面掃描包-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定剛才我們配置好的sqlSessionFactory-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!--指定mapper介面掃描包-->
        <property name="basePackage" value="codetiger.ssmredis.ssm_redis.dao"/>
    </bean>

    <!--配置事務管理器,如果不配置這個,不啟動事務掃描的話,那麼發生了異常也不會觸發回滾-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--還得指定資料來源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>


    <!--啟動事務的掃描-->
    <tx:annotation-driven/>
</beans>

1.3.3 新增springmvc配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:cache="http://www.springframework.org/schema/cache"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/cache
       http://www.springframework.org/schema/cache/spring-cache.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--配置檢視解析器,這樣控制器裡就直接返回檔名就好了-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--字首-->
        <property name="prefix" value="/WEB-INF/views/"/>
        <!--字尾-->
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--配置靜態資源過濾,不然靜態資源比如css是訪問不到的-->
    <mvc:default-servlet-handler/>

    <!--配置掃描的包-->
    <context:component-scan base-package="nn.apartment" use-default-filters="false">
        <!--只掃描controller,這邊MVC就只掃描controller,就不會IOC那邊衝突,否則事務會被覆蓋,IOC那邊就要排除這個controller-->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--啟用MVC的註解-->
    <mvc:annotation-driven/>
</beans>

1.3.4新增mybatis控制檔案

<?xml version="1.0" encoding="utf-8"?>
        <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置全域性設定-->
<settings>
    <!--啟用日誌,並指定日誌實現方式-->
    <setting name="logImpl" value="SLF4J"/>

    <!--啟用主鍵生成策略-->
    <setting name="useGeneratedKeys" value="true"/>

    <!--配置啟用下劃線轉駝峰的對映-->
    <setting name="mapUnderscoreToCamelCase" value="true"/>

    <!--啟用二級快取-->
    <setting name="cacheEnabled" value="true"/>
</settings>
</configuration>

1.3.5修改web.xml 檔案

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        version="3.1">

   <!--1.配置Spring IOC容器的建立,如果不配置這個,Mybatis就在web應用裡無法使用-->
   <context-param>
       <param-name>contextConfigLocation</param-name>
       <!--spring配置檔案路徑-->
       <param-value>classpath:spring/spring-*.xml</param-value>
   </context-param>
   <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>

   <!--2.配置SpringMVC的前端控制器-->
   <servlet>
       <servlet-name>SpringMVC</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <init-param>
           <param-name>contextConfigLocation</param-name>
           <!--SpringMVC整合配置檔案路徑-->
           <param-value>classpath:spring/springmvc.xml</param-value>
       </init-param>
       <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
       <servlet-name>SpringMVC</servlet-name>
       <url-pattern>/</url-pattern>
   </servlet-mapping>

   <!--3.配置字元編碼過濾器-->
   <filter>
       <filter-name>encodingFilter</filter-name>
       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
       <init-param>
           <param-name>encoding</param-name>
           <param-value>UTF-8</param-value>
       </init-param>
       <init-param>
           <param-name>forceEncoding</param-name>
           <param-value>true</param-value>
       </init-param>
   </filter>
   <filter-mapping>
       <filter-name>encodingFilter</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping>

   
</web-app>

1.3.6新增資料來源

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://db:3306/apartment?useUnicode=true&characterEncoding=utf-8
jdbc.username=
jdbc.password=

1.3.7 新增redis相關配置,使用Java檔案配置

RedisConfig.java

package codetiger.ssmredis.ssm_redis.utils;

import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;

import java.time.Duration;

/**
 * @program: ssm-redis
 * @description:
 * @author: Mr.Nie
 * @create: 2020-12-31 18:35
 **/

@Configuration
public class RedisConfig {

        String redishost = "program";
        int port = 6379;

        //配置jedispool
        @Bean("JedisPoolConfig")
        public JedisPoolConfig getJedisPoolConfig(){
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//        配置最大連線數
            jedisPoolConfig.setMaxTotal(10);
//        配置最大空閒連線數
            jedisPoolConfig.setMaxIdle(5);
//        配置最小空閒連線數
            jedisPoolConfig.setMinIdle(0);
//        配置是否需要等待
            jedisPoolConfig.setBlockWhenExhausted(true);
//        配置最大等待時間毫秒
            jedisPoolConfig.setMaxWaitMillis(60000);
//        是否進行連線有效性檢測
            jedisPoolConfig.setTestOnBorrow(true);
//        是否進行釋放有效性檢測
            jedisPoolConfig.setTestOnReturn(true);
//        是否開啟JMX監控
            jedisPoolConfig.setJmxEnabled(true);
            return jedisPoolConfig;
        }

        //配置連線工廠
        @Bean("JedisConnectionFactory")
        public JedisConnectionFactory getJedisConnectionFactory(@Qualifier("JedisPoolConfig") JedisPoolConfig jedisPoolConfig){
            try {
                //單機版jedis
                RedisStandaloneConfiguration redisStandaloneConfiguration =
                        new RedisStandaloneConfiguration();
                //設定redis伺服器的host或者ip地址
                redisStandaloneConfiguration.setHostName(redishost);
                //設定預設使用的資料庫
//            redisStandaloneConfiguration.setDatabase(0);
                //設定密碼
//            redisStandaloneConfiguration.setPassword(RedisPassword.of("123456"));
                //設定redis的服務的埠號
                redisStandaloneConfiguration.setPort(port);
                //獲得預設的連線池構造器(怎麼設計的,為什麼不抽象出單獨類,供使用者使用呢)
                JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb =
                        (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder)JedisClientConfiguration.builder();
                //指定jedisPoolConifig來修改預設的連線池構造器(真麻煩,濫用設計模式!)
                jpcb.poolConfig(jedisPoolConfig);
                //通過構造器來構造jedis客戶端配置
                JedisClientConfiguration jedisClientConfiguration = jpcb.build();
                //單機配置 + 客戶端配置 = jedis連線工廠
                return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
            }
            catch (Exception e){
                return null;
            }
        }


        //配置redis模板
        @Bean
        public RedisTemplate<String, String> redisTemplate(@Qualifier("JedisConnectionFactory") JedisConnectionFactory cf) {
            RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
            redisTemplate.setConnectionFactory(cf);
            return redisTemplate;
        }

        @Bean
        public CacheManager cacheManager(JedisConnectionFactory factory) {
            FastJsonRedisSerializer<Object> fastJsonUtil = new FastJsonRedisSerializer<>(Object.class);
            // 生成兩套預設配置,通過 Config 物件即可對快取進行自定義配置
            RedisCacheConfiguration cacheConfig = RedisCacheConfiguration.defaultCacheConfig()
                    // 設定過期時間 10 分鐘
                    .entryTtl(Duration.ofMinutes(10))
                    // 設定快取字首
                    .prefixKeysWith("luyu:")
                    // 禁止快取 null 值
                    .disableCachingNullValues()
                    .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                    .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonUtil));
            // 設定 key 序列化
//                .serializeKeysWith()
//                // 設定 value 序列化
//                .serializeValuesWith();
            // 返回 Redis 快取管理器
            return RedisCacheManager.builder(factory)
                    .withCacheConfiguration("user", cacheConfig).build();
        }


    }

序列化工具:
FastJsonRedisSerializer.java

package codetiger.ssmredis.ssm_redis.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;

import java.nio.charset.StandardCharsets;

/**
 * @program: ssm-redis
 * @description:
 * @author: Mr.Nie
 * @create: 2020-12-31 18:38
 **/

public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {


    private final Class<T> clazz;

    public FastJsonRedisSerializer(Class<T> clazz) {
        super();
        this.clazz = clazz;
    }

    @Override
    public byte[] serialize(T t) throws SerializationException {
        if (t == null) {
            return new byte[0];
        }
        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(StandardCharsets.UTF_8);
    }

    @Override
    public T deserialize(byte[] bytes) throws SerializationException {
        //新增fastjson白名單
        ParserConfig.getGlobalInstance().addAccept("codetiger.ssmredis.ssm_redis.entily");
        if (bytes == null || bytes.length <= 0) {
            return null;
        }
        String str = new String(bytes, StandardCharsets.UTF_8);
        return JSON.parseObject(str, clazz);
    }
}

檔案結構如下:
在這裡插入圖片描述

二、編寫測試用例

2.1 使用者實體

package codetiger.ssmredis.ssm_redis.entily;

/**
 * @program: ssm-redis
 * @description:
 * @author: Mr.Nie
 * @create: 2020-12-31 18:43
 **/

public class User {
    int id;
    String username;
    String password;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

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

2.2資料庫對映

UserDao.java

package codetiger.ssmredis.ssm_redis.dao;

import codetiger.ssmredis.ssm_redis.entily.User;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @program: ssm-redis
 * @description:
 * @author: Mr.Nie
 * @create: 2020-12-31 18:45
 **/

@Repository
public interface UserDao {
    List<User> selectAll();
}

2.3使用者服務

UserService.java

package codetiger.ssmredis.ssm_redis.service;

import codetiger.ssmredis.ssm_redis.dao.UserDao;
import codetiger.ssmredis.ssm_redis.entily.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @program: ssm-redis
 * @description:
 * @author: Mr.Nie
 * @create: 2020-12-31 18:45
 **/

@Service
public class UserService {
    @Autowired
    UserDao userDao;


    public List<User> selectAll(){
        return userDao.selectAll();
    }

}

2.4檢視層

UserController.java

package codetiger.ssmredis.ssm_redis.controller;

import codetiger.ssmredis.ssm_redis.service.UserService;
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;

/**
 * @program: ssm-redis
 * @description:
 * @author: Mr.Nie
 * @create: 2020-12-31 18:48
 **/

@Controller
public class UserController {
    @Autowired
    UserService userService;

    @RequestMapping("/user/selectAll")
    @ResponseBody
    public String seltctAll(){
        return userService.selectAll().toString();
    }

}

2.5 mybatis對映檔案

UserMapper.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="codetiger.ssmredis.ssm_redis.dao.UserDao">
    <!--開啟快取-->
    <cache/>


    <!--從資料庫中查詢出所有的User物件-->
    <select id="selectAll" resultType="codetiger.ssmredis.ssm_redis.entily.User">
        select * from user
    </select>

</mapper>

專案目錄結構:
在這裡插入圖片描述

2.6 執行測試是否成功

在這裡插入圖片描述

三、改造實現redis快取

3.1 改造service層

package codetiger.ssmredis.ssm_redis.service;

import codetiger.ssmredis.ssm_redis.dao.UserDao;
import codetiger.ssmredis.ssm_redis.entily.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @program: ssm-redis
 * @description:
 * @author: Mr.Nie
 * @create: 2020-12-31 18:45
 **/

@Service
public class UserService {
    @Autowired
    UserDao userDao;


    @Cacheable(value = "user", key = "'test'")
    public List<User> selectAll(){
        return userDao.selectAll();
    }

}

3.2 執行專案檢查redis是否有資料存入

在這裡插入圖片描述