当前位置: 首页 > news >正文

MYBATIS-PLUS入门使用、踩坑记录

转载:

mybatis-plus入门使用、踩坑记录 - 灰信网(软件开发博客聚合)

首先引入MYBATIS-PLUS依赖:

SPRING BOOT项目:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version>
</dependency>

SPRING MVC项目:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.2.0</version>
</dependency>

配置:

SPRING BOOT 工程:

@MapperScan("com.xxx.mapper")

SPRING MVC 工程:

  • 配置 MapperScan
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.baomidou.mybatisplus.samples.quickstart.mapper"/>
</bean>
  • 调整 SqlSessionFactory 为 MyBatis-Plus 的 SqlSessionFactory
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/>
</bean>

 引入:EXTENDS BASEMAPPER<T>

 还有扩展的server方法及实现,可以自己点进去看下

需要用到就对应service继承即可,示例:

public interface UserService extends BaseService<User> {
}
public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implements UserService {
}

坑一:出现 INVALID BOUND STATEMENT (NOT FOUND) 异常

  • 未去除原有mybatis-spring-boot-starter依赖,导致冲突
  • mapper文件夹未扫描到,加入@MapperScan

坑二:CAUSED BY: JAVA.SQL.SQLINTEGRITYCONSTRAINTVIOLATIONEXCEPTION: COLUMN 'XXX' CANNOT BE NULL

这个问题很明显是字段不能是空,必须使用selective方法进行插入。一开始怀疑mybatis-plus的插入语句(就只一个insert)是全量插入

后来查找mapper文件找到了问题所在。之前用的mybatis框架自动生成的mapper.xml代码中的insert语句为全量插入,本地写了同名的xml会优先使用本地的SQL进行查询。

解决:删除所有mybatis生成的SQL语句,避免与mybatis-plus的底层SQL冲突

坑三:主键随机自增,导致ID超范围问题 COULD NOT SET PROPERTY 'ID' OF 'CLASS COM.XXX.USER' WITH VALUE '1037678924715731598' CAUSE: JAVA.LANG.ILLEGALARGUMENTEXCEPTION: ARGUMENT TYPE MISMATCH

如果没有指定ID生成策略,mybatis-plus默认是使用自己随机的ID生成策略,会生成一个比较大的数,可能会大小溢出。

解决:在实体类ID字段上加上注解 @TableId(type = IdType.AUTO),使用数据库的自增策略。如果自增主键很多都是id,可以写一个基础的BasePO,在这个类里面指定id的生成策略,其它表对应实体类继承即可,如下:

public class BasePO {@TableId(type= IdType.AUTO)private Long id;
}

  

下面是IdType其它类型介绍

坑四:关键字冲突问题 CAUSE: JAVA.SQL.SQLSYNTAXERROREXCEPTION: YOU HAVE AN ERROR IN YOUR SQL SYNTAX; CHECK THE MANUAL THAT CORRESPONDS TO YOUR MYSQL SERVER VERSION FOR THE RIGHT SYNTAX TO USE NEAR 'ORDER WHERE ID=1

当你的数据库表名是order、group等之类的关键字时,对该表的操作则会报错.

解决:在表对应的实体上增加注解 @TableName("`order`"),使用``指定表名即可

http://www.lryc.cn/news/170054.html

相关文章:

  • C# 静态类和sealed类(密封类)的区别
  • el-table如何实现自动缩放,提示隐藏内容
  • CRM客户管理软件对出海企业的帮助与好处
  • 【QT--使用百度地图API显示地图并绘制路线】
  • C数据结构二.练习题
  • 猫头虎博主第5️⃣期赠书活动:《Java官方编程手册(第12版·Java 17)套装上下册》
  • (1)数据库 MSQ 数据库 安装 使用 以及增删改查
  • 什么测试自动化测试?
  • 【踩坑篇】代码中使用 Long 作为 Map的Key存在的问题
  • 微服务保护-授权规则/规则持久化
  • 练习敲代码速度
  • uni-app:实现条件判断展示图片(函数判定+三目运算)
  • http概念
  • Postman应用——Variable变量使用(Global、Environment和Collection)
  • php高级 TP+Redis实现发布订阅和消息推送案例实战
  • Python 基础入门
  • 【跟小嘉学 Rust 编程】二十九、Rust 中的零拷贝序列化解决方案(rkyv)
  • 路由器端口转发
  • Redis模块一:缓存简介
  • 【去除若依首页】有些小项目不需要首页,去除方法
  • Ardupilot — EKF3使用光流室内定位代码梳理
  • 【Linux】自动化构建工具 —— make/makefileLinux第一个小程序 - 进度条
  • tensorflow的unet模型
  • (2023 最新版)IntelliJ IDEA 下载安装及配置教程
  • react 实现拖动元素
  • 【EI会议】第二届声学,流体力学与工程国际学术会议(AFME 2023)
  • Android StringFog 字符串自动加密
  • 上四休三,未来的期许
  • 怎么防止360安全卫士修改默认浏览器?
  • 调整参数提高mysql读写速度