mybatisplus的wrapper使用,mybatis property属性
00-1010 EntityWrapper的常用方法意外遇到entity wrapper的Pit原因解决方案
目录
#其中(issue_type=?)和(状态=?还是状态=?还是状态=?)entity wrapper wrapper=new entity wrapper();Wrapper.eq(issue_type , defect )。andNew()。eq(状态,提交)。或者()。eq(状态,激活)。或者()。eq(状态,解决);
00-1010公司的项目框架是SpringBoot为主题,集成了MyBatisPlus的数据库框架。当Service进行简单的单表查询时,直接使用EntityWrapper的包装类进行查询比较方便。
但是在昨天的工作过程中,发现一个查询方法来回出错,查询条件与预期不符。最后发现是在wrapper中使用addFilterIfNeed时不小心造成的大洞!
Service层查询语句:
EntityWrapperPayTiXianApplyEntity ew=new EntityWrapperPayTiXianApplyEntity();ew . eq(util . not empty(params . getstate()), state ,params . getstate())//state not empty,查询。like (util .不为空(params.gettxname()), txname 根据状态,params.getTxname())。eq(util . isnotempty(params.getTxmode()), Txmode ,params . gett xmode())。像(util . isnotempty(params.getTxserial()), Txserial ,params . gett xserial())。addFilterIfNeed(util . isnotempty(tx time), DATE_FORMAT(TXTIME,% y-%m-%d)= txtime )。addfilterfeed(util . isempty(params . getstate()), state=1或state=3或state=4)//state为空。查询状态为1或2的记录,即出纳审核的记录。PagePayTiXianApplyEntity page=this . select page(new QueryPayTiXianApplyEntity(params))。getPage()、ew);由于需要,不同的参数需要使用不同的查询条件。当状态为空时,应查询表中状态符合要求的所有记录;如果state不为空,则根据state=参数进行查询。
为了省事,直接用包装器。事实上,在MaBatis中也可以使用条件判断语句。
00-1010原因在于使用wrapper的addFilterIfNeed省事。
出错的是这条语句:
.addfilteriffeed(util . isempty(params . getstate()), state=1或state=3或state=4 )一开始是新创建的新EntityWrapper的匿名对象,所以即使debug也找不到任何错误。为了看清楚SQL,我新建了一个对象ew,调试时仔细看了一下它的SQL属性,终于找到了,正在执行。
也就是说,当我的状态为null时,这个查询的语句是:(不能写完整的语句,部分参数直接用# {})代替)。
SELECT * FROM table name其中tx name like # {tx name}和tx mode=# {tx mode}和tx serial=# {tx serial}和date _ format (tx time, % y-%m-%d)=# {tx time}和state=1或state=3或state=4按tx时间排序;发现问题了吧!
因为addFilterIfNeed只是一个简单的语句拼接,即使我把这句话写在一起,我还是按原样加进去,导致查询逻辑的错误,进而导致查询条件失效!
00-1010解决方法很简单,只需在语句中添加括号即可。
.addfilterfeed(util . isempty(params . getstate()),(state=1或state=3或state=4))总结:至此,这次遇到的大坑已经完全解决,所以我理解了EntityWrapper中addfilterfeed的实现。在发现这个问题之前,我来回改了很多次,直到找到才解决。
以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。