Heim > Java > javaLernprogramm > 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
Freigeben: 2023-04-23 14:19:08
nach vorne
985 Leute haben es durchsucht

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage