随笔分类 - mybatis源码学习
花费1个月时间学习mybatis源码学习
摘要:懒加载&嵌套映射 前言: 基于动态代理实现懒加载,在使用过程中,如果会话关闭、跨线程、序列化等情况下,是否能够继续加载? 懒加载 懒加载是为改善,解析对象属性时大量的嵌套子查询的并发问题。设置懒加载后,只有在使用指定属性时才会加载,从而分散SQL请求。 <resultMap id="blogMap"
阅读全文
摘要:结果集映射体系一 前言 本章你将学会MetaObject的使用与原理,以及嵌套子查询原理,包括子查询当中的循环依赖 映射工具MetaObject 所谓映射是指结果集中的列填充至JAVA Bean属性。这就必须用到反射,而Bean的属性 多种多样的有普通属性、对象、集合、Map都有可能。为了更加方便的
阅读全文
摘要:1、StatementHandler 组件和其他组件之间的调用关系。 MyBatis一个基于JDBC的Dao框架,MyBatis把所有跟JDBC相关的操作全部都放到了StatementHandler中。 一个SQL请求会经过会话,然后是执行器,最由StatementHandler执行jdbc最终到达
阅读全文
摘要:1、mybatis缓存使用场景 2、二级缓存定义 二级缓存也称做是应用级缓存,与一级缓存不同的是它的作用范围是整个应用,而且可以跨线程使用。所以二级缓存有跟高的命中率,适合缓存一些修改较小的数据。 3、二级缓存拓展性需求 硬盘:持久化 第三方集成:redis等 4、装饰器+责任链实现二级缓存 屏蔽了
阅读全文
摘要:1、mybatis缓存使用场景 2、mybatis一级缓存命中场景 当mybatis执行相关右边的操作时,均会执行clearCache()方法,清空对应缓存。 一级缓存的作用域默认是sqlsession,也就是同一个会话。但是也可以设置为statement级别缓存,此时级别变小了。此时只有同一个st
阅读全文
摘要:重用执行器执行之前会先查询缓存,是否存在sql ———>statement,可提升性能,因为创建一个statment比较i消耗性能,如果存在sql对应的statement则直接使用该statement和数据库进行交互。 批处理: 批处理器持有: 1、statementList stement列表,用
阅读全文
摘要:JDBC Statement对象用于将sql语句发送到数据库中。 实际上有三种Statement对象,它们都作为在连接上执行sql语句的包容器,他们都专用于发送特定类型sql语句: Statement对象用于执行不带参数的简单sql语句; PreparedStatement对象用于执行带或不带IN参
阅读全文
摘要:<深入浅出Mybatis技术原理与实战>(杨开振) 电子书+源码地址
阅读全文
摘要:sqlsession详细内容可参见 https://www.cnblogs.com/jian0110/p/9452592.html mybatis执行过程: 一个SqlSession只能一个线程使用,所以不是线程安全的,一个线程使用完必须关闭。一个sqlsession可以执行多个sql语句。 sql
阅读全文
摘要:1、简单描述JDBC (1)、JDBC的执行过程 (2)JDBC的三种执行器(也不叫执行器,可以叫做执行计划) a、preparestatement预编译,预编译指的是DB的编译器,会对此sql语句提前编译。然后将预编译的sql语句缓存起来,下次执行时,直接通过设置值的方式,执行语句。(都是数据库做
阅读全文
摘要:新的mysql驱动包在加载的时候已经不需要显示加载有Class.forName("com.mysql.jdbc.Driver")。 因为在MET-INF目录下的java.sql.Driver已经指明了要加载的驱动名称。 个人认为(个人菜鸡,欢迎大佬指正)该做法也可能引入新的问题,当存在多个数据库驱动
阅读全文
摘要:1、mybatis简单介绍: mybatis是JDBC的上层应用,也就是对JDBC的封装。 持久层: 可以将业务数据存储到磁盘,具备长期存储能力,只要磁盘不损坏,在断电或者其他情况下,重新开启系统仍然可以读取到这些数据。 优点: 可以使用巨大的磁盘空间存储相当量的数据,并且很廉价 缺点:慢(相对于内
阅读全文
摘要:1、mybatis简单来说主要有两大功能: 1、sql语句的拼装 2、结果集映射,也就是把查询结果从数据库的二维表转换成具体的javaBean。 2、结果集映射: 简单来说就额是从数据库查出具体的二维表数据,最终通过配置文件或者自动填充的方式,组装成具体的javabean对象。 联合查询时,rowk
阅读全文