Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >传入对象进行多条件查询——by QueryWrapper && 反射

传入对象进行多条件查询——by QueryWrapper && 反射

原创
作者头像
凡尘扰凡心
发布于 2024-08-26 08:33:21
发布于 2024-08-26 08:33:21
1430
举报
文章被收录于专栏:默认分类默认分类
代码语言:txt
AI代码解释
复制
@Data
public class SearchServerDto implements Serializable {

    private Long serverid;

    private String host;

    private String nickname;

    private Date createtime;
}

若前端传入该对象,想通过该对象进行搜索按条件搜索

如果采用传统的方法,进行每一个属性都进行判断则需要很多的if else if

但如果采用反射和注解的思想将减少繁琐的步骤,且具有通用性

分析:

作者使用的是Mybatis-X生成的实体类

有注解@TableId、@TableField,故新添了一个注解来做分辨

代码语言:txt
AI代码解释
复制
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldAnnoation {
    String Annoationtype() default "TableField";
}

可以使用反射,动态的将SearchServerDto注入到QueryWrapper 中

代码语言:txt
AI代码解释
复制




  QueryWrapper<UserServer> queryWrapper = new QueryWrapper<>();
        UserServer userServer = new UserServer();
        List<UserServer> list;
        if (ObjectUtils.isEmpty(searchServerDto)){
             list = userServerService.list();


        }else{
            Class<? extends SearchServerDto> searchServerDtoClass = searchServerDto.getClass();
            Class<? extends UserServer> userServerClass = userServer.getClass();
            
            Field[] fields = userServerClass.getDeclaredFields();//获取实体类字节码对象的private属性
            for (Field f:fields
                 ) {
                FieldAnnoation fieldAnnoation = f.getAnnotation(FieldAnnoation.class);//获取属性上的自定义注解
                if (!ObjectUtils.isEmpty(fieldAnnoation)){
                    String annoationtype = fieldAnnoation.Annoationtype();
                    if (annoationtype.equals("TableField")){//判断该注解的类型
                        TableField tableField = f.getAnnotation(TableField.class);//获取TableField注解上的数据库表的名称
                        Field declaredField = searchServerDtoClass.getDeclaredField(f.getName());//获取searchServerDto的属性
                        declaredField.setAccessible(true);//设置可访问该属性
                        Object o = declaredField.get(searchServerDto);//获取searchServerDto对象的属性值
                        if (!ObjectUtils.isEmpty(o)){
                            queryWrapper.eq(tableField.value(),o);
                        }
                    }else{
                        TableId tableId = f.getAnnotation(TableId.class);
                        Field field = searchServerDtoClass.getDeclaredField(f.getName());
                        field.setAccessible(true);
                        Object o = field.get(searchServerDto);
                        if (!ObjectUtils.isEmpty(o)){
                            queryWrapper.eq(tableId.value(),o);
                        }

                    }
                }

            }


            list = userServerService.list(queryWrapper);


        }
        return Result.success(list);

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一个多功能(聚合)查询接口,实现模糊、分页、主键、排序以及多条件查询
大家好,我是小简,很久没写文章了,确实是太忙了,今天我异想天开(其实也有很多类似的实现,只不过没去封装)的想去实现一个查询接口,不同条件不同查询的功能,简单的玩玩,如果大家有更好的思路或者见解,可以评论区互动一下,我很菜,还请理解,大佬勿喷。
JanYork_简昀
2023/06/04
1.2K0
一个多功能(聚合)查询接口,实现模糊、分页、主键、排序以及多条件查询
Java拖拽排序工具类「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/147752.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/07
1K0
使用EasyPoi根据权限动态导出列——反射实现
我们使用的注解版的导出 @Excel,官方文档中说明很详细,默认大家都会用,不会用的,copy一下官网的,跑一下,调一下就行了。
猿天地
2019/09/06
5.1K1
SpringBoot 为了偷懒,我封装了一个自适配的数据单位转换工具类
平时做一些统计数据,经常从数据库或者是从接口获取出来的数据,单位是跟业务需求不一致的。
IT咸鱼
2025/05/20
810
SpringBoot 为了偷懒,我封装了一个自适配的数据单位转换工具类
MyBatis Plus框架学习(二) MyBatis Plus 中的CRUD代码实现,一篇文章包含全部的mybatisplus的知识
MyBatis Plus框架学习(一)为什么要学习什么框架,简单的代码实现,查询全部数据
一写代码就开心
2021/07/08
1.3K0
021.使用反射,编写SpringIOC
就是把每一个bean(实体类)与bean(实体类)之间的关系交给第三方容器进行管理。 而不是传统的在你的对象内部直接控制。
qubianzhong
2018/12/14
3800
利用反射技术提升Java应用的灵活性和可扩展性
结论:**同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个**。
杨不易呀
2023/09/26
2310
利用反射技术提升Java应用的灵活性和可扩展性
自定义注解实现Excel表头多语言导出
公司有个项目导出excel的时候,要求根据头部的语言编号参数来将导出的excel的表头输出指定语言的值,由于这个语言的值是动态的,所以不能使用固定的模板,因为是多公司的模式,每家公司的语言翻译可能也不一样,目前表头数据是存在数据库的,跟业务表名和业务表的字段名绑定,那要怎么实现多语言动态输出,我想到的是使用注解来实现这个功能。
jayjay
2022/11/02
1.6K1
自定义注解实现Excel表头多语言导出
MybatisPlus不好用?帅小伙一气之下写了个MybatisPlusPro
即使在 CRUD,只要你肯思变,抽离出一套轮子,也是轻而易举的事。下面我们就一起来让 CRUD 自动化。
java思维导图
2023/12/13
3731
MybatisPlus不好用?帅小伙一气之下写了个MybatisPlusPro
mybatis仿jpa 使用@createDate @updateDate
最近在使用mybatis的时候发现一个问题,就是好多的时候保存实体的时候,都要set create 和update,这样很麻烦,有没有可能类似jap 使用注解自动生成。jpa 的注解原理也拦截sql ,把sql 里面的参数绑定给修改一下。
分享干货的你
2021/04/06
1.1K0
Java-反射
哈喽!大家好,我是小简。今天开始学习《Java-反射》,此系列是我做的一个 “Java 从 0 到 1 ” 实验,给自己一年左右时间,按照我自己总结的 Java-学习路线,从 0 开始学 Java 知识,并不定期更新所学笔记,期待一年后的蜕变吧!
小简
2023/01/04
4060
Java-反射
Java反射_笔记分享
反射机制 • 动态编译 • 动态执行javascript代码 • 动态字节码操作
bboy枫亭
2020/09/26
5180
javaSE 注释和反射
@override 指示方法声明旨在覆盖超类型中的方法声明。 @Deprecated 已过时 不推荐使用的代码 @SuppressWarnings 镇压警告(可以放入参数)
阿哲
2022/03/14
2670
动态生成初始化条件构造器
在我没日没夜的写大量的增删改查的过程中意识到了一个问题,那就是我们在分页查询或者批量查寻的时候,通常会根据不同的场景去构造不同的QueryWrapper那就有一个问题, 对于我们后端很不友好,每次都是查询,只不过前端传过来的条件可能不一样,所以我就想有没有一种办法可以动态的去构造QueryWrapper这时候我就尝试造一个轮子
用户10136162
2022/11/15
3040
EaysPoi导出的时候根据权限动态导出列——反射实现
前言: 前段时间,因为业务需求需要根据用户角色动态导出excel,不同角色看到的列不同。以前用到的方法基本是(或者有其他土方法),创建多个实体类,每个实体类对应的列不同,以此来实现动态导出,但显然这是个笨方法,虽然省时省力,但好像总觉得哪里不对。正片开始
凯哥Java
2022/12/16
9870
EaysPoi导出的时候根据权限动态导出列——反射实现
反射收集注解标注的值
public class RequestParamParse { private RequestParamParse() { } /** * 解析请求参数返回为Key-Value * * @param request * @return * @throws Exception */ public static ConcurrentHashMap<String, Object> parseParam(BaseReq
用户1215919
2021/12/28
2120
原生JDBC简单实现Mybatis核心功能
之前在Vertx项目中使用Tdengine,但Vertx没有Tdengine的异步JDBC驱动。所以只能使用Tdengine提供的同步JDBC驱动配合vertx.executeBlocking实现异步数据库查询。 原生的JDBC在SQL参数绑定和返回数据映射时很不方便。但当时第一印象是Mybatis和Spring结合太紧密了(实际是可以的哈),所以自己写了一个简单的SQL解析和返回数据映射的简单JDBC工具。但不能像Mybaits那样支持复杂的嵌套的类参数绑定和映射,但已经够用了。
科技新语
2024/09/24
1410
原生JDBC简单实现Mybatis核心功能
Java-反射机制
调用类的Class对象的newInstance方法,该方法会调用对象的默认构造器,如果没有默认构造器,会调用失败..
用户7353950
2022/05/10
1620
(84) 反射 / 计算机程序的思维逻辑
上节介绍完了并发,从本节开始,我们来探讨Java中的一些动态特性,包括反射、类加载器、注解和动态代理等。利用这些特性,可以以优雅的方式实现一些灵活和通用的功能,经常用于各种框架、库和系统程序中,比如: 在63节介绍的实用序列化库Jackson,利用反射和注解实现了通用的序列化/反序列化机制 有多种库如Spring MVC, Jersey用于处理Web请求,利用反射和注解,能方便的将用户的请求参数和内容转换为Java对象,将Java对象转变为响应内容 有多种库如Spring, Guice利用这些特性实现了对象
swiftma
2018/01/31
9060
(84) 反射 / 计算机程序的思维逻辑
Java知识点—反射
为了方便大家学习这个系列,我新建了一个github仓库,会更新Android体系架构所有文章,还有面试专题,思维导图链接等等,地址:https://github.com/JiMuzz/Android-Architecture
码上积木
2021/01/25
3260
相关推荐
一个多功能(聚合)查询接口,实现模糊、分页、主键、排序以及多条件查询
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档