描述
持久层框架/半自动ORM框架,它支持自定义sql、存储过程及高级映射
核心api
- DriverManager 连接数据库
- Connection 连接数据库的抽象
- Statment 执行sql
- ResultSet 数据结果集
SqlSessionFactory
作用:将全局配置文件和所有的mapper全部加载到Configuration里
SqlSession
作用:负责执行具体的sql操作
动态sql
缓存
一级缓存
特性
- 默认开启,可以关闭localCacheScope=Statement
- 作用域sqlSession
失效
- 不同的sqlSession
- 同一个sqlSession不同查询
- 期间执行增删改操作
- 执行收到清除缓存
二级缓存
一般情况下不建议使用,存在局限性
插件
Mybatis插件可以在不修改原代码情况下,通过拦截方式,改变四大核心对象的行为,比如处理参数、处理SQL、处理结果
注:没有完全理解Mybatis工作原理和插件工作方式,最好不要使用,它会改变系统逻辑,请慎用
分页插件
pageHelper
- 加上pageHelper依赖
- 配置文件配置相关插件
- 代码实现
PageHelper.startPage(1,10)
// 或
//PageHelper.offsetPage(1,10)
List<Emp> emps = mapper.queryEmp()
// 可转换为pageInfo,可以得到分页更多数据
PageInfo page = new PageInfo(emps)
原理
采用设计模式:动态代理和责任链
当代理Excutor执行目标方法时,会先执行invoke方法,并判断是否是query,是则会执行intercept方法,给sql加上limit(通过ThreadLocal保证线程安全)
执行过程:
问题
#{}和${}的区别
答:#可以设置属性,一般只需要jdbcType即可。$可以用在调试、特殊功能(动态表、动态列、动态SQL)