• 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)流程图

  • 相关阅读:
    PLSQL连接64位oracle,导入导出错误解决办法
    VS2008或者VS2010工具栏,标准里面的 在浏览器中浏览按钮不见了
    jquery radio取值,checkbox取值,select取值 及选中
    Waiting for HOME (‘android.process.acore’) to be launched…解决办法
    GetTickCount() 函数的作用和用法
    MFC ado连接access数据库
    VC切分窗口和多视图
    C++容器——插入与清除
    VC中在对话框上显示图片
    error LNK2005 已经在***.obj中定义
  • 原文地址:https://www.cnblogs.com/ifreewolf/p/11722756.html
Copyright © 2020-2023  润新知