> Java > java지도 시간 > 본문

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

PHPz
풀어 주다: 2023-04-23 14:19:08
앞으로
950명이 탐색했습니다.

예제 코드:

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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿