您的位置:首页 > 其它

MyBatis入门(四)

2017-09-28 15:04 411 查看
缓存

一级缓存

一级缓存跟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=
4000
"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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis 缓存