MybatisPlus之likeRight
在使用Mybatis-plus的时候,使用like方法发现匹配的方法和自己想的相反,特此记录下:使用场景:我想要查询分类的某一层级下的订单,如下图,我想查询所有“男装”订单那么,如果是写SQL查询就是这样select xx,xx from order_info where category_id like '10,20%';可是,项目如果使用的是Mybatis-plus,那么我们该怎么写呢?最开始
·
在使用Mybatis-plus的时候,使用like方法发现匹配的方法和自己想的相反,特此记录下:
使用场景:
我想要查询分类的某一层级下的订单,如下图,我想查询所有“男装”订单
那么,如果是写SQL查询就是这样
select xx,xx from order_info where category_id like '10,20%';
可是,项目如果使用的是Mybatis-plus,那么我们该怎么写呢?
最开始我想的是,likeLeft就是左匹配嘛,就按照下面这么写:
this.list(Wrappers.<OrderInfo>lambdaQuery().likeLeft(OrderInfo::getCategoryId,orderQueryReq.getCategoryId()).eq(OrderInfo::getStatus,99));
哦豁,没查到数据。然后就换成likeRight之后,bingo 数据出来了:
然后,我就默默的去看了下源码(从上到下,层层递进,直到最后我们找到了转换SQL的地方,对!就是那个SqlUtils):
default Children likeRight(R column, Object val) {
return this.likeRight(true, column, val);
}
Children likeRight(boolean condition, R column, Object val);
public Children likeRight(boolean condition, R column, Object val) {
this.getWrapper().likeRight(condition, column, val);
return this.typedThis;
}
public Children likeRight(boolean condition, R column, Object val) {
return this.likeValue(condition, column, val, SqlLike.RIGHT);
}
protected Children likeValue(boolean condition, R column, Object val, SqlLike sqlLike) {
return this.doIt(condition, () -> {
return this.columnToString(column);
}, SqlKeyword.LIKE, () -> {
return this.formatSql("{0}", SqlUtils.concatLike(val, sqlLike));
});
}
public static String concatLike(Object str, SqlLike type) {
switch (type) {
case LEFT:
return "%" + str;
case RIGHT:
return str + "%";
default:
return "%" + str + "%";
}
}
原来,它的likeLeft就是‘%’这个玩意儿加在左侧,likeRight就是加在右侧,默认就是两边都加,也就是like!!!
更多推荐
已为社区贡献2条内容
所有评论(0)