MyBatis启动以及各种类的作用

发布时间:2021-06-26 10:20:08 作者:chen
来源:亿速云 阅读:203
# 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. 设计模式应用解析 需要扩展哪个部分可以告诉我,我可以提供更详细的内容补充。

推荐阅读:
  1. Mybatis框架的作用有哪些
  2. Mybatis有什么作用

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

mybatis

上一篇:Javasript设计模式之链式调用的示例分析

下一篇:怎么解决nginx不能运行php文件的问题

相关阅读

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

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