MP学习记录
- Mybatis和MybatisPlus依赖共存问题
当同时导入Mybatis和MybatisPlus的依赖时就会出现以下问题
问题原因:在使用MybatisPlus时不应引用MyBatis依赖,同时引用可能会导致重复的SqlSessionFactory等核心类冲突。
解决方法:mybatis-plus-boot-starter内置Matis核心依赖,所以只保留MybatisPlus的依赖即可。
- 未知列名异常
问题原因:在对数据库进行增删改查时,MP默认会将对应实体类所有字段作为数据库表的列名的查询字段,而有时实体类的字段是为了存储其他表数据,因此会查询不到这些字段。
解决方法:对实体类中不是本表的字段加上@TableField(exist = false)注解。
- 新增数据时出现id值超出范围的异常
问题原因:使用MP时,如果没有在实体类的id指定type,会默认使用雪花算法生成id,在生成十进制id的情况下,id的长度为18-19位,如果数据库表的id范围较小,就会出现该错误。
解决方法:在实体类上添加@TableId注解,并指定type类型位AUTO,令id自增长。
如果打算使用雪花算法生成id,可以修改数据库表的id字段长度限制。
- 时间无法转换错误
问题原因:错误表明 JSON 反序列化失败,因为字符串 "2025-02-01 16:35:33" 无法直接转换为 LocalDateTime 类型。
根本原因是日期时间格式不匹配:
- 默认要求格式:LocalDateTime的JSON反序列化默认需要ISO-8601格式(如 2025-02-01T16:35:33),其中日期和时间之间用T分隔。
- 实际传递格式:2025-02-01 16:35:33(日期和时间用空格分隔),所以导致解析失败。
解决方法:在实体类对应的时间字段上添加@JsonFormat注解,并指定格式为与传递的时间相对应的格式“yyyy-MM-dd HH:mm:ss”。
- 分页查询分页参数无效
问题原因:在使用MP的分页功能时需要对分页插件进行注册。
解决方法:定义配置类,注册分页插件。