Claire's Blog

Thinking will not overcome fear but action will.

Mybatis核心处理层-ResultHandler参数映射核心逻辑-4

结果集映射/延迟加载/动态代理

ResultSetHandler 参数映射核心逻辑 -4 一、嵌套查询&延迟加载 延迟加载的含义:对象会在真正时候的时候才会被加载到内存,并且调用。初始化时只绑定对应属性的代理对象,真正使用时,调用代理对象最终实现延迟加载属性 1.CGLIB 动态代理 在java中提到比较多的就是动态代理就包括:JDK动态代理、CGLIB动态代理 两者的区别就在,JDK动态...

Mybatis核心处理层-ResultHandler参数映射核心逻辑-3

结果集映射/嵌套映射

ResultSetHandler 参数映射核心逻辑 -3 一、嵌套映射 以上处理了普通映射类型,还有另一个处理分支是处理嵌套映射类型的 1.handleRowValuesForNestedResultMap 里面很多方法是与上面处理简单类型是相同的,不再介绍 private void handleRowValuesForNestedResultMap(ResultSetWr...

Mybatis核心处理层-ResultHandler参数映射核心逻辑-2

结果集映射/简单映射/自动映射

ResultSetHandler 参数映射核心逻辑 -2 一、简单映射 private void handleResultSet(ResultSetWrapper rsw, ResultMap resultMap, List<Object> multipleResults, ResultMapping parentMapping) throws SQLException ...

Mybatis核心处理层-ResultHandler参数映射核心逻辑-1

结果集映射

ResultSetHandler 参数映射核心逻辑 -1 一、ResultSetHandler public interface ResultSetHandler { //处理ResultSet <E> List<E> handleResultSets(Statement stmt) throws SQLException; //处理游标Resul...

Mybatis核心处理层-SqlSource/SqlNode

组合模式/OGNL

SqlSource/SqlNode 一、SqlSource 1.组合模式 通过组合的模式,用户可以像调用简单组件那样调用复杂组件,并且不需要知道复杂组件内部的执行逻辑 优点:操作简单,屏蔽复杂性,符合“开放-封闭”原则 组成部分 抽象组件 -- Component 树叶 --- Leaf 树枝 --- Composite 调用者 --- Client 2...

Mybatis核心处理层-初始化

建造者模式/BaseBuilder/xml

mybatis核心处理层-初始化 初始化主要依靠读取mybatis配置文件mybatis-config.xml 或者通过注解进行包扫描的方式,进行对象的注入 一、建造者模式-生成器模式 将一个复杂对象的构建过程与他的表示分离。一个复杂对象的构建也可以拆成若干简单步骤,用户指出了解对象类型和内容,不需要关注内部复杂的构造过程 1. 角色 建造者(Builder)...

Mybatis基础支持层-缓存模块

一级缓存/二级缓存/装饰器模式

mybatis基础支持层-缓存模块 一、装饰器模式 使用场景:需要动态的为对象添加功能,基于组合的方式实现(而不是继承,组合优于继承),保证已有组件的稳定性 角色: Component 组件: 接口,定义了全部组件实现类以及所有装饰器实现的行为 ConcreteComponent 具体组件实现类 : 实现了Component接口,实现基础功能的...

Mybatis基础支持层-事务模块

事务

mybatis基础支持层-事务模块 模块本身相对简单,含有TransactionFactory,Transaction两个接口,及各有两个实现,在最终事务的过程是依靠例如Spring等容器的调度实现的,后续还会继续了解Spring & Mybatis实现事务的过程 一、Transaction public interface Transaction { /** ...

Mybatis基础支持层-Binding模块

Binding/代理/工厂

mybatis基础支持层-Binding模块 一、MapperRegistry Mapper的注册中心,主要用于addMapper和getMapper,并对已经加载的Mapper进行缓存 addMapper public <T> void addMapper(Class<T> type) { //是否为接口 if (type.isI...

Mybatis基础支持层-数据源模块

工厂方法模式/数据源

mybatis基础支持层-数据源模块 javax.sql.DataSource接口,Mybatis也提供了实现类PooledDataSource、UnpooledDataSource |--UnpooledDataSource <- UnpooledDataSourceFactory --| | ...