>Java >java지도 시간 >Java 반사 기술을 사용하여 객체 지향 프로그래밍과 SQL 작업을 연결하는 방법은 무엇입니까?

Java 반사 기술을 사용하여 객체 지향 프로그래밍과 SQL 작업을 연결하는 방법은 무엇입니까?

PHPz
PHPz앞으로
2023-04-23 14:19:08981검색

예제 코드:

public 클래스 SqlUtil은 BaseApplogic을 확장합니다. {
   public List excuteQuery(String sql, Object[] paras, Object voo)
           AppException을 발생시킵니다. {
       DBPersistenceManager dbpm = this.getFnmsDBPM();
       List list=new ArrayList();
       시도해 보세요 {
DataSet ds = (DataSet) dbpm.executeQuery(sql, paras);
           
           DataSetMetaData dsmd = ds.getDataSetMetaData();
           
           Field[] voo.getClass().getDe claredFields();
           String className = voo.getClass ().getName();
           int size = fd.length;
           메서드 md[]=new Method[size];
           //构造method[]
           for (int i = 0; i < size; i++) {
               속성 attr=dsmd.getAttribute(fd[i].getName().toUpperCase());
               if (null != attr) {
                   Field f = voo.getClass().getDeclaredFi 필드(fd[i].getName( ));
                   문자열 유형 = f.getType().getName();
                   Class[] 유형=getTypes(type);  and s);
               }
           }
           
           while(ds.next()) {
               Object o = Class.forName(className).newInstance();
               for (int i = 0; i < size; i++) {
                   if(null!=md[i]){
                      //调用
                       속성 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( 예외 e) {
           this.handleException(e);// 新增加的异常处理
       } 마지막으로 {
           if (dbpm != null) {
               dbpm.close();
          }
       }
       반품 목록;

   }

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

   }

   // 取类型
   public static Class[] getTypes(문자열 유형) {
       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")) {
           새 클래스 반환[] { 긴.TYPE };
} Else if (type.equals ("float") {
Return New class [] {float.type};
} else {
system.out.println ("해당 유형이 없습니다!");
Return null; Bleak }

}
}

excuteQuery 메소드는 세 개의 매개변수를 전달합니다. 첫 번째는 쿼리할 SQL 문이고, 두 번째는 매개변수 배열이고, 세 번째는 반환할 개체 유형입니다.

반환 값은 목록이고 목록의 각 개체는 전달한 개체 유형입니다.

이렇게 패키징하면 SQL과 객체가 자연스럽게 캡슐화됩니다. 각 쿼리를 알아낼 필요가 없으며 그 다음 resultset.next(), 그 다음 getString(), 그 다음 setXxx();

물론 이것은 단지 것입니다. 메타데이터와 Java 객체 반사 기술 활용에 있어 빙산의 일각입니다.

위 내용은 Java 반사 기술을 사용하여 객체 지향 프로그래밍과 SQL 작업을 연결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제