MyBatis-Plus使用表的两字段作为查询条件
1. 场景
在业务开发使用MyBatis-Plus作为ORM框架,业务场景是:查询可用的套餐包,其中有两个字段:套餐包面值(value)和已使用值(used),那么在查询时就需要加上判断条件 value < used 方能查出可用数据集合。在SQL中很简单,但是在MyBatis-Plus中那么该如何实现呢?
2. 领域模型
2.1 表结构
CREATE TABLE `tbl_test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `value` decimal(12,2) unsigned NOT NULL DEFAULT 0.00 COMMENT 数值, `used` decimal(12,2) unsigned NOT NULL DEFAULT 0.00 COMMENT 被使用, `status` tinyint(4) unsigned NOT NULL DEFAULT 1 COMMENT 状态:0过期,1正常, `expire` int(11) unsigned NOT NULL DEFAULT 0 COMMENT 到期时间, `createtime` int(11) unsigned NOT NULL DEFAULT 0 COMMENT 创建时间, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT=测试表;
2.2 表数据
2.3 要查询的数据集
3. 实现
翻阅官方文档的API寻找解决方案, 看到了apply("sql_xxx")这可以写SQL,其中sql_xxx替换成你要加的两字段判断条件即可,如此即可满足我的查询要求。
List<TblTest> tblTestList = tblTestService.list(new LambdaQueryWrapper<TblTest>()
.eq(TblTest::getStatus, 1)
.apply("`used` < `value`") // 只需要加上这个条件即可
.orderByDesc(TblTest::getId)
);
