微信搜索BGM7756,免费获取文末MySQL资料福利!
最近在业务中遇到一个问题,业务是这样的:在插入新用户时需要校验用户的某些信息是否唯一,而在程序中校验结果永远是不唯一的。然后我把 MyBatis 打印的执行 SQL 语句拿了出来在数据库中执行,发现没有数据。
然后我就奇怪了,数据库是同一个啊、SQL 是同一个啊、查询结果都没有变啊,为什么执行的结果在程序里面是 1,而在数据库中是0。
难道是因为 MyBatis 和数据库执行的结果不一样?
后来我才明白不一致的原因。
我编写了一个与实际业务类似的代码,用来模拟上述的问题。
- 复现问题
2.1. 表结构
MySQL 数据库中创建了一张用户表,只有4个字段。
CREATE TABLE `user` (
`user_id` varchar(36) NOT NULL COMMENT '用户主键id',
`user_name` varchar(55) NULL DEFAULT NULL COMMENT '账号',
`password` varchar(55) NULL DEFAULT NULL COMMENT '密码',
`email` varchar(55) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`user_id`) USING BTREE
);
//+V:BGM7756,免费领取资料
2.2. 项目依赖
示例项目是一个 SpringBoot 工程,pom 文件中除了 web 一来还有 mysql 的驱动、MyBatis 和 lombok。
//+V:BGM7756,免费领取资料
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId