技术博客
文章平均质量分 94
yaMa_码子
码子的源码之路
展开
-
Mybatis源码(二)之Spring整合mybatis创建SqlSession
Spring未整合Mybatis和整合之后Mybatis获取的方式:Spring没有整合Mybatis之前,获取SqlSession很简单就是DefaultSqlSessionFactory.openSession();Spring整合Mybatis的时候,稍复杂些: 扫描dao,注册BeanDefinition并setBeanClass=MapperFactoryBeanSqlSessionT原创 2017-11-08 19:00:14 · 3271 阅读 · 0 评论 -
MyBatis源码(六)之动态Sql解析运行阶段BoundSql
上篇博文讲述的是dao方法参数是如何传递到Executor的MyBatis源码(五)之动态Sql解析运行阶段参数处理 一定要有这个基础,在进行本博文你将看到一条Sql是如何拼装出来的。我把运行时信息打印出来,主要是在顺便回顾下之前的讲解读取mapper过程,解析select insert 等标签的时候有一行代码是获取SqlSouce的,解析的时候有一个动态标签 if foreach where 等原创 2017-11-24 13:28:43 · 1311 阅读 · 0 评论 -
Java锁Lock源码分析(一)
Java中的锁Lock源码分析(一)Java中的锁有很多,同时也是了整个并发包的基础,可以说明白了锁整个并发包你也就能明白一半了,如果之前你有所了解的话java中的锁你或许对这些名词有些概念:独占锁、共享锁公平锁、非公平锁、重入锁条件锁读写锁本节要点: 0)锁是如何表示的(怎么样就代表获取到了锁) 1)volatile在作用 2)lock的源码分析 ...原创 2018-02-27 15:59:26 · 6141 阅读 · 2 评论 -
Java锁Lock源码分析(二)条件锁
本篇博文主要分析条件锁的源码实现、以及状态两个队列的变化: 1)Condition的使用场景 2)lock方法的队列(FIFO双向无环链表)官方点说是同步队列 sync queue 3)condition队列(FIFO单向队列) 官方点说是条件队列 condition queue 4) await和signal方法被调用两个队列的变化图本文是依赖于上篇博文Java锁...原创 2018-03-01 12:06:43 · 2769 阅读 · 2 评论 -
Java集合迭代时修改
Java集合迭代时修改本文主要分如下几个要点: 0)Java集合分类 1)对于熟悉JDK集合源码的帮你加深对ConcurrentModificationException的下印象 2)对于迭代时修改提供一个正确的姿势。 3)单线程和多线程环境下迭代时修改的方案PS:本文不会详细讲解每个集合的源码,也不会画出集合的继承关系(网上有太多详细的讲解和关系图...原创 2018-02-11 12:09:58 · 4926 阅读 · 0 评论 -
ThreadLocal源码分析
ThreadLocal源码一些思考ThreadLocal经常出现在各大框架:Hibernate/struts2/spring,主要完成的功能就是同一线程内,变量在不同方法中(非入参形式)传递,不同线程之间传递的变量互不影响。这里所说的变量比如session,connection等等,下图就是对这句话的完美阐述:...原创 2019-09-17 11:22:55 · 194 阅读 · 0 评论 -
事务隔离级别和传播行为
数据库隔离级别和传播行为终极篇曾经我以为我对数据库事务和隔离级别很熟悉了,至少以前整理过,看过网上很多文章,有些带有命令行操作的印象挺深,但是事务传播(包块调用外部系统服务)、分布式锁、mybatis一级缓存等一起存在,导致了很多看起来听不可思议的问题,这都是线上案例。项目中架构师是否跟你说类似的话,事务最好不要嵌套?...原创 2018-06-26 12:02:49 · 1009 阅读 · 0 评论 -
Java锁lock源码分析(三)读写锁
Java锁lock源码分析(三)读写锁前文Java锁Lock源码分析(一)提过在java的Lock中获取锁就表示AQS的volatile int state =1表示获取到了独占锁,state>1表示当前线程重入锁(获取锁了再次获取到了锁)即大于0就表示获取到了独占锁。独占就意味着排队,失败,系统吞吐量下降,用户体验下降等等。有些情况不要独占,比如说读与读不互斥,读与写互斥,写与写互...原创 2018-06-19 16:32:10 · 1445 阅读 · 2 评论 -
事务传播行为引发的问题
事务隔离级别和传播行为高级篇有了前文的基础,才可进行本文的阅读。原创 2018-06-26 12:07:18 · 407 阅读 · 2 评论 -
Java分布式锁(一行代码搞定)
Java分布式锁(一行代码搞定)前面几篇文章都是介绍的java单机锁,但是目前很多应用都是分布式的(不同jvm进程),单机锁已经不能满足应用的需求了...原创 2018-06-20 17:49:50 · 6336 阅读 · 1 评论 -
MyBatis源码(五)之动态Sql解析运行阶段参数处理
上篇博文分析到Mapper文件的读取,以及启动过程动态Sql的解析部分 MyBatis源码(四)之mapper文件解析和动态Sql解析启动阶段本博文继续动态Sql的解析,在运行时的解析。前文也提过,在动态Sql中,sql的最终生成是依靠传入的参数来决定的。所以在继续分析之前先来分析下是mybatis是怎么接收参数的。dao参数上可能有@Param注解,参数中可能有集合Collection,如何跟之前原创 2017-11-22 18:49:49 · 627 阅读 · 2 评论 -
MyBatis源码(四)之mapper文件解析和动态Sql解析启动阶段
上篇博文介绍了Mybatis 执行流程全貌 非常重要。本博文mybatis启动过程是如何解析配置文件的。 这还得从Spring的配置文件中SqlSessionFactoryBean 创建SqlsessionFactory说起。该Bean实现了InitializingBean【又是一个Spring的拓展点】在Spring实例化设置和属性之后会触发afterPropertySet的调用。 每个mapp原创 2017-11-17 18:35:18 · 767 阅读 · 0 评论 -
Java单例
Java单例模式任何一个系统的大部分配置文件读取、线程安全类工具类、常量类等都会使用单例模式---不要说你没见过,有可能见过但是知道是单例模式,还有你确定你懂单例模式吗?你有梦想吗?哈哈,我想当架构师,我想当CTO,我想当一名技术极客----狗屁!!!先醒一醒,你凭什么能成功,靠嘴皮子,还是靠意淫?单例其实是分成了如下的四种方式单例—懒汉模式单例—饿汗模式*单例—双重检查单例–基于类初始化原创 2017-09-05 22:32:16 · 358 阅读 · 0 评论 -
Mybatis源码之温故jdbc
我们回顾下之前没有使用Mybatis,使用原生态jdbc的场景public Integer insert(User user) { Connection conn = null; PreparedStatement preparedStatement = null; String insertSql = "INSERT INTO USER (name,原创 2017-11-08 10:28:52 · 459 阅读 · 0 评论 -
Mybatis源码(一)之Spring整合Mybatis扫描dao
带着几个问题我们来分析下Spring是如何整合Mybatis的1.Spring是如何扫描Dao,将其转换成BeanDefinition注册到BeanFactory的? 2.为什么我们可以直接使用dao接口调用方法就能操作数据库了? 3. 原生Mybatis的使用和jdbc的使用与跟Spring整合之后,我们到底哪里方便使用了你可能猜到: 问题一使用Spring的拓展接口。 问题二使...原创 2017-11-08 18:58:47 · 4199 阅读 · 0 评论 -
Mybatis源码(三)之SqlSession执行流程全貌
上一篇博文解释了SqlSession是如何创建的Spring整合mybatis创建SqlSession本篇博文注重你对流程的理解,可以增长你的内功修为。 后续的博文也会写一些实现细节跟你平时调试很相关,比如像动态Sql,读取配置文件等。 后者注重于你调试(就是码农干的事情),前者让你从全局更了解Mybatis工作流程。 了解全貌之后,遇到什么问题,或者着重看那块,能帮你快速定位源码,省下的就是原创 2017-11-10 18:55:40 · 672 阅读 · 0 评论