Java使用反射对于自定义SQL进行赋值教训总结

2024-06-09 19:08

本文主要是介绍Java使用反射对于自定义SQL进行赋值教训总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、首先建立一张实体表->映射到db库里面的表

演示首先使用实体类:

public class Employee {/**** 列名称*/private String column;/**** 列属性值*/private String property;public String getColumn() {return column;}public void setColumn(String column) {this.column = column;}public String getProperty() {return property;}public void setProperty(String property) {this.property = property;}@Overridepublic String toString() {return "Employee{" +"column='" + column + '\'' +", property='" + property + '\'' +'}';}
}

2、首先就是使用反射进行对类的属性进行赋值:

public class ReflectTest {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {test2();}public  static  void  test() throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {String  selectSQL= " SELECT count(id) as sum from employee where #start_date < date_add(create_time,interval 30 HOUR) ";String currentDate = DateUtils.getCurrDate();String  yesterDay="'"+DateUtils.countDate(currentDate, -1)+"'";String  name="";if(selectSQL.contains("#start_date")){System.out.println("yesterDay :"+yesterDay);name=selectSQL.replace("#start_date",yesterDay);System.out.println("selectSQL :"+name);}Employee employee=new Employee();employee.setColumn("列值1111111");employee.setProperty("属性值");Class clazz=employee.getClass();//获取Class对象方式1Field[] fields=clazz.getDeclaredFields();//获取变量System.out.println("getDeclaredFields:"+fields.length);for(Field field:fields){field.setAccessible(true);if(field.getName().equals("column")){field.set(employee,"测试数据");//设置字段的值}if(field.getName().equals("property")){field.set(employee,"属性值");//设置字段的值}// System.out.println("field.getAnnotations:"+field.getAnnotations().length+"\tfield.getName:"+field.getName()+"\tfield.get:"+field.get(employee));//获取实例属性名和值}System.out.println(employee.getColumn());System.out.println(employee.toString());//        String clazzName=clazz.getName();//获取类名,含包名
//        String clazzSimpleName=clazz.getSimpleName();//获取类名,不含包名
//        System.out.println("getName:"+clazzName+"\tgetSimpleName:"+clazzSimpleName);
//
//        int mod=clazz.getModifiers();//获取类修饰符
//        System.out.println("Modifier.isPublic:"+Modifier.isPublic(mod));//判断类修饰符
//        System.out.println("Modifier.isProtected:"+Modifier.isProtected(mod));//判断类修饰符
//
//        Package p=clazz.getPackage();//获取包
//        System.out.println("getPackage:"+p);
//
//        Class superClass=clazz.getSuperclass();//获取父类
//        System.out.println("getSuperclass:"+superClass);
//
//        Class[] interfaces=clazz.getInterfaces();//获取实现接口
//        System.out.println("getInterfaces:"+interfaces.length);
//
//        Constructor[] cons=clazz.getConstructors();//构造方法
//        System.out.println("getConstructors:"+cons.length);
//
//        Method[] methods=clazz.getMethods();//获取所有方法
//        System.out.println("getMethods:"+methods.length);
//        for(Method method:methods){
//            System.out.println("method.getName:"+method);
//        }//        Method method=clazz.getMethod("getColumn", null);//获取指定方法
//        System.out.println("getMethod(,):"+method);
//        Object methodVlaue=method.invoke(employee, null);//调用方法
//        System.out.println("method.invoke(,):"+methodVlaue);//        Method method3=clazz.getMethod("setProp3",Double.class);//获取指定方法
//        System.out.println("getMethod(,):"+method3);
//        Object methodVlaue3=method3.invoke(employee, 2.0);//调用setter方法,该方法没有返回值,所以methodVlaue3为null;此处注意参数2.0 ,不能用null
//        System.out.println("method.invoke(,):"+methodVlaue3);//        Field[] fields=clazz.getDeclaredFields();//获取变量
//        System.out.println("getDeclaredFields:"+fields.length);
//        for(Field field:fields){
//            field.setAccessible(true);
//            field.set(employee,"测试数据");//设置字段的值
//            System.out.println("field.getAnnotations:"+field.getAnnotations().length+"\tfield.getName:"+field.getName()+"\tfield.get:"+field.get(employee));//获取实例属性名和值
//
//        }//        Annotation[] annos=clazz.getAnnotations();//获取类注解
//        System.out.println("getAnnotations:"+annos.length);}

 显然,首先确保private属性能读进去,

然后就是判断属性名称限定条件,是否需要HashMap转换,

最后进行赋值,是可以实现输出内容,显然数值赋值成功完成。

 

 

这篇关于Java使用反射对于自定义SQL进行赋值教训总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1046043

相关文章

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚