SpringBoot+MyBatis+redis

基于xml文件配置的、将redis作为MyBatis的二级缓存

 

环境:maven3.6.0 + SpringBoot2.1.0.RELEASE + MyBatis

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"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springboot2.0-yipinketang-parent</artifactId>
        <groupId>com.yipinketang.springboot2.0</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>SpringBoot2.0-yipinketang-mybatis-xml-redisAsCache</artifactId>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <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>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional><!--项目不支持传递,子项目不支持热部署-->
            <!--<scope>true</scope>--><!--必须添加,否则无法生效-->
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork><!--还需要添加此配置-->
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

工程结构:

mybatis-config.xml

<?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">
<!--通过这个配置文件,完成mybatis与数据库的连接  -->
<configuration>
    <!--配置全局属性-->
    <settings>
        <!--使用jdbc的getGeneratedKeys获取数据库自增主键值-->
        <setting name="useGeneratedKeys" value="true"/>
        <!--使用列标签替换列别名 默认:true-->
        <setting name="useColumnLabel" value="true"/>
        <!--开启驼峰命名转换:Table{create_time} ->Entity{createTime}-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 使全局的映射器启用或禁用缓存。 -->
        <setting name="cacheEnabled" value="true"/>
    </settings>
    <typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer" />
        <typeAlias alias="Long" type="java.lang.Long" />
        <typeAlias alias="HashMap" type="java.util.HashMap" />
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
        <typeAlias alias="ArrayList" type="java.util.ArrayList" />
        <typeAlias alias="LinkedList" type="java.util.LinkedList" />
    </typeAliases>
</configuration>

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">
<!--这里的namespace一定要是对应mapper包下面的接口,不然会报错:方法绑定异常-->
<mapper namespace="com.yipinketang.app.mapper.OrderMapperByXml">
    <!--配置二级缓存-->
    <cache type="com.yipinketang.app.cache.MyBatisRedisCache"/>
    <resultMap id="BaseResultMap" type="com.yipinketang.app.domain.User">
        <id column="id" property="id" jdbcType="BIGINT"></id>
        <result column="number" property="number" javaType="java.lang.Integer"></result>
        <result column="order_type" property="orderType"></result>
        <result column="order_name" property="orderName" jdbcType="VARCHAR"></result>
        <result column="creator" property="creator" jdbcType="VARCHAR"></result>
        <result column="create_date" property="createDate"></result>
        <result column="modify_date" property="modifyDate"></result>
    </resultMap>

    <sql id="base_column_list">
        id, number, order_type, order_name, creator, create_date, modify_date
    </sql>

    <!--mybatis会自动根据方法名找到这个映射文件中的对应id的方法,即mapper接口中的方法名与这个映射文件中的id值对应
    flushCache属性如果设置为true,每次都会刷新缓存,效果等同于没有开启二级缓存-->
    <select id="findAll" resultMap="BaseResultMap" flushCache="false">
        select
        <include refid="base_column_list"/>
        from user
    </select>

</mapper>

启动程序,用postman分别请求两次:http://127.0.0.1:8000/order/getAllOrder 观察控制台输出:

1、如果如下设置:

控制台输出:

结论:虽然有走缓存,但是还是执行了两次相同的数据库操作,即没有起到二级缓存的作用

原因:sql映射标签中如果属性flushCache=true,表示每次都会刷新二级缓存,每一次查询都会直接从数据库中获取数据

2、如下设置:

控制台输出:

结论:这次根本没有走缓存,每一次查询都会直接从数据库中查询数据

原因:如果在每个sql映射标签中单独使用useCache=false属性,表示关闭该查询的二级缓存能力,这个时候flushCache属性无意义,也不会打印cache日志

3、默认的useCache=true flushCache=false

多次请求,只有第一次请求控制台会看到sql打印

 

注意:

这个类相当于一个工具类,作用是MyBatisRedisCache没有使用Spring的注解,但是需要使用SpringBoot的RedisTemplate组件,所以通过ApplicationContextHolder获取spring的IOC容器,从而通过getBean方法获取RedisTemplate实例。

 

ok,至此SpringBoot+MyBatis使用Redis作为二级缓存讲解完毕:

github:https://github.com/wjzuo/SpringBoot2.0/tree/master/springboot2.0-yipinketang-parent/SpringBoot2.0-yipinketang-mybatis-xml-redisAsCache

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值