• 使用反射拼接SQL语句 和 使用 反射 + 注解 拼接SQL语句


    • 以下知识本人都是用 Maven工程 总结的

     1、使用反射拼接SQL语句 

    1. package com.csdn.anno;
    2. import java.io.IOException;
    3. import java.io.InputStream;
    4. import java.lang.reflect.Field;
    5. import java.util.Properties;
    6. public class AnnotationTest {
    7. public static void main(String[] args) throws ClassNotFoundException, IOException {
    8. // String sql = "select name,age,gender,city,score from student";
    9. // StringBuilder sql = new StringBuilder("select XXX,XXX,XXX");
    10. StringBuilder sql = new StringBuilder("select ");
    11. //通过 类加载器 读取文件
    12. InputStream inputStream = AnnotationTest.class.getClassLoader().getResourceAsStream("bean.properties");
    13. System.out.println(inputStream);//java.io.BufferedInputStream@7cca494b
    14. //读取properties配置文件,获取到配置文件里指定的类名
    15. Properties prop = new Properties();
    16. prop.load(AnnotationTest.class.getClassLoader().getResourceAsStream("bean.properties"));
    17. String className = (String) prop.get("className");
    18. //使用反射通过类名加载类
    19. Class clz = Class.forName(className);
    20. String tableName = clz.getSimpleName().toLowerCase();
    21. Field[] fields = clz.getDeclaredFields();
    22. for (int i = 0; i < fields.length; i++) {
    23. //遍历字段,获取字段名,添加到SQL语句
    24. String name = fields[i].getName();
    25. sql.append(name);
    26. if (i!= fields.length-1) {
    27. sql.append(",");
    28. }
    29. }
    30. sql.append(" from ").append(tableName);
    31. System.out.println(sql);//select name,age,gender,city,score from student
    32. }
    33. }
    34. class Student {
    35. private String name;
    36. private int age;
    37. private String gender;
    38. private String city;
    39. private String score;
    40. }
    className=com.csdn.anno.Student

    2、使用 反射 + 注解 拼接SQL语句 

    1. package com.csdn.anno;
    2. import java.io.IOException;
    3. import java.io.InputStream;
    4. import java.lang.annotation.Retention;
    5. import java.lang.annotation.RetentionPolicy;
    6. import java.lang.reflect.Field;
    7. import java.util.Properties;
    8. public class AnnotationTest {
    9. public static void main(String[] args) throws ClassNotFoundException, IOException {
    10. // String sql = "select name,age,gender,city,score from student";
    11. // StringBuilder sql = new StringBuilder("select XXX,XXX,XXX");
    12. StringBuilder sql = new StringBuilder("select ");
    13. //通过 类加载器 读取文件
    14. InputStream inputStream = AnnotationTest.class.getClassLoader().getResourceAsStream("bean.properties");
    15. System.out.println(inputStream);//java.io.BufferedInputStream@7cca494b
    16. //读取properties配置文件,获取到配置文件里指定的类名
    17. Properties prop = new Properties();
    18. prop.load(AnnotationTest.class.getClassLoader().getResourceAsStream("bean.properties"));
    19. String className = (String) prop.get("className");
    20. //使用反射通过类名加载类
    21. Class clz = Class.forName(className);
    22. Table tableAnnotation = clz.getAnnotation(Table.class); //获取到类上的注解
    23. String tableName = tableAnnotation != null ? tableAnnotation.value() : clz.getSimpleName().toLowerCase();
    24. //使用反射获取类里的字段
    25. Field[] fields = clz.getDeclaredFields();
    26. for (int i = 0; i < fields.length; i++) {
    27. //获取字段上的注解
    28. Column columnAnnotation = fields[i].getAnnotation(Column.class);
    29. //遍历字段,获取字段名,添加到SQL语句
    30. String name = columnAnnotation != null ? columnAnnotation.value() : fields[i].getName();
    31. sql.append(name);
    32. if (i != fields.length - 1) {
    33. sql.append(",");
    34. }
    35. }
    36. sql.append(" from ").append(tableName);
    37. System.out.println(sql);//select name,age,sex,city,score from t_student
    38. }
    39. }
    40. @Table("t_student")
    41. class Student {
    42. private String name;
    43. private int age;
    44. @Column("sex")
    45. private String gender;
    46. private String city;
    47. private String score;
    48. }
    49. @Retention(RetentionPolicy.RUNTIME)
    50. @interface Table {
    51. String value();
    52. }
    53. @Retention(RetentionPolicy.RUNTIME)
    54. @interface Column {
    55. String value();
    56. }
  • 相关阅读:
    Servlet Response设置响应数据功能&&完成重定向&&资源路径问题
    [Framework] Android Handler 工作原理
    软件工程与计算总结(十一)人机交互设计
    【腾讯云云上实验室-向量数据库】腾讯云VectorDB:深度学习场景下的新一代数据存储方案
    【教3妹学算法】相似度为 K 的字符串
    mysql中的几种排名函数
    华为网络模拟器ENSP安装(附安装包)
    java计算机毕业设计社区卫生预约挂号系统源码+系统+mysql数据库+lw文档+部署
    【软考软件评测师】第二十九章 可靠性可用性测试
    定时执行专家 —— 定时循环发送UDP消息(例如:控制远程电脑的开机、关机、重启、打开和关闭程序等)
  • 原文地址:https://blog.csdn.net/m0_65152767/article/details/133975108