缓存
一级缓存
一级缓存跟Hibernate中的一级缓存是一样的,是由SqlSession来 > 进行管理的 这个缓存的存在和销毁 用户都可以不参与, 直接由我 > 们的SqlSession来进行维护。
二级缓存
二级缓存可以跨越session来实现缓存
1、要使用二级缓存首先的打开二级缓存
<!--开启的是二级缓存-->
<setting name="cacheEnabled" value="true"/>
2、在需要缓存的mapper中配置cache
<!--配置我们的二级缓存-->
<cache></cache>
3、二级缓存的使用必须要序列化对象
4、不需要使用缓存 useCache=”false”
整合Ehcache缓存框架
需要的包
ehcache.xml文件放到src目录下
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<!--缓存文件存放的位置-->
<diskStore path="E:/" />
<defaultCache maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsOnDisk="10000000"
diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU">
<persistence strategy="localTempSwap" />
</defaultCache>
</ehcache>
开启二级缓存:mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--这个配置文件是不用记住的 只是需要 知道去哪里找就OK了 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- configuration:这个表示的是整个的配置信息 -->
<configuration>
<!-- 资源导入 -->
<properties resource="db.properties"></properties>
<!--配置我们的设置 懒惰性加载的第一步:打开懒惰性加载 关闭那个积极的 加载-->
<settings>
<!--是否使能延迟的加载-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--关闭那个积极的加载-->
<setting name="aggressiveLazyLoading" value="false"/>
<!--开启的是二级缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
<!-- 取别名 -->
<typeAliases>
<package name="com.wc.test01"/>
</typeAliases>
<!-- environments环境可以配置多个 比如 mySql orale? ... default:默认使用那个环境 后面的值 必须是后面的id
mysql / oracle -->
<environments default="mysql">
<!-- environment:这个表示的是配置的是单个的环境 id:给环境添加唯一的标识符 id可以随便取名 但是一般也要见名之意 -->
<environment id="mysql">
<!--mybatis的事物只能交给JDBC去进行处理 -->
<transactionManager type="JDBC" />
<!--这个表示的是数据库的连接池 type也只能写 pooled -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
<environment id="oracle">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql:///iBatis001" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!--配置的是映射的文件 -->
<mappers>
<package name="com.wc.test01"/>
</mappers>
</configuration>
设置缓存的实现类 User.java
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 7691462254845077738L;
private int uId;
private String uName;
private String uPassword;
public User() {
super();
}
public User(int uId, String uName, String uPassword) {
super();
this.uId = uId;
this.uName = uName;
this.uPassword = uPassword;
}
public int getuId() {
return uId;
}
public void setuId(int uId) {
this.uId = uId;
}
public String getuName() {
return uName;
}
public void setuName(String uName) {
this.uName = uName;
}
public String getuPassword() {
return uPassword;
}
public void setuPassword(String uPassword) {
this.uPassword = uPassword;
}
@Override
public String toString() {
return "User [uId=" + uId + ", uName=" + uName + ", uPassword="
+ uPassword + "]";
}
}
配置二级缓存: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="com.wc.test01.UserMapper">
<!--配置我们的二级缓存-->
<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>
<!-- 返回的结果映射 -->
<resultMap type="user" id="userMap">
<!-- property:写对象中属性的名字 column:属性对应的表中的字段 -->
<!-- 主键 -->
<id property="uId" column="uId"/>
<!-- 普通字段 -->
<result property="uName" column="uName"/>
<result property="uPassword" column="uPassword"/>
</resultMap>
<!--插入的方法-->
<insert id="add" parameterType="user">
insert into t_user(uName,uPassword) values(#{uName},#{uPassword})
</insert>
<!-- 通过id查询 -->
<select id="findById" parameterType="int" resultMap="userMap">
select * from t_user where 1=1 and id=#{id}
</select>
</mapper>
UserMapper.java
public interface UserMapper {
/**
* 添加用户的方法
* @param user
*/
void add(User user);
User findById(int id);
}
Test01.java
public static void main(String[] args) {
SqlSession sqlSession=MyBatisUtils.getSqlSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
User user=userMapper.findById(2);
MyBatisUtils.close();
System.out.println(user);
SqlSession sqlSession2=MyBatisUtils.getSqlSession();
UserMapper userMapper2=sqlSession2.getMapper(UserMapper.class);
User user2=userMapper2.findById(2);
MyBatisUtils.close();
System.out.println(user2);
SqlSession sqlSession3=MyBatisUtils.getSqlSession();
UserMapper userMapper3=sqlSession3.getMapper(UserMapper.class);
User user3=userMapper3.findById(2);
MyBatisUtils.close();
System.out.println(user3);
}