Heim  >  Artikel  >  Java  >  Wie kann die Java-Reflexionstechnologie verwendet werden, um objektorientierte Programmierung und SQL-Operationen zu verbinden?

Wie kann die Java-Reflexionstechnologie verwendet werden, um objektorientierte Programmierung und SQL-Operationen zu verbinden?

PHPz
PHPznach vorne
2023-04-23 14:19:08946Durchsuche

Beispielcode:

public class SqlUtil erweitert BaseApplogic {
   public List excuteQuery(String sql, Object[] paras, Object voo)
         throws AppException {
       DBPersistenceManager dbpm = this.getFnmsDBPM();
       List list=new ArrayList();
       probieren Sie {
DataSet ds = (DataSet) dbpm.executeQuery(sql, paras);
           
         DataSetMetaData dsmd = ds.getDataSetMetaData();
           
         Field[] fd =. voo.getClass().get DeclaredFields();
           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]){
                    //调用
                       Attribut 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 ( Ausnahme e) {
           this.handleException(e);// 新增加的异常处理
       } schließlich {
           if (dbpm != null) {
               dbpm.close();
           }
       }
       Rückgabeliste;

   }

   //由属性调用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; Bleak }

}
}

Die excuteQuery-Methode übergibt drei Parameter. Der erste ist die abzufragende SQL-Anweisung, der zweite ist das Parameterarray und der dritte ist der zurückzugebende Objekttyp.

Der Rückgabewert ist eine Liste und jedes Objekt in der Liste ist der von Ihnen übergebene Objekttyp.

Nach einer solchen Verpackung werden SQL und Objekte auf natürliche Weise gekapselt. Es ist nicht erforderlich, jede Abfrage herauszufinden, dann resultset.next(), dann getString() und dann setXxx();

Natürlich ist das so Die Spitze des Eisbergs bei der Nutzung von Metadaten und der Java-Objektreflexionstechnologie.

Das obige ist der detaillierte Inhalt vonWie kann die Java-Reflexionstechnologie verwendet werden, um objektorientierte Programmierung und SQL-Operationen zu verbinden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen