Mybatis

定义
- 半自动ORM框架(手动编写sql查询关联集合),封装了JDBC,可以直接编写原生SQL。
- 通过xml和注解来配置原生信息,映射POJO与数据库中的记录。
- 通过xml文件或注解配置statement,通过映射生成最终的sql,mybatis执行sql并将结果映射为java对象返回。
#{}和${}
-
{}:预编译处理,可以有效地防止sql注入。
- ${}:字符串替换。
如何映射属性和表字段
- 驼峰转换
- resultMap映射
- type映射类,id映射表名
- 主键id: property映射属性,column映射字段
- 非主键result: property映射属性,column映射字段
Xml映射文件的Dao接口原理
- Dao接口即Mapper接口。
- namespace映射接口的路径
- id映射方法名称。
- resultType映射返回类型。
分页插件的原理
- 在插件的拦截方法内拦截待执行的sql。
- 根据dialect方言重写sql,添加对应的物理分页语句和物理分页参数。
Mybatis的sql执行结果封装
- resultMap标签定义映射关系。 sql列的别名功能。
- 通过反射创建对象,为对象的值逐一赋值并返回。
获取自动生成的键值
- insert方法返回的int值代表插入的行数。
- 自动生成的键值在insert方法执行后设置到传入的参数对象中。
Mapper传递多个参数
- 使用#{0},代表传递dao层的第一个参数。
- 使用@param注解。
Mybatis的动态sql
- 原理:根据表达式的值,完成逻辑判断并动态拼接sql的功能。
- 动态sql标签:trim | where | set | foreach | if | choose | when | otherwise | bind
Xml映射文件中常用的标签
- resultMap标签映射实体类与数据表。
- mapper映射方法。
- include标签引入sql片段
Xml的id是否可以重复
- namespace+id作为key使用,配置了namespace以后id才可以重复。
MyBatis一对一查询
-
resultMap中的association节点配置一对一的类。
-
联合查询:几个表联合,查询一次。
-
嵌套查询:先查一个表,通过外键id查询另一个表,另一个表的查询通过select节点配置。
MyBatis一对多查询
- resultMap中的collection节点配置一对多的类。
- 联合查询:几个表联合,查询一次。
- 嵌套查询:先查一个表,通过外键id查询另一个表,另一个表的查询通过select节点配置。
延迟加载
- lazyLoadingEnabled=true|false
- 原理:
- 创建目标对象的代理对象,调用目标方法时进入拦截方法。
- 拦截器invoke()方法发现空值,则查询关联对象的sql,调用set方法填充属性。
一级缓存、二级缓存
- 一级缓存:作用域为Session,默认打开。
- 二级缓存:作用域为Mapper,默认关闭。类需要实现serializable序列化接口开启二级缓存。
MyBatis接口绑定的方式
- 注解绑定:接口的方法上加上@Select,@Update。
- xml映射文件绑定:指定namespace绑定。
MyBatis插件运行原理
- 执行接口对象的方法时,进入拦截方法。
你知道的越多,你不知道的越多。

浙公网安备 33010602011771号