Mybatis详解

一、简介

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两次查询期间手动清空了缓存

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值