1. 概念
Mybatis 是一款半 ORM(对象关系映射)的持久层框架,支持定制化 SQL、存储过程以及高级映射。避免了几乎所有的 JDBC 代码和手动设置参数及获取结果集。可以使用注解或 XML 来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects) 为数据库中的记录。
2. ${} 与 #{} 区别
#{} 是占位符,预编译处理。Mybatis 在处理 #{} 时,会将 SQL 中的 #{} 替换为 ?号,然后再调用 PreparedStatement 的 set 方法赋值。
${} 是字符串替换。Mybatis 在处理 ${} 时,就是直接将 ${} 替换为变量的值。
使用 #{} 能有效地防止 SQL 注入,提高系统安全性。
3. Mybatis 执行步骤
- 创建 SqlSessionFactory
- 通过 SqlSessionFactory 创建 SqlSession
- 通过 SqlSession 执行数据库操作
- 调用 session.commit() 提交事务
- 调用 session.close() 关闭会话
4. ResultType 与 ResultMap 区别
如果数据库结果集中列名与要封装的实体类属性名一致就用 ResultType。
如果不一致就用 ResultMap 手动配置对象关系映射,配置表和类的对应关系。
5. 动态 SQL
- <if>
判断传入值是否符合某种规则,比如是否不为空。
- <where>
动态拼接查询条件。
- <foreach>
把传入的集合对象遍历,然后将每一项内容传入到 SQL 语句中。
- <include>
将大量重复代码整理起来,使用直接调用。
- <set>
适用于更新操作中,当匹配某个条件后才会对该字段进行更新操作。
6. MyBatis 缓存机制
MyBatis 有两级缓存,一级缓存是 SqlSession 级别的,默认开启且无法关闭。二级缓存是 Mapper 级别的,需要手动开启。
一级缓存是基于 PerpetualCache 的 HashMap 本地缓存,其作用域为 Session,当 Session commit 或 close 后,一级缓存将被清空。
二级缓存的作用域为 Mapper,使用二级缓存的属性需要实现 Serializable 接口。
对于缓存的数据更新,当某一个作用域执行增/删/改操作后,默认该作用域下所有缓存将被清空。
当配置文件配置了 cacheEnabled=true 时就会开启二级缓存,此时查询顺序为“二级缓存 -> 一级缓存 -> 数据库”。
标签:缓存,作用域,Mybatis,二级缓存,SQL,MyBatis From: https://www.cnblogs.com/apachewang/p/16744019.html