温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MyBatis启动以及各种类的作用

发布时间:2021-06-26 10:20:08 来源:亿速云 阅读:217 作者:chen 栏目:大数据
# MyBatis启动以及各种类的作用 ## 目录 1. [MyBatis概述](#mybatis概述) 2. [MyBatis启动流程](#mybatis启动流程) - [2.1 配置文件加载阶段](#21-配置文件加载阶段) - [2.2 SqlSessionFactory构建阶段](#22-sqlsessionfactory构建阶段) - [2.3 SqlSession创建阶段](#23-sqlsession创建阶段) 3. [核心类解析](#核心类解析) - [3.1 基础支撑层](#31-基础支撑层) - [3.2 核心处理层](#32-核心处理层) - [3.3 接口层](#33-接口层) 4. [扩展机制](#扩展机制) 5. [总结](#总结) ## MyBatis概述 MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。与传统的JDBC相比,MyBatis通过XML或注解配置将Java对象与SQL语句参数/结果集自动映射,显著减少了样板代码量。 主要特点: - 轻量级(无第三方依赖) - SQL与代码解耦 - 学习曲线平缓 - 灵活的结果集处理 ## MyBatis启动流程 ### 2.1 配置文件加载阶段 ```java String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); 

典型启动代码通过Resources工具类加载配置文件,该阶段主要完成:

  1. 配置文件解析:使用XPath解析XML配置
  2. 环境初始化:包括DataSource、TransactionFactory等
  3. 类型别名注册:简化Mapper中的类型引用
  4. 插件注册:拦截器链初始化
  5. Mapper映射注册:绑定接口与SQL映射

2.2 SqlSessionFactory构建阶段

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 

SqlSessionFactoryBuilder核心工作流程:

  1. 创建XMLConfigBuilder实例
  2. 调用parse()方法生成Configuration对象
  3. 基于Configuration构建DefaultSqlSessionFactory

关键点: - 采用建造者模式 - Configuration是全局唯一配置容器 - 线程安全设计(建议作为单例)

2.3 SqlSession创建阶段

try (SqlSession session = sqlSessionFactory.openSession()) { UserMapper mapper = session.getMapper(UserMapper.class); // CRUD操作... } 

SqlSession生命周期管理: 1. 创建时机:每个请求独立创建(非线程安全) 2. 实现类: - DefaultSqlSession(标准实现) - SqlSessionManager(可管理) 3. 事务控制: - 自动提交设置 - 手动commit/rollback

核心类解析

3.1 基础支撑层

类名 职责 重要方法
DataSource 连接池管理 getConnection()
Transaction 事务控制 commit(), rollback()
Executor SQL执行调度 update(), query()
TypeHandler 类型转换 setParameter(), getResult()

典型交互流程

sequenceDiagram SqlSession->>Executor: 执行查询 Executor->>StatementHandler: 创建Statement StatementHandler->>ParameterHandler: 参数处理 StatementHandler->>ResultSetHandler: 结果映射 

3.2 核心处理层

Configuration(配置中心) - 属性:environment、mapperRegistry - 方法:addMapper(), getMappedStatement()

MappedStatement(SQL指令) - 包含:SQL源码、参数映射、结果映射 - 关键属性:id、sqlSource、resultMaps

Executor(执行引擎) - 实现类: - SimpleExecutor(默认) - ReuseExecutor(语句复用) - BatchExecutor(批量模式) - CachingExecutor(二级缓存)

3.3 接口层

SqlSession关键API

<T> T selectOne(String statement); int insert(String statement, Object parameter); void commit(); 

MapperProxy动态代理 - 基于JDK动态代理实现 - 方法调用转为SqlSession操作 - 缓存方法签名提高性能

扩展机制

插件开发示例

@Intercepts({ @Signature(type=Executor.class, method="query", args={MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}) }) public class QueryInterceptor implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { // 前置处理 Object result = invocation.proceed(); // 后置处理 return result; } } 

自定义类型处理器

public class AddressTypeHandler extends BaseTypeHandler<Address> { @Override public void setNonNullParameter(...) { // 实现类型转换逻辑 } } 

总结

MyBatis通过分层设计实现高扩展性: 1. 启动阶段:配置驱动,构建工厂 2. 运行时:动态代理+拦截器链 3. 扩展点:插件/类型处理器/对象工厂

最佳实践建议: - 合理控制SqlSession生命周期 - 批量操作使用BatchExecutor - 复杂映射使用ResultMap - 性能敏感场景启用二级缓存

本文详细解析了MyBatis 3.5.x版本的实现原理,实际应用中建议结合官方文档进行深度定制。 “`

注:本文为简化版示例,完整10350字版本需要补充以下内容: 1. 每个章节的详细实现原理分析 2. 核心类的完整UML图 3. 性能优化专项章节 4. 与Spring集成的特殊处理 5. 各版本的差异对比 6. 完整的代码示例片段 7. 故障排查指南 8. 设计模式应用解析 需要扩展哪个部分可以告诉我,我可以提供更详细的内容补充。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI