zoukankan      html  css  js  c++  java
  • JDBC学习笔记--通用的查询方法

    1.why:查询时方法的逻辑类似,很多代码雷同.

    2.what:

    1).方法的签名
    /**

    * 通用的查询方法,可以根据传入的SQL、Class对象返回SQL对应的记录的对象
    * @param clazz :描述对象的类型
    * @param sql :SQL语句。可能带占位符
    * @param args : 填充占位符的可变参数
    * @param <T>
    * @return
    */

     public <T> T get(Class<T> clazz, String sql, Object ... args){

       //...

       }

     2).使用该方法

    String sql = "SELECT id, name, email, birth FROM customers WHERE id = ?";
    Customer customer = get(Customer.class, sql, 1001);
    System.out.println(sql);
    System.out.println(customer);

    sql = "SELECT flow_id flowId, type type, id_card idCard, exam_card examCard, " + //第二个是别名,别名指的是指定的属性名,数据表与类的属性名对应
    "student_name studentName, location location, grade grade FROM examstudent WHERE flow_id = ?";
    Student student = get(Student.class, sql, 5);
    System.out.println(sql);
    System.out.println(student);

    3.how

    1).实现该方法需要综合使用反射,JDBC,JDBC元数据的知识

    2).具体步骤

    //1.得到ResultSet对象

     

    //2.得到ResultSetMetaData对象

     

    //3.创建一个Map<String, Object>对象,键:SQL查询的列的别名,值:列的值

     

    //4.处理结果集,利用ResultSetMetaData填充3对应的Map对象

    for(int i = 0; i < rsmd.getColumnCount(); i++){

      String columnLabel = rsmd.getColumnLabel(i + 1);

      Object columnValue = resultSet.getObject(i + 1);

      values.put(columnLabel, columnValue);

    }

    //5.若Map不为空,利用反射创建clazz对应的对象

     

    //5.遍历Map对象,利用反射为Class对象的对应的属性赋值.

    if(values.size()  > 0){

      entity = clazz.newInstance();

      for(Map.Entry<String, Object> entry: values.entrySet()){

        String fieldName = entry.getKey();

        Object value = entry.getValue();

        ReflectionUtils.setFieldValue(entity, fieldName, value);

      }

    }

    3)流程图

  • 相关阅读:
    Groovy基本语法
    利用IntelliJ IDEA创建第一个Groovy工程
    创建maven或者Gradle项目的时候GroupId和ArtifactId以及Version是什么意思?
    使用IDEA2017创建java web +maven项目
    Eclipse集成Tomcat的步骤,我已测试N次都是成功的
    访问 Tomcat支配项目去除项目名和端口号通过IP地址(或域名)访问
    SSM框架原理,作用及使用方法
    SpringMVC整合Shiro权限框架
    svn过滤文件配置
    svn
  • 原文地址:https://www.cnblogs.com/ifreewolf/p/11722756.html
Copyright © 2011-2022 走看看