欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何利用反射生成 MyBatisPlus中QueryWrapper动态条件

程序员文章站 2023-01-28 12:54:19
目录1.问题2.优化方案1.问题在mybatisplus中经常会用到如下所示的代码来构造查询条件:querywrapper querywrapper = new querywr...

1.问题

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

querywrapper<user> 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.getbirth1() != null) {
    querywrapper.ge("birth", userquery.getbirth1());
}
if (userquery.getbirth2() != null) {
    querywrapper.le("birth", userquery.getbirth2());
}
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<dept> 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动态条件内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!