1 概述Mybatis插件又称拦截器,Mybatis采用责任链模式,通过动态代理组织多个插件(拦截器),通过这些插件可以改变Mybatis的默认行为(诸如SQL重写之类的),MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor (update, query, f...

之前文章介绍了MyBatis的基本用法、关联映射、动态SQL和缓存机制等知识,其所有的配置都是使用XML完成,但是大量的XML配置文件的编写是非常繁琐的,因此MyBatis也提供了更加简便的基于注解( annotation)的配置方式。本文将重点介绍MyBatis的注解配置, MyBatis的注解位于org.apache.ibatis.annotati...

一级缓存Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言。在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL,因为使用SelSession第一次查询后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声...

Redis 中的字符串是可以修改的字符串,在内存中它是以字节数组的形式存在的。我们知道 C 语言里面的字符串标准形式是以 NULL 作为结束符,但是在 Redis 里面字符串不是这么表示的。因为要获取 NULL 结尾的字符串的长度使用的是 strlen 标准库函数,这个函数的算法复杂度是 O(n),它需要对字节数组进行遍历扫描,作为单线程的 Redis...

问题: Java客户端中的一个Connection是不是在MySQL中就对应一个线程来处理这个链接呢?答案:不是。凡是从线程思考问题的人,一般都是被Java技术的多线程思想所禁锢了,其实在高性能服务器端端开发底层往往靠io复用来处理,这种模式就是:单线程+事件处理机制。在MySQL里面往往有一个主线程,这是单线程(与Java中处处强调多线程的思想有点不...

问题:数据库插入百万级数据的时候,还没操作完,但是把服务器重启了,数据库会继续执行吗? 还是直接回滚了?答案:不会自动继续执行,不会自动直接回滚,但是可以人工手动选择继续执行或者直接回滚,依据是事务日志。事务开启时,事务中的操作,都会先写入存储引擎的日志缓冲中,在事务提交之前,这些缓冲的日志都需要提前刷新到磁盘上持久化,这就是人们口中常说的“日志先行”...

Redis 有 5 种基础数据结构,分别为:string (字符串)、list (列表)、set (集合)、hash (哈希) 和 zset (有序集合)。熟练掌握这 5 种基本数据结构的使用是 Redis 知识最基础也最重要的部分,它也是在 Redis 面试题中问到最多的内容。本节将带领 Redis 初学者快速通关这 5 种基本数据结构。考虑到 Re...

问题:在开发过程中,经常遇到插入重复的现象,这种情况该如何解决呢?答案:插入的过程一般都是分两步的:先判断是否存在记录,没有存在则插入否则不插入。如果存在并发操作,那么同时进行了第一步,然后大家都发现没有记录,然后都插入了数据从而造成数据的重复。解决插入重复的思路可以是这样的:(1)判断数据库是否有数据,有的话则无所作为。没有数据的话,则进行下面第2步...

Redis 是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务」。Redis 以其超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。国内外很多大型互联网公司都在使用 Redis,比如 Twitter、YouPorn、暴雪娱乐、Githu...

题目:我们知道,数据库的访问底层是通过tcp实现的,如果数据库链接中断,那么应用程序是不知道的,是探测不出的,那么程序会卡住,一直在等待,会等待吓人的几十分钟,这种情况会把人郁闷死,真不如及时来个弹框,告诉用户系统暂时无法使用,让用户离开呢。所以,面对数据库连接中断的异常,该怎么设置mybatis呢?答案:要想吃透这个问题,要明白链接中断产生的原因。这...

注:本文修订于2019年10月1日经常碰到这样的面试题目:#{}和${}的区别是什么?正确的答案是:#{}是预编译处理,${}是字符串替换。备注:${}是插值,插值的新认识见:http://www.mybatis.cn/archives/653.html(1)mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatem...

地上一堆苹果,一堆香蕉,怎么把他们隔开呢?有多种方法。例如,可以按“堆”来隔开,这边放一堆苹果,那边放一堆香蕉。还有一种方式是:先放一个苹果,然后放一根香蕉,然后再放一个苹果,然后再放一根香蕉……。还有人可能会这样摆:先放两个苹果,然后放一根香蕉,然后再放两个苹果,然后再放一根香蕉……。如上所述,这就是不同的隔离程度。对于事务隔离而言,道理一样。因为事...

讲完select,接下来说一下updata。闲言少叙,直接上正文。(1)如果数据库的隔离级别是读已提交(Read Committed),这是很多数据库默认的隔离级别。在这种情况下:如果事务要更新一条记录,而这条记录恰好被另一个运行中但未提交事务更改(被锁定或删除),则当前事务会阻塞,等待直到另一个事务提交或回滚后,再继续处理(First Updater...

select语法非常简单,相信接触sql的人没有不知道的吧。但是,将select放在事务中,它的处理规则恐怕很多人都不能完全说清楚吧。本文就给大家说一下在事务处理中使用select应该注意的地方。(1)如果数据库的隔离级别是读已提交(Read Committed),这是很多数据库默认的隔离级别。在这种情况下:1.1 对于当前事务的更改,即便是未提交的,...

1、公开课的历史渊源每年站长都会开一次公开课,公开课的内容来源于【上一年下半年,当年上半年】这一年来的最大研究成果。2、2018年公开课的主要内容线程与并发杂谈3、2018年公开课的形式本次公开课以组群,现场通过语音软件来直播。