千家信息网

怎么利用反射生成MyBatisPlus中QueryWrapper动态条件

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍了怎么利用反射生成MyBatisPlus中QueryWrapper动态条件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么利用反射生成MyBatisPl
千家信息网最后更新 2025年01月19日怎么利用反射生成MyBatisPlus中QueryWrapper动态条件

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

1.问题

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

QueryWrapper queryWrapper = new QueryWrapper<>();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.优化方案

public class APP{    public static void main(String[] args) throws Exception {        QueryWrapper queryWrapper = new QueryWrapper<>();        Dept dept = Dept.builder()                .deptno(1234)//                .dname("sales")                .loc("NEWYORK")                .build();        Method[] methods = Dept.class.getDeclaredMethods();        for (Method method : methods) {            String methodName = method.getName();            if (methodName.contains("get")) {                Object res = method.invoke(dept, null);                if(res != null){                    String columnName = getColumnName(methodName);                    queryWrapper.eq(columnName,res);                }            }        }        System.out.println(queryWrapper);//在此处设置断点,可以查看保存到QueryWrapper中的值    }    // 根据getter方法名得到对应表的字段名    public static String getColumnName(String name) {        StringBuffer sb = new StringBuffer();        name = name.substring(3, name.length()); //去掉get前缀        char[] chars = name.toCharArray();        for (int i = 0; i < chars.length; i++) {            char item = chars[i];            if (item > 65 && item < 90) {//大写字母                sb.append("_");                sb.append((char)(item+32));            }else {                sb.append(item);            }        }        return sb.deleteCharAt(0).toString();    }}

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

0