mybatis likeright,mybatisplus like

  mybatis likeright,mybatisplus like

  00-1010关于likeRight的用法:使用likeright和LikeRight方法查询信息的踩坑案例

  00-1010在使用Mybatis-plus时,我发现使用like方法的匹配方法与我想象的相反。我特此记录:

  使用场景:

  我想查询某一级分类下的订单,如下图。我想查询所有“男装”订单。

  因此,如果您正在编写SQL查询,情况就是这样。

  select xx,xx from order _ info where category _ id like 10,20% ;但是,如果项目用的是Mybatis-plus,应该怎么写呢?

  起初,我想,likeLeft是左匹配。就这么写吧:

  this.list(包装。OrderInfolambdaQuery()。like left(orderinfo : getcategoryid,orderQueryReq.getCategoryId())。eq(orderinfo :3360 get status,99));哦,没有数据。然后改成likeRight之后,bingo数据出来了:

  然后,我就默默的去看源代码(从上到下,一层一层,直到最后我们找到了转换SQL的地方,对!这就是SqlUtils):

  默认子likeRight(R column,Object val){ return this . like right(true,column,val);} Children likeRight(布尔条件,R列,对象值);public Children likeRight(布尔条件,R列,对象值){ this.getWrapper()。likeRight(条件、列、值);返回this.typedThis} public Children likeRight(布尔条件,R列,对象val) { return this.likeValue(条件,列,val,SqlLike。对);} protected Children like value(boolean condition,R column,Object val,SqlLike SqlLike){ return this . doit(condition,()-{ return this . column tostring(column));},SqlKeyword。LIKE,()- { return this.formatSql({0} ,SqlUtils.concatLike(val,SQL LIKE));});} public static String concat like(Object str,SQL like type){ switch(type){ case left : return % str;case RIGHT:返回字符串“%”;default:返回“%”字符串“%”;}}原来它的likeLeft是“%”加在左边,likeRight加在右边。默认是两边加,就是喜欢!

  00-1010先总结一下。like和likeRight的区别在于

  Like:在查询中填充的参数的两端添加通配符,左右两端将匹配likeRight:只在填充的参数的右端添加通配符进行匹配。所以在使用的时候,要明确自己的需求。盲目使用like查询会造成隐患。

  00-1010想提取第7位和第8位为03的一串数据。

  例子

  202201010120220102032022010302202202010220220202042022020301

  应该是第三第六。

  那么我的观点是

  Like (number , _ _ _ _ _ 03 % )//下划线_代表占位符,表示这个位置的数字是任意的,但是占位符表示只能有一个字符,表示前六位是任意的。但是第7位和第8位必须是03。

  但是结果是第二个,第三个,第六个,导致我直接把所有的操作都搞混了,把数据完全改了。

  终于知道原因了。原来mybatisplus的like方法在执行sql的时候会在参数前后加上%,导致我的六条下划线失效,所以数据比较混乱。

  然后换了likeRight,结果出了问题。找bug的时候从前端找到后端,从页面找到请求,然后检查有没有写错。最后发现数据库有错误,费了很大力气,太难了。

  以后用like查询,要正确使用。对mybatisplus还是没有系统的学习,基础也不好。

  以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: