Hibernate 는 JPA 와 결합 하여 일반적인 다 중 조건 조 회 를 작성 합 니 다.
13993 단어 Hibernate
첫 번 째 단계: 데이터베이스 조회 매개 변수 대상 을 작성 합 니 다. 이 부분 은 두 개 를 포함 합 니 다. 하 나 는 쿼 리 실체 이름 (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 입 니 다. 연락 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JPA] 즉시로딩(EAGER)과 지연로딩(LAZY) (왜 LAZY 로딩을 써야할까?) (1)Proxy는 이 글의 주제인 즉시로딩과 지연로딩을 구현하는데 중요한 개념인데, 일단 원리는 미뤄두고 즉시로딩과 지연로딩이 무엇인지에 대해 먼저 알아보자. 눈 여겨 볼 곳은 'fetch = FetchType.EAGER...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.