手写 MyBatis
纯 MyBatis 开发步骤
- 读取 mybatis-config.xml 配置文件
- 构建 SqlSessionFactory
- 打开 SqlSession
- 获取 Mapper 接口对象
- 调用 Mapper 接口对象的方法操作数据库
源码流程
寻找入口 –> 断点跟踪 –> 先粗后细 –> 精略结合
目录结构
UUserInfoMapper 接口
1 | // 接口定义执行数据库方法 |
UUserInfoMapper.xml
1 | <mapper namespace="com.mandalat.apolar.metadata.dao.mapper.MetaBaseMapper"> |
- 数据库对象类
- mapping
MyConfiguration
1 | public class MyConfiguration (){ |
MyEnviroment
1 | // 映射 mybatis-config.xml |
MapperStatement
1 | // 映射 Mapper.xml |
- executor
MyExecutor
1 | // 数据库初始化操作 |
- session
MySqlSession
1 | public class MySqlSession { |
MySqlSessionFactory
1 | public class MySqlSessionFactory { |
MySqlSessionFactoryBuild
1 | public MySqlSessionFactory build(InputStream inputStream){ |
- proxy
MaperProxy
1 | public class MaperProxy implements InvocationHandler (){ |
- parsing
XMLConfigBuilder
解析 XML 获取环境对象,Mapper 对象
- pool
MyDataSourceInterface
1 | public interface MyDataSourceInterface extends DataSource{ |
MyDataSource
1 | public class MyDataSource implements MyDataSourceInterface{ |
1 | <dependencies> |
1 | // Resources <==> 类名.class.getClassLoder() |
1 | environments -> dataSource |
pom.xml 说明
- 全局配置 project build
配置示例
1 | <build> |
pluginManagement <plugins> '子 pom' 直接使用 '父 pom' 定义的 plugin
- 配置 profile build
1 | <profiles> |