• 技术文章 >Java >java教程

    如何利用Java反射技术将面向对象编程和SQL操作联系起来?

    PHPzPHPz2023-04-23 14:19:08转载24

    实例代码:

    public class SqlUtil extends BaseApplogic {
    public List excuteQuery(String sql, Object[] paras, Object voo)
    throws AppException {
    DBPersistenceManager dbpm = this.getFnmsDBPM();
    List list=new ArrayList();
    try {
    DataSet ds = (DataSet) dbpm.executeQuery(sql, paras);

    DataSetMetaData dsmd = ds.getDataSetMetaData();

    Field[] fd = voo.getClass().getDeclaredFields();
    String className = voo.getClass().getName();
    int size = fd.length;
    Method md[]=new Method[size];
    //构造method[]
    for (int i = 0; i < size; i++) {
    Attribute attr=dsmd.getAttribute(fd[i].getName().toUpperCase());
    if (null != attr) {
    Field f = voo.getClass().getDeclaredField(fd[i].getName());
    String type = f.getType().getName();
    Class[] types=getTypes(type);
    String methodName=getSetterName(fd[i].getName());
    md[i] = voo.getClass().getMethod(
    methodName,types);
    }
    }

    while(ds.next()){
    Object o = Class.forName(className).newInstance();
    for (int i = 0; i < size; i++) {
    if(null!=md[i]){
    //调用
    Attribute attr=dsmd.getAttribute(fd[i].getName().toUpperCase());
    if (null==attr) continue;
    Object[] pa=new Object[]{ds.getString(attr.getAttrName())};
    md[i].invoke(o,pa);
    }
    }
    list.add(o);
    }
    } catch (DrmException drme) {
    this.handleException(drme);
    } catch (Exception e) {
    this.handleException(e);// 新增加的异常处理
    } finally {
    if (dbpm != null) {
    dbpm.close();
    }
    }
    return list;

    }

    //由属性调用set方法
    public static String getSetterName(String propName) {
    return "set" + propName.substring(0, 1).toUpperCase()
    + propName.substring(1, propName.length());

    }

    // 取类型
    public static Class[] getTypes(String type) {
    if (type.equals("java.lang.String")) {
    return new Class[] { String.class };
    } else if (type.equals("int")) {
    return new Class[] { Integer.TYPE };
    } else if (type.equals("long")) {
    return new Class[] { Long.TYPE };
    } else if (type.equals("float")) {
    return new Class[] { Float.TYPE };
    } else {
    System.out.println("no such type!");
    return null;
    }

    }
    }

    其中excuteQuery方法传入三个参数,第一个是要查询的sql语句,第二个是参数数组,第三个是要返回的对象类型。

    返回值是一个list,list中的每个对象都是你传入的对象类型。

    经过这样一种包装,将sql与对象自然的封装起来,不用每个查询都查出来以后,再resultset.next(),再getString(),然后再setXxx();

    当然,这只是元数据与java对象反射技术利用的冰山一角。

    以上就是如何利用Java反射技术将面向对象编程和SQL操作联系起来?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:亿速云,如有侵犯,请联系admin@php.cn删除
    专题推荐:SQL Java
    上一篇:Java位运算示例代码分析 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • java泛型接口的使用注意事项是什么• java如何求数值型数组中元素的最大值、最小值、平均数、总和等操作• java如何通过字节流实现文件的拷贝• java中wait调用中断怎么解决• Java设计模式的适配器模式怎么实现
    1/1

    PHP中文网