本地电脑如何做网站,网站建立的重要性,溧阳人才网 网站开发,做外贸去哪些网站找老外上一篇我们介绍了mybatis中二级缓存的使用#xff0c;本篇我们在此基础上介绍Mybatis中如何使用Redis作为二级缓存。
如果您对mybatis中二级缓存的使用不太了解#xff0c;建议您先进行了解后再阅读本篇#xff0c;可以参考#xff1a;
Mybatis 二级缓存https://blog.csd…上一篇我们介绍了mybatis中二级缓存的使用本篇我们在此基础上介绍Mybatis中如何使用Redis作为二级缓存。
如果您对mybatis中二级缓存的使用不太了解建议您先进行了解后再阅读本篇可以参考
Mybatis 二级缓存https://blog.csdn.net/m1729339749/article/details/133376283
一、添加依赖
dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.4.5/version
/dependency
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.49/version
/dependency
dependencygroupIdorg.mybatis.caches/groupIdartifactIdmybatis-redis/artifactIdversion1.0.0-beta2/version
/dependency二、Redis配置
在resources目录下新建redis.properties配置文件
hostlocalhost
port6379
connectionTimeout2000
soTimeout2000
passwordhorse
database0
clientNameMybatis_Cachehostredis服务主机 portredis服务端口 passwordredis密码 三、创建实体类
在cn.horse.demo下创建UserInfo、UserInfoQuery类另外需要特别注意缓存的对象类型必须实现Serializable接口
UserInfo类
package cn.horse.demo;import java.io.Serializable;public class UserInfo implements Serializable {private static final long serialVersionUID 9213975268411777481L;private Integer id;private String name;private Integer age;public void setId(Integer id) {this.id id;}public Integer getId() {return id;}public void setName(String name) {this.name name;}public String getName() {return name;}public void setAge(Integer age) {this.age age;}public Integer getAge() {return age;}Overridepublic String toString() {StringBuilder stringBuilder new StringBuilder();stringBuilder.append({);stringBuilder.append(id: this.id);stringBuilder.append(, );stringBuilder.append(name: this.name);stringBuilder.append(, );stringBuilder.append(age: this.age);stringBuilder.append(});return stringBuilder.toString();}
}UserInfoQuery类
package cn.horse.demo;public class UserInfoQuery {private Integer startAge;private Integer endAge;public void setStartAge(Integer startAge) {this.startAge startAge;}public Integer getStartAge() {return startAge;}public void setEndAge(Integer endAge) {this.endAge endAge;}public Integer getEndAge() {return endAge;}
}四、创建映射器、Mapper配置
在cn.horse.demo下创建UserInfoMapper接口
UserInfoMapper接口
package cn.horse.demo;import org.apache.ibatis.annotations.*;import java.util.List;public interface UserInfoMapper {ListUserInfo find(Param(query) UserInfoQuery query);
}在resources下创建cn/horse/demo目录并在此目录下创建UserInfoMapper.xml配置文件
UserInfoMapper.xml配置
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttps://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecn.horse.demo.UserInfoMappercache typeorg.mybatis.caches.redis.RedisCache /resultMap iduserInfoMap typecn.horse.demo.UserInforesult columnID propertyid /result columnUSERNAME propertyname/result columnAGE propertyage//resultMapselect idfind parameterTypecn.horse.demo.UserInfoQuery resultMapuserInfoMapSELECTID,USERNAME,AGEFROM T_USERwhereif testnull ! query.startAgeAND AGE gt; #{query.startAge}/ifif testnull ! query.endAgeAND AGE lt; #{query.endAge}/if/where/select
/mapper注意cache标签代表在此命名空间下使用二级缓存type代表的是二级缓存的实现方式这里使用的是org.mybatis.caches.redis.RedisCache 五、引入配置文件
在resources下新建mybatis-config.xml配置文件并引入UserInfoMapper映射器。
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configurationsettingssetting namelogImpl valueJDK_LOGGING//settingsenvironments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typePOOLEDproperty namedriver valueorg.gjt.mm.mysql.Driver/property nameurl valuejdbc:mysql://localhost:3306/demo?useUnicodetrueamp;useSSLfalseamp;characterEncodingutf8amp;allowMultiQueriestrue/property nameusername valueroot/property namepassword valuehorse//dataSource/environment/environmentsmappersmapper classcn.horse.demo.UserInfoMapper //mappers
/configuration这里我们使用mapper引入映射器只需要设置class属性为UserInfoMapper接口的全限类名。
六、启动程序
1、数据准备
这里我们直接使用脚本初始化数据库中的数据
-- 如果数据库不存在则创建数据库
CREATE DATABASE IF NOT EXISTS demo DEFAULT CHARSET utf8;
-- 切换数据库
USE demo;
-- 创建用户表
CREATE TABLE IF NOT EXISTS T_USER(ID INT PRIMARY KEY,USERNAME VARCHAR(32) NOT NULL,AGE INT NOT NULL
);
-- 插入用户数据
INSERT INTO T_USER(ID, USERNAME, AGE)
VALUES(1, 张三, 20),(2, 李四, 22),(3, 王五, 24);创建了一个名称为demo的数据库并在库里创建了名称为T_USER的用户表并向表中插入了数据
2、会话工具类
在cn.horse.demo包下新建SqlSessionUtils工具类
package cn.horse.demo;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;
import java.util.Objects;public class SqlSessionUtils {private static final SqlSessionFactory sqlSessionFactory;static {// 读取mybatis配置文件InputStream inputStream ClassLoader.getSystemClassLoader().getResourceAsStream(mybatis-config.xml);// 根据配置创建SqlSession工厂sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);}/*** 开启会话* return*/public static SqlSession openSession() {return sqlSessionFactory.openSession();}/*** 关闭会话* param sqlSession*/public static void closeSession(SqlSession sqlSession) {if(Objects.nonNull(sqlSession)) {sqlSession.close();}}
}3、JDK 日志系统配置
在resources的目录下新建logging.properties配置文件
handlersjava.util.logging.ConsoleHandler
.levelINFOcn.horse.demo.levelFINER
java.util.logging.ConsoleHandler.levelALL
java.util.logging.ConsoleHandler.formatterjava.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format%1$tY-%1$tm-%1$td %1$tT.%1$tL %4$s %3$s - %5$s%6$s%n在cn.horse.demo下创建JdkLogConfig类
JdkLogConfig类
package cn.horse.demo;import java.io.IOException;
import java.io.InputStream;
import java.util.logging.LogManager;public class JdkLogConfig {public JdkLogConfig() {try {InputStream inputStream ClassLoader.getSystemClassLoader().getResourceAsStream(logging.properties);LogManager.getLogManager().readConfiguration(inputStream);} catch (IOException e) {throw new RuntimeException(e);}}
}4、启动程序
package cn.horse.demo;import org.apache.ibatis.session.SqlSession;import java.util.List;
import java.util.function.Consumer;
import java.util.logging.Logger;public class Main {private static final Logger LOGGER;static {// 引入JDK日志配置System.setProperty(java.util.logging.config.class, cn.horse.demo.JdkLogConfig);LOGGER Logger.getLogger(cn.horse.demo.Main);}public static void main(String[] args) throws InterruptedException {// 查询selectGreaterThan(20);// 查询selectGreaterThan(20);}private static void selectGreaterThan(Integer age) {LOGGER.finer(--------------- 查询 ----------------);execute((UserInfoMapper userInfoMapper) - {UserInfoQuery query new UserInfoQuery();query.setStartAge(age);ListUserInfo userInfoList userInfoMapper.find(query);for (UserInfo userInfo: userInfoList) {LOGGER.info(userInfo.toString());}});}private static void execute(ConsumerUserInfoMapper function) {SqlSession sqlSession null;try {sqlSession SqlSessionUtils.openSession();function.accept(sqlSession.getMapper(UserInfoMapper.class));sqlSession.commit();} finally {SqlSessionUtils.closeSession(sqlSession);}}
}execute方法用于执行操作方法中使用sqlSession.getMapper方法获取映射器对象然后将映射器对象具体的执行操作委托给了Consumer对象。
执行后的结果如下