- 博客(15)
- 问答 (1)
- 收藏
- 关注
原创 mybatis-sqlsession解析
概述mybatis的执行流程(来源于网络):前几篇分析过Executor,执行器在StatementHandler上添加了缓存和事务的功能,但api还是比较偏底层,因此需要再Executor上再封装、增强一层,因此就有了SqlSession。使用实例:// 构造 SqlSessionFactoryReader reader = Resources.getResourceAsReader("org/apache/ibatis/autoconstructor/mybatis-config.xml")
2020-07-09 17:06:25
459
原创 mybatis-ResultHandler解析
概述结果值的处理相当于参数的处理会复杂一些,负责结果值转换的类是 ResultSetHandlerpublic interface ResultSetHandler { /** * 处理数据集并返回 * @param stmt * @param <E> * @return * @throws SQLException */ <E> List<E> handleResultSets(Statement stmt) throw
2020-07-08 18:11:35
11528
1
原创 mybatis-StatementHandler解析
概述StatementHandler,Statement处理器,主要是和jdbc中的Statement交互。public interface StatementHandler { /** * 创建Statement * @param connection * @param transactionTimeout * @return * @throws SQLException */ Statement prepare(Connection connection
2020-07-08 10:00:40
238
原创 mybatis-executor解析
概述执行器包主要包含了 Executor、ParameterHandler、ResultSetHandler、StatementHandler。这些都是sql执行中非常重要的一环,本篇从Executor开始。Executor:执行器,主要职责是在sql执行过程中添加缓存和事务的功能。与jdbc相关的操作会继续委托给StatementHandler。Executorpublic interface Executor { ResultHandler NO_RESULT_HANDLER = nu
2020-07-07 15:21:28
310
原创 mybatis-初始化(三)statement解析
概述Statement是我们平时sql的载体,一条sql代表一个Statement,来看下mybatis如何解析Statement。接着上篇最后的入口private void buildStatementFromContext(List<XNode> list, String requiredDatabaseId) { for (XNode context : list) { final XMLStatementBuilder statementParser = new XML
2020-07-04 14:26:47
1065
原创 mybatis-初始化(二)映射文件解析
概述mapper.xml是我们使用mybatis接触最多的,需要编写sql、ResultMap、ParameterMap等。且看如何解析xml,并注册到Configuration中。入口接着上篇mybatis-confg解析的末尾,关于mapper.xml的解析。先上实例mapper内容:入口类是 XMLMapperBuilder,无论是单个还是批量都是循环遍历 XMLMapperBuilder.parse()。public class XMLMapperBuilder extends Bas
2020-07-03 22:30:25
190
原创 mybatis-初始化(一)mybatis-confg解析
概述mybatis初始化主要包含mybatis全局配置加载、解析,mapper文件加载解析。本篇主要是对mybatis配置文件解析进行解读。先看下mybatis-config.xml有些啥内容configuration(配置)properties(属性)settings(设置)typeAliases(类型别名)typeHandlers(类型处理器)objectFactory(对象工厂)plugins(插件)environments(环境配置)environment(环境变量)
2020-07-02 10:41:50
237
原创 mybatis-binding 绑定包解析
概述为了实现直接调用Mapper接口类的方法,便达到调用sql的目标,mybatis-binding包提供了Mapper接口的代理类和其方法的代理类。主要起到连接 Mapper.java 和 Mapper.xml的作用。方法映射绑定为了连接Mapper接口的方法 和 Mapper.xml的statement,于是就有了类 MapperMethodpublic class MapperMethod { // 代表一条sql命令的属性 private final SqlCommand com
2020-06-30 21:50:40
221
原创 mybatis-type 类型包解析
概述类型包是mybatis提供类型转换处理的包,mybatis提供了许多基本类型处理器的实现。在javaType和jdbcType之间转换时所用到。TypeHandler本包的重点类,类型处理器public interface TypeHandler<T> { // 往Statement中设置参数,javaType 转 jdbcType void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jd
2020-06-30 14:33:22
670
原创 mybatis-cache缓存包解析
概述缓存包是mybatis对缓存的抽象和实现,可为其他模块提供缓存的支持。其设计也很值得借鉴。大概分为缓存定义(抽象、异常、缓存键)缓存实现缓存装饰者可以重点在于缓存策略装饰模式实现,可以复习复习装饰模式啦。Cachepublic interface Cache { String getId(); void putObject(Object key, Object value); Object getObject(Object key); Object removeOb
2020-06-29 21:40:30
353
1
原创 mybatis-reflection反射包解析
反射包解析概述mybatis反射包,提供了反射相关的工具,为啥要提供这些工具呢,java不是已经提供反射的功能了吗?java反射虽然已经很强大,但是api偏底层,要想使用好可能会需要大量重复代码,可能使用不当也会产生性能问题,因此mybatis提供反射包提炼、封装、增强反射api,让上层应用用的更舒心。包内容:接下来会挑重点的类讲解下原理。Invokerinvoker单独有一个子包,概念比较独立,也比较简单,代表执行器。包装了Method、Field的执行Invoker定义:publi
2020-06-29 17:21:04
569
原创 mybatis-spring原理解析
mybatis-spring解析概述mybatis-spring让mybatis和Spring无缝对接,无需再关心mybatis中的Configuration、SqlSessionFactory、SqlSession,自动为Mapper创建实例注册到SpringIoc容器中, 并由Spring事务管理。在使用spring的前提下更加简化了Mybatis的操作,使用过程不用关心任何mybatis的相关概念。Mybatis-spring主要做的内容包含: mybatis相关类 “Spri.
2020-06-29 11:29:25
1572
原创 电商交易之订单中心设计(二)
背景上篇说过订单基础设计,介绍了订单中心应该有哪些能力,大概有哪些字段,还有容量上的处理。上篇有点像在讲订单的数据模型,这篇来看看订单的业务模型。价格模型订单的价格怎么计算得来?普通电商平台用户 实付 = 商品原价 * 商品数量 - 优惠 - 抵扣+ 运费。抵扣是啥?抵扣其实就是一种平台给予用户的等价物,类似于只能在特定平台使用的钱。例如:淘宝(淘金币)、京东(京豆)抵扣为啥不和优惠合并?在业务初期其实抵扣和优惠并无区别,但当具有一定规模时,抵扣可以作为一种单独的业务域独立的发...
2020-06-02 23:12:23
1885
原创 电商交易之订单中心设计(一)
背景在电商交易中台团队工作了一段时间,越发觉自己需要学习的东西还有很多,因此想要定期整理、反思一下所见、所想,因此先从接触的订单中心开始。订单是什么,我所理解,订单就是交易行为的记录。是用户某一刻在平台上购买的凭证,订单当时对应的商品、优惠等信息是不可更改的。换一种说法就是订单是交易行为的快照。在按下”快门“(下单)的一刻,所有信息都被锁定了。订单在公司业务中也是起一个大上下文的作用,保存着完整的元数据,下游需要时自取。因此对订单的设计注定是更加看重扩展性的。不然每来一个新的业务,都需要通过加字
2020-05-19 21:21:50
6025
1
转载 java:IO流学习小结
今天刚刚看完Java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板、内存、键盘等处理设备上得数据操作,根据处理数据的数据类型的不同可以分为:字节流(抽象基类为InPutStream和OutPutStream)和字符流(抽象基类为Reader和Writer)。根据
2016-05-31 15:52:33
158
空空如也
Mybatisi 拼接SQL奇葩问题
2016-06-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人