MyBatis 框架工作流程
1.MyBatis项目列表
官网列出的项目列表:
项目 | 描述 |
---|---|
MyBatis 3 | 用于Java的SQL映射框架 |
Generator | MyBatis代码生成器 |
Migrations | 数据库变更迁移管理工具 |
Migrations Maven Plugin | 数据库变更迁移管理工具Maven插件 |
MyBatipse | MyBatis Eclipse插件 |
MyBatis for Scala | 用于Scala的SQL映射框架 |
MyBatis Dynamic SQL | 用于MyBatis和Spring JDBC模板的SQL生成器 |
整合项目:
项目 | 描述 |
---|---|
Spring | 与Spring集成 |
Spring Boot Starter | 与Spring Boot集成 |
Guice | 与Guice集成 |
CDI | 与CDI集成 |
Velocity | Velocity脚本插件 |
Freemarker | Freemarker脚本插件 |
OSCache | OSCache缓存插件 |
EHCache | 的Ehcache缓存插件 |
Hazelcast | Hazelcast缓存插件 |
Memcached | Memcached缓存插件 |
Redis | Redis缓存插件 |
Ignite | Apache Ignite缓存插件 |
以上项目用于不同的框架中:
对于Spring Boot Servlet Web
项目,它使用MyBatis框架需要如下依赖:
实际加载的MyBatis项目
有:
1和2:Spring Boot Starter
项目
3:MyBatis 3
项目
4:Spring
项目
2.MyBatis3项目详情
2.1 MyBatis3层级结构
2.2 MyBatis3源码结构
2.3 MyBatis3工作流程
Spring MVC Web + Mybatis项目完整的执行过程:
SpringBoot Web项目通常会省去mybatis-config.xml,将配置信息挪到application.yml
3.MyBatis3重要组件
MyBatis 3项目中的重要组件如下:
- 1.
SqlSessionFactoryBuilder (构造器
):使用Builder模式根据mybatis-config.xml配置或者代码来生成SqISessionFactory。 - 2.
SqlSessionFactory (工厂接口)
:使用工厂模式生成SqlSession。 - 3.
SqlSession (会话)
: 一个既可以发送 SQL 执行返回结果,也可以获取Mapper的接口。 - 4.
SQL Mapper (映射器)
: 它由一个Java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则,它负责发送SQL去执行,并返回结果。
3.1 MyBatis主要模块
- 1.Configuration MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中
- 2.SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能
- 3.Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
- 4.StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数等
- 5.ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所对应的数据类型
- 6.ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
- 7.TypeHandler 负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换
- 8.MappedStatement MappedStatement维护一条<select|update|delete|insert>节点的封装
- 9.SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
- 10.BoundSql 表示动态生成的SQL语句以及相应的参数信息
参考:http://www.mybatis.org/mybatis-3/configuration.html ,http://www.mybatis.org/mybatis-3/sqlmap-xml.html
3.3 MyBatis动态SQL
动态SQL MyBatis做了四件事:
- 1.它以安全的方式执行SQL,并抽象出JDBC的所有复杂性
- 2.它将参数对象映射到JDBC预准备语句参数
- 3.它将JDBC结果集中的行映射到对象
- 4.它可以使用XML中的特殊标记生成动态SQL,也可以通过使用各种模板引擎生成动态SQL
该库充分利用了MyBatis中的前三个功能,并且本质上成为另一个用于生成动态SQL的模板引擎。
参考:http://www.mybatis.org/mybatis-dynamic-sql/docs/howItWorks.html
3.4 MyBatis与JDBC
MyBatis底层用的还是JDBC;
JDBC执行流程:
//1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2. 获得数据库连接
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
//3.操作数据库,实现增删改查
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");
参考资料:
[ 1 ]. https://blog.mybatis.org/p/products.html
[ 2 ]. http://www.mybatis.org/mybatis-3/zh/getting-started.html
[ 3 ]. http://www.mybatis.org/mybatis-3/configuration.html
[ 4 ]. http://www.mybatis.org/mybatis-3/sqlmap-xml.html
[ 5 ]. http://www.mybatis.org/mybatis-dynamic-sql/docs/howItWorks.html