1、Mybatis一级缓存与二级缓存
目的:提高查询效率,降低数据库查询压力,提升系统整体性能。
一级缓存:默认开启,Session级别,同一个会话内生效。
命中缓存的情况:statementid、SQL语句、结果集的范围、传递的参数相同。
同一个查询之前执行DML操作,清空缓存,session.clearCache()也会清空缓存。
二级缓存:需要配置,SQLSessionFactory级别,不同会话之间可以共享。
使用步骤:1、全局配置mybatis_config.xml文件中
<settting name="cacheEnabled" value="true" />
2、mapper.xml配置要使用二级缓存的查询
<cache />
3、使用查询返回的对象的类必须实现序列化接口。
MemCached、OSCache、EHCache。
2、Mybatis一对一关联查询
<association>标签是处理单一的关联对象(处理单一属性的关联关系)。
property :指定关联对象的属性
javaType :关联对象的类型(可以省略)
select :执行一个新的查询
column:在新的查询中用哪个列的值作为查询条件
2.1 RolesMapper.java
提供一个根据用户主键userid去查询用户角色的方法,如下:
public interface RolesMapper {
/**
* 根据用户id查询此用户对应的角色信息
* @param id
* @return
*/
Roles findRolesByUserId(int id);
}
2.2 RolesMapper.xml配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTDMapper3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dyh.dao.RolesMapper">
<!--<resultMap id="rolesMap" type="com.dyh.pojo.Roles">
<id property="roleid" column="roleid" />
<result property="roleName" column="rolename" />
</resultMap>-->
<!--<select id="findRolesByUserId" resultMap="rolesMap" parameterType="int">-->
<select id="findRolesByUserId" resultType="roles" parameterType="int">
select roleid,rolename from roles where user_id=#{userid}
</select>
</mapper>
2.3 JUnit单元测试RolesMapperTest
package com.dyh.test;
import com.dyh.dao.RolesMapper;
import com.dyh.pojo.Roles;
import com.dyh.util.My