后端多多少少会用到db,java中常用的db架构就是mybatis。
先来看看mybatis
=====================接口层
mybatis的接口层核心类是sqlSessionFactory,SqlSession。其中SqlSession是所有数据库操作的API。
Configuration是另一个配置相关的重要的类,Configuration与DefaultSqlSessionFactory是1:1的关联关系。这就意味着在一个DefaultSqlSessionFactory衍生出来的所有SqlSession作用域里,Configuration对象是全局唯一的。其中SqlSessionFactory提供了getConfiguration()接口来抛出Configuration对象。
配置解析就是解析SqlMapConfig.xml和SqlMap.xml。
===================核心层
在Sql执行过程中。Mybatis中Executor是核心,
Executor提供了如下能力:
1,query,update,insert,delete等,它需要mappedStatement, parameter, resultHandler等对象。
2,事务提交与回滚,这委托给Transaction对象来完成
3,缓存,createCacheKey() / isCached()
4,延迟加载,deferload()
5,关闭,close(),主要是事务回滚/关闭
======================基础层
1,logging,不用多说,提供了日志框架接口和日志级别
2,io:读取资源文件的api,封装mybatis自身所需要的classLoader和加载顺序
3,reflection:在mybatis的结果映射中大量用到反射,需要频繁读取class元数据,反射调用get/set
4,exception:spring对应用程序中无法进一步处理的都转成runtimeException了,例如SqlException
5,缓存:一是session或者statement作用域级别的缓存,默认是session;二是二级缓存,cacheExecutor来实现。
6,数据源
7,事务。。
=================================================
腾讯的db轮子是基于mybatis,
1,做了一层支持测试环境和现网db配置分离,方便发布和管理db配置。
2,通过注解的方式关联到静态数据源
3,支持动态数据源,根据网络请求,配置中心等决定实际db配置。
4,kilim模式下使用db,一般的套路另开db任务线程处理,因为db的操作是阻塞的。
5,做事务的套路是自定义注解,然后使用一个MethodInterceptor对不同的模式进行SqlSessionManager的处理,譬如rollback,commit,close等操作。
6,轮子的log也是通过interceptor自己做了一些定制,针对prepare的statementHandler,update的statementHandler,亦或是update的Executor type做了日志定制。
7,数据源方面就是用HicariDataSource,也支持非HikariDataSource。解析配置文件的数据源进行初始化。
===================================================
ps:本博客致力于有温度的it沉淀和积累