MyBatis-plus数据库字段排序不准确的解决
目录
- MyBatis-plus数据库字段排序不准确
- 例如:12还没有8,4,2大,这就很郁闷了
- 解决方案
- Mybatis-plus遇到的坑
- 1. 数据库映射枚举
- 2. 自增主键
- 3. mybatis嵌套查询
- 4. 用updateWrapper的update做更新操作
- 5. 使用lambaQuery时
- 6. Integer判断为空
- 7. 基础类型的判断
- 8. 事务
- 9. mybatis 配置了多个数据库
MyBatis-plus数据库字段排序不准确
今天用mybatis-plus进行开发的时候遇到一个问题,就是用mysql自带的排序进行数据排序的时候,发现排序的数据不准确。
例如:12还没有8,4,2大,这就很郁闷了
后来在网上查了一下,原来是自己给自己挖的坑,数据库排序字段用的是varcher类型,而排序函数针对的是number类型。
解决方案
对于mysql和oracle都实用
- order by 字段+0
- order by 字段*1
因为用的是mybatis-plus,不想写sql怎么办呢?那就用自带的排序函数喽。排序字段直接"+1"就Ok了
//倒叙 queryWrapper.orderByDesc("visit_num+1");
Mybatis-plus遇到的坑
1. 数据库映射枚举
不能是tinyint(1),tinyint(1)默认是boolean类型
2. 自增主键
数据库设置了自增主键后,po类需要增加@TableId(type = IdType.AUTO),或者不要id字段才能生效。
否则会自动分配id,如下图:
3. mybatis嵌套查询
子查询中需要查出唯一标识
4. 用updateWrapper的update做更新操作
更新时间没有更新问题
数据库updateTime设置了 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,仍然不会自动更新时间,需要手动设置当前时间,或者用updateById方法
5. 使用lambaQuery时
参数为空会带入到SQL中(branch_code = null),需要手动过滤,或者在eq中增加条件
6. Integer判断为空
7. 基础类型的判断
customerIssueFlag定义的是String类型,值是Y or N
8. 事务
9. mybatis 配置了多个数据库
除了主数据源对应的mapper.java,都不能加 @Mapper 注解,否则会报找不到
由于使用了mybatis-plus的包,默认自动全包扫描@Mapper注解。mybatis扫描生成的Mapper比其他自定义配置的bean生成对应的Mapper对象块,而自定义的mybatis@MapperScan后扫描,Dao Bean已经生成了,无法再指定数据源进行注入了。
所以如果在 @Configrution注解类中指定了扫描类,就不用再加 @Mapper注解了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。