MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
一、与JDBC的关系
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,
可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
Mybatis 是对JDBC的封装的持久层框架。
所以要记住MyBatis的宗旨:是基于JDBC封装的框架,底层真正与数据库的操作肯定还是通过JDBC来进行的。
二、JDBC操作数据库步骤
1、加载数据库驱动
2、创建数据库连接
3、创建Statement对象
执行静态SQL语句。通常通过Statement实例实现。
执行动态SQL语句。通常通过PreparedStatement实例实现。
执行数据库存储过程。通常通过CallableStatement实例实现。
4、执行SQL
5、获取结果
6、关闭连接
伪代码如下:
Class.forName("com.MySQL.jdbc.Driver");
Connection conn = DriverManager.getConnection("连接URL","用户名","密码");
Statement stmt=conn.createStatement();
stmt.executeUpdate("增加,删除,修改记录的SQL语句");
ResultSet rs = stmt.executeQuery("查询记录的SQL语句");
while(rs.next()){
//对记录的操作
}
rs.close();
stmt.close();
conn.close();
三、Mybatis架构
接口层
核心就是SqlSession接口,定义了mybatis暴露给应用程序调用的api。
核心处理层
配置解析
在初始化过程中,会加载mybaits-config.xml配置文件、映射配置文件及Mapper接口中的注解信息,
解析后的配置信息会形成相对应的对象并保存到Configuration对象中。
SQL解析
解析映射文件中定义的动态SQL节点,并形成数据库可执行的SQL语句。
SQL执行
涉及到很多组件,比较重要的是Executor、StatementHandler、ParameterHandler和ResultSetHandler。
Executor主要负责维护一级缓存和二级缓存,并提供事物管理的相关操作,它会将数据库相关操作委托给StatementHandler完成。
StatementHandler首先通过ParameterHandler完成SQL语句的参数绑定,然后通过java.sql.Statement对象执行SQL语句并得到结果集,最后通过
ResultSetHandler完成结果集的映射。
基础支持层
基础支持层包含mybatis的基础模块,这些模块为核心处理层提供支持。如反射模块等
源码
Configuration:MyBatis所有的配置信息都维持在Configuration对象之中
SqlSession:作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
StatementHandler:封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合 ParameterHandler:负责对用户传递的参数转换成JDBC Statement 所需要的参数
ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
TypeHandler :负责java数据类型和jdbc数据类型之间的映射和转换 MappedStatementMappedStatement维护了一条节点的封装
SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
BoundSql 表示动态生成的SQL语句以及相应的参数信息
参考:
http://www.zhenchao.org/2017/10/15/mybatis-mechanism/
https://blog.csdn.net/luanlouis/article/details/40422941
网友评论