这篇文章主要介绍了怎么利用反射生成MyBatisPlus中QueryWrapper动态条件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么利用反射生成MyBatisPlus中QueryWrapper动态条件文章都会有所收获,下面我们一起来看看吧。

1.问题

在MyBatisPlus中经常会用到如下所示的代码来构造查询条件:

QueryWrapper<User>queryWrapper=newQueryWrapper<>();if(userQuery.getId()!=null){queryWrapper.eq("id",userQuery.getId());}if(userQuery.getName()!=null){queryWrapper.like("name",userQuery.getName());}if(userQuery.getNickname()!=null){queryWrapper.like("nickname",userQuery.getNickname());}if(userQuery.getAccount()!=null){queryWrapper.eq("account",userQuery.getAccount());}if(userQuery.getGender()!=null){queryWrapper.eq("gender",userQuery.getGender());}if(userQuery.getBirth2()!=null){queryWrapper.ge("birth",userQuery.getBirth2());}if(userQuery.getBirth3()!=null){queryWrapper.le("birth",userQuery.getBirth3());}if(userQuery.getTel()!=null){queryWrapper.eq("tel",userQuery.getTel());}if(userQuery.getEmail()!=null){queryWrapper.eq("email",userQuery.getEmail());}if(userQuery.getQq()!=null){queryWrapper.eq("qq",userQuery.getQq());}if(userQuery.getWechat()!=null){queryWrapper.eq("wechat",userQuery.getWechat());}if(userQuery.getHomePage()!=null){queryWrapper.eq("home_page",userQuery.getHomePage());}//.........baseMapper.selectPage(page,queryWrapper);

大量这样的代码,可以通过如下所示的反射技术生成,从而一劳永安逸,

2.优化方案

publicclassAPP{publicstaticvoidmain(String[]args)throwsException{QueryWrapper<Dept>queryWrapper=newQueryWrapper<>();Deptdept=Dept.builder().deptno(1234)//.dname("sales").loc("NEWYORK").build();Method[]methods=Dept.class.getDeclaredMethods();for(Methodmethod:methods){StringmethodName=method.getName();if(methodName.contains("get")){Objectres=method.invoke(dept,null);if(res!=null){StringcolumnName=getColumnName(methodName);queryWrapper.eq(columnName,res);}}}System.out.println(queryWrapper);//在此处设置断点,可以查看保存到QueryWrapper中的值}//根据getter方法名得到对应表的字段名publicstaticStringgetColumnName(Stringname){StringBuffersb=newStringBuffer();name=name.substring(3,name.length());//去掉get前缀char[]chars=name.toCharArray();for(inti=0;i<chars.length;i++){charitem=chars[i];if(item>65&&item<90){//大写字母sb.append("_");sb.append((char)(item+32));}else{sb.append(item);}}returnsb.deleteCharAt(0).toString();}}

关于“怎么利用反射生成MyBatisPlus中QueryWrapper动态条件”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么利用反射生成MyBatisPlus中QueryWrapper动态条件”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。