2011-10-07 2 views
1

특정 테이블 속성이있는 하나의 엔티티 클래스가 있습니다. 이 클래스의 객체는 속성에 대한 값이있는 도우미 클래스에 채워집니다. 이제 SQL 쿼리 문 (별도의 전용 메서드)을 동적으로 작성하고 일치하는 모든 행에 대해 테이블 ​​(별도의 전용 메서드)을 쿼리하고 출력 결과 (별도의 전용 메서드)를 AuditBO 개체 목록에 매핑하는 메서드가 필요합니다.자바 코드를 통해 동적 쿼리를 작성하십시오.

+0

질문은 무엇입니까? 지금까지 무엇을했는지, 그리고 어떤 특정 prolems을 실행하고 있는지 보여주세요. – vanje

+0

아마도 어떤 종류의 ORM이 여기에서 Hibernate를 사용하는 것처럼 도움이 될 수 있습니다. 모델에서 쿼리 할 수 ​​있습니다. –

+0

또는 더 잘 읽을 수있는 문장과 적은 String 곡예를 원한다면 QueryDSL을 살펴볼 수 있습니다. http://www.querydsl.com/ – Gandalf

답변

0

희망이 도움이 될 것입니다.

Table 클래스가 초기화되면 모든 입력 값이 초기화됩니다. getSelectQuery 메서드가 호출되면 입력을 기반으로 쿼리가 선택됩니다. 그리고 populatePreparedSt이 호출되어 PreparedStatement를 설정합니다. 마지막으로 입력을 기반으로 Table의 생성자를 설정하면 쿼리와 결과가 표시됩니다.

표 클래스 :

public class TableRow { 
    private String attibute1; 
    private String attibute2; 
    private int id; 
    // getter and setters 

    public final String selectQuery = " SELECT ID, ATTIBUTE1, ATTIBUTE2 FROM TABLEROW "; 

    public CECardLogRow(int id, String attibute1, String attibute2) { 
     this.id = id; 
     this.attibute1 = attibute1; 
     this.attibute2 = attibute2; 
    } 

    public String getSelectQuery() { 
     StringBuilder sql = new StringBuilder(); 
     boolean whereClauseAdded = false;  
     sql = sql.append(selectQuery); 
     if (id > -1) { 
      sql.append(" WHERE ID = ? "); 
      whereClauseCt++; 
     } 
     if (attibute1 != null && attibute1.trim() != "") { 
      sql.append(whereClauseAdded ? " AND " : " WHERE "); 
      sql.append(" ATTIBUTE1 = ? "); 
     } 
     if (attibute2 != null && attibute2.trim() != "") { 
      sql.append(whereClauseAdded ? " AND " : " WHERE "); 
      sql.append(" ATTIBUTE2 = ? "); 
     } 
     return sql.toString(); 
    } 

    public void populatePreparedSt (PreparedStatement ps) { 
     int i = 1; 
     if (id > -1) { 
      ps.setInt(i++, id);   
     } 
     if (attibute1 != null && attibute1.trim() != "") { 
      ps.setString(i++, attibute1); 
     } 
     if (attibute2 != null && attibute2.trim() != "") { 
      ps.setString(i++, attibute2); 
     }   
    } 
} 

호출 방법 :

public List<TableRow> getData (int id, String attibute1, String attibute2) { 
    List<TableRow> rows = new ArrayList<TableRow>(); 
    Connection con = null; 
    PreparedStatement ps = null; 
    ResultSet rs = null; 
    try { 
     TableRow row = new TableRow(id, attibute1, attibute2);   
     String sql = row.getSelectQuery(); 
     con = global.getConnection(); // get connection 
        ps = con.prepareStatement(sql); 
     row.populatePreparedSt(ps); 
     rs = ps.executeQuery(); 
     while (rs.next()) { 
      TableRow row = new TableRow(); 
      // get data 
      row.setId(rs.getInt("ID"));// and so on    
      rows.add(tableRow); 
     } 
    } catch (SQLException sqe) { 
     throw sqe; 
    } finally() { 
     // closeConnection 
    } 
    return rows; 
} 
+0

나는 당신이 나를 잘못 생각한 사람들이라고 생각합니다. EntityBo로 엔티티 클래스를 만들었습니다. 이 클래스는 테이블의 모든 필드를 갖습니다. 이제 EntityBo 클래스의 필드를 채울 하나 이상의 도우미 클래스를 갖게 될 것입니다. 이제이 엔티티 클래스도 채 웁니다. 이 후 도우미 클래스에서 동적으로 SQL 쿼리를 작성하는 메서드가 필요합니다. 그래서 기본적으로 입력 된 특성을 기반으로 쿼리를 동적으로 작성하는 메서드를 만들기 위해 여기에 붙어 있습니다. –

+0

쿼리는 다음과 같이됩니다. SELECT * from CCMS.USER_ACT_AUDIT 여기서 CLIENT_ID = 'GUI'및 USER_ID = '[email protected]'및 ACTION = 'searchParties'with ur. 여기에서 쿼리에 언급 된 속성은 엔터티 클래스에 채워지고 이러한 특성을 기반으로 쿼리가 동적으로 만들어집니다. 그래서 나는 쿼리를 동적으로 생성하는 메서드가 필요합니다. –

+0

입력을 기반으로 쿼리가 동적으로 빌드되는 것을 보지 못합니까? – Vaandu

관련 문제