1.一级二级缓存(优先用二级 ,一级默认开启,二级要去配置)
如何开启二级缓存,分三步:
一是在配置文件中开启,这是开启二级缓存的总开关,默认是开启状态的:
<setting name="cacheEnabled" value="true"/>
二是在Mapper文件中开启缓存,默认是不开启的,需要手动开启:
<!-- 每个Mapper文件使用一个缓存对象 -->
<cache/>
<!-- 如果是多个Mapper文件共用一个缓存对象 -->
<cache-ref />
三是针对要查询的statement使用缓存,即在<select>节点中配置如下属性:
useCache="true"
对于二级缓存有以下说明:
- 映射语句文件中的所有 select 语句将会被缓存。
- 映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
- 缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
- 根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
- 缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
- 缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。
2..取别名 默认的是类的名字小写
3.
4.resultmap映射
resultMap>元素使用案例:
1.新建数据表t_user,插入测试数据。
use mybatis create table t_user( t_id int identity(1,1) PRIMARY key, t_name varchar(50), t_age int ) insert into t_user values ('lulu','23'); insert into t_user values ('lili','25'); insert into t_user values ('jiji','18');
2.新建持久化类User,并定义属性。
/** * @author mz * @version V1.0 * @Description: 用户实体类 * @create 2017-11-01 14:13 */ public class User { private Integer id; private String name; private Integer age; //省略setter和getter方法 }
3.创建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.itheima.mapper.UserMapper"> <resultMap id="resultMap" type="com.itheima.po.User"> <!--<id>和<result>的property属性表示User类的属性名,column属性表示数据表t_user的列名。--> <id property="id" column="t_id"/> <result property="name" column="t_name"/> <result property="age" column="t_age"/> </resultMap> <select id="findAllUser" resultMap="resultMap"> <!--<select>元素的resultMap属性表示引用上面定义的resultMap--> select * from t_user </select> </mapper>
4.在配置文件mybatis-config中,引入UserMapper.xml,并编写测试方法
<!--配置mapper的位置--> <mappers> <mapper resource="com/itheima/mapper/CustomerMapper.xml"/> <mapper resource="com/itheima/mapper/UserMapper.xml"/> </mappers>
@Test public void findAllUserTest() { //获取SqlSession SqlSession sqlSession = MybatisUtils.getSession(); //执行映射文件中定义的SQL,并返回结果 List<User> list = sqlSession.selectList("com.itheima.mapper.UserMapper.findAllUser"); for (User user : list) { System.out.println(user); } //关闭SqlSession sqlSession.close(); }
也可用以下方法替代