备注:本文修订于2020年7月1日1、字符编码utf8和utf8mb4的历史渊源UTF-8 编码是一种变长的编码机制,可以用 1 ~ 4 个字节存储字符。但是,因为历史遗留问题,MySQL 中的 utf8 编码并不是真正的 UTF-8,而是阉割版的,最长只有3个字节。当遇到占4个字节的 UTF-8 编码,例如 emoji 字符或者复杂的汉字,会导致存储...

各位读者,告诉大家一个好消息:最新版本 MyBatis 3.5.4 发布了!发布时间是:2020 年 3 月 9 日。2020年是一个多灾多难的年份,是一个让人落泪和悲伤的年份,也是一个充满英雄和大爱的年份。无数的家庭因为新型冠状病毒的爆发而家破人亡,无数的社群因为新型冠状病毒的爆发而人心惶惶。有着伟大的武汉人民,有着伟大的中央政府,有着伟大的中国共产...

上篇文章主要讲述了 mybatis 开启日志功能,这篇文章对日志进行一下深入的讨论吧。虽然与上篇文章相比,本文有点偏离mybatis主线,但却是对日志进行了深入的分析。本文主要讲述了两个事物的区别:日志内容和日志的区别。1、日志内容和日志的区别什么是日志内容呢?就是我们上文提到的 sql 语句。准确的说,日志内容就是string类型的信息片段。什么是日...

Java 是一门学问,多线程也是一门学问,“ Java + 多线程 ” 是一门新的学问吗?在我看来,不是的。 “ Java + 多线程 ” 的本质还是多线程。网站的心细读者应该发现,2019年底站长开辟了一个新的栏目:《一针见血 ThreadLocal 》,这预示着 MyBatis 中文官网 向 Java 多线程 领域迈入了新的一步。不鸣则已一鸣惊人,...

备注:本文修订于2022年11月29日使用 mybatis 的时候,如果无法查看 sql 语句,这会非常不方便,因为出现错误无法调试程序。开启 mybatis 日志功能,在控制台打印 sql 显得十分必要。mybatis 内置了日志工厂类,内置的日志工厂将日志输出交给以下其中一种工具作代理:SLF4JApache Commons LoggingLog4...

MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如,拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。在 MyBatis 之前的版本中,有很多动态 SQL 元素需要花时间了解。MyB...

本文更新日期:2020年6月10日我们mybatis中文官网,分享了大量高质量的mybatis内容,有部分内容属于独家解析,全网首创,例如:一针见血MyBatis插件机制,MyBatis学习建议,MyBatis各种面试题等等。由于在mybatis领域的良好口碑,吸引了大量的读者,更有热心读者分享了一些视频资源。本视频包括三个套餐,如下所示。由于不可抗拒...

在mybatis框架中,JavaType和ofType都是用来指定对象类型的。JavaType和ofType的区别在于:JavaType用来指定POJO中属性的类型,而ofType指定的是映射到List集合中POJO的类型。如下面代码所示:mybatis POJO类:public class User { private int id; ...

一个博客(Blog)只有一个作者(Author),但一个博客有很多文章(Post)。 在博客类中,这可以用下面的写法来表示:private List<Post> posts;映射结果集合到一个 List 中,可以使用集合元素<collection>。和关联映射一样,我们可以使用嵌套 Select 查询,或基于连接的嵌套结果映射集...

关于mybatis的关联映射,之前写过一个系列:《mybatis关联映射》,本文希望从一个新的角度来阐述一下关联。mybatis关联映射简介关联(association)元素处理"有一个类型"的关系。 比如,一个博客有一个用户。关联结果映射和其它类型的映射工作方式差不多。关联的不同之处是,你需要告诉 MyBatis 如何加载关联。MyBatis有两种不...

本文更新于:2020年2月5日。声明:关于 ThreadLocal 的内容介绍,现已汇总成一个系列,读完下面内容可以移步到这个网站:http://www.threadlocal.cn/1、ThreadLocal原理介绍ThreadLocal的原理是什么呢?我相信肯定有些人会语塞,无从说起。即便心里有种朦胧的感觉,但是也说不清楚。在《操作系统》课上我们学...

本文更新于:2020年2月5日。声明:关于 ThreadLocal 的内容介绍,现已汇总成一个系列,读完下面内容可以移步到这个网站:http://www.threadlocal.cn/前言:最近发了一篇文章,关于threadlocal内存泄漏的,收藏量挺大的,不过我个人感觉还有些地方可以阐述地更一针见血,所以又重新修订了一版,欢迎大家收藏。 本文...

SSM风靡当前的Java世界,面试官不经意间就会甩出一道必杀题:请你说一下mybatis的工作原理。虽然大家每天都在使用mybatis做增删改查的工作,但是面对这个问题往往也得需要好好的准备一下,才能应对自如。看了很多网上的总结,都是只见树木不见森林,可见这些人的水平和见识尚浅,道行和修为还有待提升。MyBatis的基本工作原理就是:先封装SQL,接着...

在Java中,类的全限定名往往会很繁琐,在mybatis使用这些类型的时候,需要配置很复杂的属性,例如:<select id="getUser" parameterType="int" resultType="cn.mybatis.mydemo.domain.User"> ...

在使用mybatis过程中经常用到类型别名,除了mybatis自带了很多类型别名和java中的类型的映射,我们自己还可以新建别名外,下面先看一个自建别名的配置信息:<typeAliases> <typeAlias type="cn.mybatis.entity.User" alias="User...

Mybatis中的别名的起源我们对别名的认识最初是在数据库中,例如,select时取别名的做法是这样的:select 列名 as 列别名, //取别名方法1 列名 列别名, //取别名方法2 from 表名;上面这两种取别名方法是所有数据库通用的。在 SQL 语句中,可以为表名称及字段(列)名称指定别名(Alias),别名是 SQL 标准语法,...

前言曾经读到一篇文章,有句话印象十分的深刻:没有一个内容作者,是可以凭空冒出的,你看见的所有看似普通的文字,背后往往都需要多年的积累才能酝酿。的确如此,看似小小的threadlocal,往往随着年龄和阅历的增长,体会到的内涵是不一样的。因为背后是时间的沉淀和苦灯冷月的思考。第一部分:首先说一下我学习threadlocal的经历。刚开始,我也不是一下子就...

为了方便开发,mybatis内置了常用的Java类型的别名,这样,我们开发时写查询结果返回的参数的resultType时就可以使用内置的别名。例如:如果要返回Map类型的结果,就不需要写java.util.Map,而只需要写map即可。常见的内置别名如下所示:除了内置的类型别名,我们可以自定义类型别名,通常有三种方式,如下所示:

在简单的场景下,MyBatis 可以为我们自动映射查询结果。但如果遇到复杂的场景,我们需要构建一个结果映射。实际上,我们可以混合使用这两种策略,让我们深入了解一下自动映射是怎样工作的。当自动映射查询结果时,MyBatis 会获取结果中返回的列名并在 Java 类中查找相同名字的属性(忽略大小写)。 这意味着如果发现了 ID 列和 id 属性,MyBat...