Hibernate 는 JPA 와 결합 하여 일반적인 다 중 조건 조 회 를 작성 합 니 다.

13993 단어 Hibernate
프로젝트 에 서 는 데이터베이스 대상 을 Hibernate 와 JPA 로 예화 하지만, 생 성 방법 은 다 중 조건 조 회 를 지원 하지 않 습 니 다.각 데이터베이스 대상 에 대해 다 중 조건 으로 인 코딩 을 조회 하면 번 거 로 워 지고 나중에 표 구조 가 바 뀌 면 재 인 코딩 이 필요 할 수 있다.따라서 데이터베이스 대상 을 여러 조건 으로 조회 하고 범 형 대상 으로 돌아 가 는 방법 을 고려 하면 편리 하 게 사용 할 수 있 습 니 다.구체 적 인 실현 방향 은 다음 과 같다.
첫 번 째 단계: 데이터베이스 조회 매개 변수 대상 을 작성 합 니 다. 이 부분 은 두 개 를 포함 합 니 다. 하 나 는 쿼 리 실체 이름 (Query Condition. java) 이 고 하 나 는 데이터베이스 조회 조건 대상 (Query Parameter. java) 입 니 다.
데이터베이스 조회 조건 대상 (Query Parameter. java) 은 매개 변수 이름, 매개 변수 값, 조회 조건 표현 식 등 세 개의 매개 변 수 를 포함 합 니 다.
package com.imstudio.jpa;



public class QueryParameter {

    public enum QueryOperateType {

        Equal, CharIn

    }



    public String ParameterName;

    public Object ParameterValue;

    public QueryOperateType ParameterType;



    public QueryParameter() {



    }



    public QueryParameter(String parameterName, Object parameterValue,

            QueryOperateType parameterType) {

        this.ParameterName = parameterName;

        this.ParameterValue = parameterValue;

        this.ParameterType = parameterType;

    }



    public String getParameterName() {

        return ParameterName;

    }



    public QueryOperateType getParameterType() {

        return ParameterType;

    }



    public Object getParameterValue() {

        return ParameterValue;

    }



    public void setParameterName(String parameterName) {

        ParameterName = parameterName;

    }



    public void setParameterType(QueryOperateType parameterType) {

        this.ParameterType = parameterType;

    }



    public void setParameterValue(Object parameterValue) {

        ParameterValue = parameterValue;

    }

}

조회 대상 실체 (QueryCondition. java) 는 조회 실체 이름과 조회 매개 변수 대상 을 포함 합 니 다.
package com.imstudio.jpa;



import java.util.ArrayList;

import java.util.List;



public class QueryCondition {

    public String ModelName;

    public List<QueryParameter> Parameters = new ArrayList<QueryParameter>();



    public QueryCondition() {



    }



    public QueryCondition(String modelName) {

        this.ModelName = modelName;

    }



    public QueryCondition(String modelName, List<QueryParameter> parameters) {

        this.ModelName = modelName;

        this.Parameters = parameters;

    }



    public void add(QueryParameter queryParameter) {

        this.Parameters.add(queryParameter);

    }



    public String getModelName() {

        return ModelName;

    }



    public List<QueryParameter> getParameters() {

        return Parameters;

    }



    public void setModelName(String modelName) {

        ModelName = modelName;

    }



    public void setParameters(List<QueryParameter> parameters) {

        Parameters = parameters;

    }

}

상기 두 개의 실체 대상 을 완성 한 후에 구체 적 인 조회 방법 을 작성 할 수 있 습 니 다. 조회 에서 하나의 변수 query Symbols 를 사용 합 니 다. 다음 인 코딩 은 설정 파일 웹. xml 에서 얻 을 수 있 습 니 다. 여 기 는 주로 서로 다른 데이터 베 이 스 를 사용 할 때 키워드 표시 자의 수정 을 조회 하기 위해 서 입 니 다.또한 조회 방법의 통용 성 을 높이 기 위해 조회 반환 데 이 터 를 범 형 으로 정의 합 니 다.
package com.imstudio.jpa;



import java.util.ArrayList;

import java.util.List;

import java.util.logging.Level;



import javax.persistence.EntityManager;

import javax.persistence.Query;



import org.apache.struts2.ServletActionContext;



import com.imstudio.jpa.QueryParameter.QueryOperateType;





public class QueryDataAction {



    public String errorCode;



    public QueryDataAction() {

    }



    public QueryDataAction(String errorCode) {

        this.errorCode = errorCode;

    }



    public String getErrorCode() {

        return errorCode;

    };



    @SuppressWarnings("unchecked")

    public <T> List<T> queryByPropertys(QueryCondition queryCondition) {

        String querySymbols = ServletActionContext.getServletContext()

                .getInitParameter("QuerySymbols");

        StringBuffer sqlBuffer = new StringBuffer();

        sqlBuffer.append("select model 
"); sqlBuffer.append("from " + queryCondition.ModelName + " as model
"); boolean first = true; for (int pi = 0; pi < queryCondition.Parameters.size(); pi++) { if (queryCondition.Parameters.get(pi).getParameterName() != null) { if (first) { sqlBuffer.append("where "); first = false; } else { sqlBuffer.append("and "); } if (queryCondition.Parameters.get(pi).getParameterType() == QueryOperateType.Equal) { sqlBuffer.append("model." + queryCondition.Parameters.get(pi) .getParameterName() + " = " + querySymbols + queryCondition.Parameters.get(pi) .getParameterName() + "
"); } else if (queryCondition.Parameters.get(pi).getParameterType() == QueryOperateType.CharIn) { sqlBuffer.append("InStr(model." + queryCondition.Parameters.get(pi) .getParameterName() + " , " + querySymbols + queryCondition.Parameters.get(pi) .getParameterName() + " ) > 0
"); } } } List<T> list = new ArrayList<T>(); try { EntityManagerHelper.log(sqlBuffer.toString(), Level.INFO, null); EntityManager emEntityManager = EntityManagerHelper .getEntityManager(); Query queryObject = emEntityManager.createQuery(sqlBuffer .toString()); for (int li = 0; li < queryCondition.Parameters.size(); li++) { queryObject.setParameter(queryCondition.Parameters.get(li) .getParameterName(), queryCondition.Parameters.get(li) .getParameterValue()); } list = queryObject.getResultList(); emEntityManager.close(); } catch (RuntimeException re) { errorCode += "CM000006"; EntityManagerHelper.log("queryByPropertys error", Level.SEVERE, re); throw re; } return list; } public void setErrorCode(String errorCode) { this.errorCode = errorCode; } }

위 와 같은 방법 으로 하 이 버 네 이 트, JPA 의 생 성 코드 에 맞 춰 여러 조건 으로 조회 할 수 있다.여러분 과 많은 소통 과 학습 을 환영 합 니 다. 만약 에 개선 의견 과 건의 가 있 으 면 제 QQ 는 1243672 입 니 다. 연락 을 환영 합 니 다.

좋은 웹페이지 즐겨찾기