一、简介
MyBatis是ORM框架(Object Rational Mapping ),用于实现面向对象语言编程里不同类型系统数据之间的转换。
官网传送门:https://mybatis.org/mybatis-3/index.html
传统JDBC 的弊端:
1.jdbc 底层没有用连接池、操作数据库需要频繁的创建和关联链接。消耗很大的磁盘资源、网络资源。
2.写原生的 jdbc 代码在 java 中,一旦我们要修改 sql 的话,java需要整体编译,不利于系统维护。
3.使用 PreparedStatement 预编译,需对对变量进行数字设置,这样不利于维护。
4.返回 result 结果集也需要硬编码。
二、Mybatis核心流程
1.mybatis 核心概念 (底层JDBC)
Configuration 、 SqlSessionFactory 、 Session 、 Executor 、 MappedStatement 、StatementHandler、ResultSetHandler
2.流程如下:
(1)获取数据源(构造者模式)
(2)获取执行语句
共有如下四种方式(package优先级最高):
XMLMapperBuilder
(3)操作执行语句
DefaultSqlSessionFactory>CachingExcutor(装饰器模式,默认使用二级缓存)>SimpleExecutor>PreparedStatementHandler>DefaultResultSetHandler
Mybtais有3种执行器,Simple、Batch、Reuse
3.两种配置方式(Annotaion、XML)对比
Annotaion方式:
1.不适合比较复杂的sql 比如关联查询
2.不方便(收集)管理sql
Xml方法:
1.繁琐、麻烦
2.条件不确定的查询
3.容易出错写错,特殊字符转义
三、Mybatis全局配置
1.数据库源
XMLConfigBuilder
(1)properties(系统属性占用配置)
properties中若引入配置文件,则文件的优先级最高,且property中的配置不生效。
properties加载方式见下图:
(2)settings(用于修改运行时行为)
(3)typeAliases(为类建立别名)
package的优先级高于xml
为自己写的类定义别名,无需再写全限定名,实现方式如下
方法一:
类名上加入@Alias('dj')
Mapper中resultType="dj"
方法二:
xml配置文件中<typeAliases></typeAliases>
Mapper中resultType="dj",同上
(4)plugins(提供插件的方式来拦截映射)
作用慢SQL、统计、分页、数据库埋点
xml中加入<plugins><plugin intercepter="com.dj.sqlPrintIntercepter“/></plugins>
责任链设计模式
1-2-3,3-2-1
(5)environments(可配置多个环境)
作用配置数据源,尽管可以配置多个环境,但sqlSessionFactory只能用一个(带default)
原因如下:
(6)typeHandler(类型处理器)
(7)objectFactory(对象工厂)
(8)databaseIdProvider(数据库标识提供商)
(9)mappers(SQL映射文件)
2.执行语句分析
(1)boundSql
作用,预编译、防注入
如何将预编译的语句,加入参数。将#{} 截掉,再替换{}里面的参数
四、执行器
Mybatis有3种执行器,默认用Simple,batch占锁时间久
routingStatementHandler采用装饰器模式,
缓存的作用,提高网站吞吐量
一级缓存
* 1) 不同的SqlSession对应不同的一级缓存
* 2) 同一个SqlSession但是查询条件不同
* 3) 同一个SqlSession两次查询期间执行了任何一次增删改操作
* 4) 同一个SqlSession两次查询期间手动清空了缓存