基于mybatis的轮子构造

后端多多少少会用到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沉淀和积累

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值