Mybatis 入门 (二)
1. Mapper配置文件处理特殊字符
用 > 和 &It; 代替 > 和 <
2. 延迟加载
单表查询性能比多表关联查询要高得多,即先查询单表,如果需要关联多表时再进行查询
3. resultType和resultMap
resultType:当查询字段名和Bean对象属性名一致时,查询结果自动映射
resultMap:当查询字段名与Bean对象属性名不一致时,需要配置resultMap与Bean属性的对应关系,才能映射
association和collection完成一对一和一对多高级映射。
4. 返回主键
select LAST_INSERT_ID()
INSERT INTO USER(name,sex,age) VALUES(#{name},#{sex},#{age})
5. 动态sql
6. 缓存
将查询数据放到缓存中,而不用再去数据库从而提高查询效率
- 一级缓存:每个SqlSession有自己的缓存,只能访问自己的(默认一级缓存)
- 二级缓存:每个Mapper有自己缓存,Mapper内的SqlSession可以互相访问
- 二级缓存将数据从内存写入磁盘,序列化和反序列化,所以映射的Bean对象需要实现serializable接口
- 两级缓存查询都将数据放入内存中,下次查询直接从内存读取,但执行其他语句会清空内从数据,下次查询需要再次从数据库拿出数据
7. Mapper代理(推荐)
只需要写Bean接口,Bean接口的实现对象由mybatis自动生成,Mapper文件与Bean接口需要遵从下面原则
- mapper文件中namespace为Bean接口的全限定名
- mapper文件中sql语句id为Bean接口中的方法名
- mapper文件中parameterType为Bean接口中方法的输入参数类型
- mapper文件中resultType为Bean接口中方法的返回值类
Bean接口
package com.howl;
public interface userMapper {
public user findUserById(int id);
}
Mapper文件
<?xml version="1.0" encoding="UTF-8"?>
运行
//通过Bean接口获得Mapper代理对象
userMapper userMapper = sqlSession.getMapper(com.howl.userMapper.class);
//调用代理对象里的方法
user user = userMapper.findUserById(1);