计算机有两大基本的功能:计算和存储。在存储方面,缓存的设计和实现也是一门学问。这门学问里面包含什么门道呢?不妨研究一下MyBatis缓存类PerpetualCache,一定会大有收获的。在MyBatis里面,存在一个PerpetualCache,它是一级缓存、二级缓存的最基本实现,但PerpetualCache只不过包装了一下HashMap。Perpe...

MyBatis生态强大,更新频繁,足见其生命力非常旺盛。刚刚进行了新版本的发布,MyBatis 3.5.3 发布。在ORM领域,MyBatis是当之无愧的王者。MyBatis首创了SQL映射和ResultSet映射的设计思想,给行业发展指明了方向,历经时间的考验,面对各种后起之秀的挑战,依然笑傲江湖,它是软件工程史上的奇迹。1、MyBatis 3.5....

对于mybatis的缓存,我们往往有这样两个疑问:一级缓存、二级缓存的过期时间是多少?后台是否有个线程在检测?针对这两个问题,见下面的分析:1、一级缓存无过期时间,只有生命周期(1)MyBatis在开启一个数据库会话时,会创建一个新的SqlSession对象,SqlSession对象中会有一个Executor对象,Executor对象中持有一个Perp...

mybatis框架是java web开发必备的框架,很多mybatis新手写代码的时候,需要在sql中使用到大于等于,这时候如果像sql中一样直接使用了>、<、>=、<=,在运行的时候于是就出现了一些意想不到的错误,为什么会出现这种情况呢?其实,跟sql注入的道理一样,sql中的>、<、>=、<=与myb...

MyBatis源码采用了若干设计模式,在所有的设计模式中,关于“对象生成”类型的设计模式往往至关重要。生老病死嘛,生是第一位的。本文主要讲述一下产生MyBatis二级缓存的Builder设计模式。MyBatis二级缓存的产生过程当我们配置二级缓存的时候,是这样设置的:<cache eviction="FIFO" flushIn...

1、JDBC的预编译用法相信每个人都应该了解JDBC中的PreparedStatement接口,它是用来实现SQL预编译的功能。其用法是这样的:Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://127.0.0.1:3306/mybatis&...

缓存,这个伟大的创新,无处不在,而且还喜欢分级,往往以多级缓存的形式出现。mybatis的缓存如出一辙,也划分为一级缓存和二级缓存。紧跟 MyBatis一级缓存介绍 ,本文开启MyBatis二级缓存介绍。1、CPU的二级缓存缓存无处不在,其最根本的起源是CPU的多级缓存,如下所示:对比一下CPU的二级缓存,更有助于学习MyBatis二级缓存。二级缓存是...

默认情况下,MyBatis只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。这也就是大家常说的MyBatis一级缓存,一级缓存的作用域是SqlSession。MyBatis一级缓存的运行过程是这样的:执行SQL语句的过程中,首次执行它时从数据库获取的所有数据会被存储在一段高速缓存中,今后执行这条语句时就会从高速缓存中读取结果,而不是再次查询数据...

提醒:本文主要讲述一下使用MyBatis对MySQL数据库添加记录后获取主键ID的方法,不涉及MS Server或者Oracle,敬请注意。MyBatis添加记录后获取主键ID,这是一个很常见的需求。这个需求有分为两种情况:(1)添加单条记录时获取主键值;(2)获取批量添加记录时各记录的主键值。备注:MyBatis从3.3.1版本开始支持批量添加记录并...

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上做的增强,号称是"为简化开发、提高效率而生"。为什么会诞生MyBatis-Plus这个东西呢?明眼人一猜就能明白,无非就是MyBatis有不足,MyBatis-Plus想做个增强,把MyBatis的不足给补上。以彼之道,还彼之身。照此推理,既然连大名鼎...

1、@SelectKey简介@SelectKey注解的作用域是方法,效果与<selectKey>标签等同。@SelectKey注解用在已经被 @Insert 或 @InsertProvider 或 @Update 或 @UpdateProvider 注解了的方法上。若在未被上述四个注解的方法上作 @SelectKey 注解则视为无效。2、@...

MyBatis常用注解有很多,如下图所示:总体而言,这些常用注解分为三大类:SQL语句映射,结果集映射和关系映射。1、SQL语句映射@Insert:实现新增功能@Insert("insert into user(id,name) values(#{id},#{name})") @Options(useGeneratedKeys = ...

1、插件的生命周期众所周知,MyBatis有四大核心对象:(1)ParameterHandler:处理SQL的参数对象(2)ResultSetHandler:处理SQL的返回结果集(3)StatementHandler:数据库的处理对象,用于执行SQL语句(4)Executor:MyBatis的执行器,用于执行增删改查操作Mybatis插件原理就是:使...

要想一针见血地理解MyBatis插件机制,只需要明白一点:原身和变身。也就是说,一旦配置上插件,ParameterHandler,ResultSetHandler,StatementHandler,Executor这四大核心对象,将会生成变身,是一种代理对象,而不再是原身。1、MyBatis插件配置MyBatis框架的配置文件,即mybatis-con...