Mybatis基础,来温习一下~

28 阅读1分钟

描述

持久层框架/半自动ORM框架,它支持自定义sql、存储过程及高级映射

核心api

  1. DriverManager 连接数据库
  2. Connection 连接数据库的抽象
  3. Statment 执行sql
  4. ResultSet 数据结果集

SqlSessionFactory

作用:将全局配置文件和所有的mapper全部加载到Configuration里

SqlSession

作用:负责执行具体的sql操作

动态sql

image.png

缓存

一级缓存

特性

  • 默认开启,可以关闭localCacheScope=Statement
  • 作用域sqlSession

失效

  • 不同的sqlSession
  • 同一个sqlSession不同查询
  • 期间执行增删改操作
  • 执行收到清除缓存

二级缓存

一般情况下不建议使用,存在局限性

插件

Mybatis插件可以在不修改原代码情况下,通过拦截方式,改变四大核心对象的行为,比如处理参数、处理SQL、处理结果

注:没有完全理解Mybatis工作原理和插件工作方式,最好不要使用,它会改变系统逻辑,请慎用

分页插件

pageHelper

  1. 加上pageHelper依赖
  2. 配置文件配置相关插件
  3. 代码实现
PageHelper.startPage(1,10)
// 或
//PageHelper.offsetPage(1,10)
List<Emp> emps = mapper.queryEmp()
// 可转换为pageInfo,可以得到分页更多数据
PageInfo page = new PageInfo(emps)

原理

采用设计模式:动态代理和责任链

image.png 当代理Excutor执行目标方法时,会先执行invoke方法,并判断是否是query,是则会执行intercept方法,给sql加上limit(通过ThreadLocal保证线程安全)

执行过程:

image.png

问题

#{}和${}的区别

答:#可以设置属性,一般只需要jdbcType即可。$可以用在调试、特殊功能(动态表、动态列、动态SQL)

其他

ONGL表达式

image.png