一 配置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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xinxue.mybatius</groupId>
<artifactId>mybatis_day3</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- 配置 mybatis 核心依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--配置ehcache 做二级缓存的实现包-->
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<!-- 导入log4j 日志包 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
二、SqlSessionMapper
<?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>
<environments default="d1">
<environment id="d1">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///xingxue27"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/xingxue/mybatis/mapper/UserInfoModelMapper.xml"/>
</mappers>
</configuration>
配置ehcache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="d:/storeobject"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU" />
</ehcache>
<!-- <diskStore path="java.io.tmpdir" /> -->
<!-- <defaultCache
maxElementsInMemory="10000" 设置了缓存的上限,最多存储多少个记录对象 10000个
eternal="false" 是否永久保存,如果设置为true
timeToIdleSeconds="120" 空闲时间为120秒,过后对象清除
timeToLiveSeconds="120" 最大的存活时间为120秒
overflowToDisk="true" 如果内存缓存的对象超过10000,写硬盘上写
maxElementsOnDisk="10000000" 硬盘上保存缓存对象数量
diskPersistent="false" 硬盘保存的数据是否持久化
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU" /> 存储的算法 LRU 会回收不经常使用的数据 -->
配置日志
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=warn, stdout
log4j.logger.com.xingxue=debug
三,要实现二级缓存 必须实现序列化接口Serializable
package com.xingxue.mybatis.model;
import java.io.Serializable;
// mybatis 的二级缓存数据,该数据类型必须实现 序列化接口Serializable
public class UserInfoModel implements Serializable {
private Long userid;
private String logname;
private String password;
public Long getUserid() {
return userid;
}
public void setUserid(Long userid) {
this.userid = userid;
}
public String getLogname() {
return logname;
}
public void setLogname(String logname) {
this.logname = logname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserInfoModel{" +
"userid=" + userid +
", logname='" + logname + '\'' +
", password='" + password + '\'' +
'}';
}
}
四 设置缓存
package com.xingxue.mybatis.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SessionUtil {
private static final SqlSessionFactory factory;
static {
try {
factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"));
}catch (Exception e){
throw new RuntimeException(e);
}
}
/*二级缓存*/
public static SqlSessionFactory getFactory()
{
return factory;
}
/*一级缓存*/
public static SqlSession getSession(){
return factory.openSession();
}
}
五 写接口
package com.xingxue.mybatis.mapper;
import com.xingxue.mybatis.model.UserInfoModel;
public interface UserInfoModelMapper {
UserInfoModel getById(Long id);
}
六 写实现.xml 也就是写SQL
<?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.xingxue.mybatis.mapper.UserInfoModelMapper">
<!--开启二级缓存-->
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
<select id="getById" resultType="com.xingxue.mybatis.model.UserInfoModel">
SELECT * FROM TB_USERINFO WHERE USERID = #{ID}
</select>
</mapper>
七 测试
package com.xingxue.mybatis.test;
import com.xingxue.mybatis.mapper.UserInfoModelMapper;
import com.xingxue.mybatis.model.UserInfoModel;
import com.xingxue.mybatis.util.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import java.io.IOException;
public class App {
public static void main(String[] args) throws IOException {
//一级缓存在作用 sqlSession 对象
SqlSession session = SessionUtil.getSession();
UserInfoModelMapper mapper = session.getMapper(UserInfoModelMapper.class);
UserInfoModel user = mapper.getById(9L);
System.out.println(user);
session.close();
System.out.println("=================================================");
SqlSession session2 = SessionUtil.getSession();
mapper = session2.getMapper(UserInfoModelMapper.class);
UserInfoModel user2 = mapper.getById(9L);
System.out.println(user2);
}
}