一 常用的CriteriaBuilder
(1) query.addLikeAny("cc.courseCode", ccVO.getCourseCode()); 相當於 模糊查詢like
(2)query.addBetween("cc.activeDate", ccVO.getActiveBegin(), ccVO.getActiveEnd()); 相當between...and...
(3) query.addEq("cc.courseType", ccVO.getCourseType()); 相當於==
(4) if (ArrayUtils.isNotEmpty(ccVO.getCourseCountry())) { 相當於子查詢
DetachedCriteriaBuilder sub = DetachedCriteriaBuilder.instance(CourseCountry.class, "cct");sub.addIn("cct.countryCode", ccVO.getCourseCountry()).addPropertyEq("cc.id", "cct.courseCatalogId");
sub.setProjection(Projections.property("cct.courseCatalogId"));
query.withExists(sub.getDetachedCriteria());
}
/*public static enum TrainingApplyStatus {
Applied(0), Approved(10), Confirmed(20), Cancelled(30), Waiting(40), NotPassed(50), Passed(60), NoShow(70), Rejected(80), Exempted(90), ManagerExempted(100), DummyAssigned(111);
private Integer status;
TrainingApplyStatus(Integer status) {
this.status = status;
}
public Integer getStatus() {
return status;
}
}*/
(5)Integer[] defaultStatus = { TrainingApplyStatus.Applied.getStatus(),
TrainingApplyStatus.Approved.getStatus(),
TrainingApplyStatus.Rejected.getStatus() }; //這是枚舉類型
query.addIn("ta.status", defaultStatus);
(6)查詢時間
/**
and va1_.CRT_TIME<?
and va1_.CRT_TIME>=?
**/
if (visitorInfoVo.getDate() != null) {
query.addLt("va.createDate",PssDateWrapper.instance(visitorInfoVo.getDate()).toNextDay()
.toOneDayBegin().toDate()); //<
query.addGe("va.createDate",PssDateWrapper.instance(visitorInfoVo.getDate()) .toOneDayBegin().
toDate()); //>
}
(7)同時與多個相匹配 (同時與多個相匹配,用逗號隔開,字符串形式)
String partNumber = desvo.getPartNumber();
if (StringUtils.isNotEmpty(partNumber)) {
if (partNumber.contains(",")) {
String[] paraNumbers = partNumber.split(",");
Disjunction dis = Restrictions.disjunction();
for (int i = 0; i < paraNumbers.length; i++) {
if (StringUtils.isNotBlank(paraNumbers[i])) {
dis.add(Property.forName("partNumber").like(paraNumbers[i].trim(),
MatchMode.ANYWHERE));
}
}
query.getDetachedCriteria().add(dis);
} else {
query.addLikeAny("partNumber", partNumber);
}
}
(8)與一個複選框或者多個複選框中的值相匹配
String[] modalityList=searchVo.getModalityList();
if(ArrayUtils.isNotEmpty(modalityList)){
ConditionExp[] exps=new ConditionExp[modalityList.length];
for(int i=0; i<modalityList.length;i++){
exps[i] = Like.as("u.modality", modalityList[i]);
}
query.addOr(exps);
}
(9)假如一個下拉列表中有兩個map(這個很重要)
private DetachedCriteriaBuilder initQueryCriteria(
UserinfoSearchVo searchVo, List<Long> provinceId,
List<String> departments, List<String> otherDepartments) {
..........
..........
query.addOr(In.as("u.department", departments),In.as("u.nonePhilipsDepartment", otherDepartments));
}
/**where
(
this_.DEPARTMENT in (
?
)
or this_.NONE_PHILIPS_DEPARTMENT in (
?
)
)
**/
(10)子查詢
if (ArrayUtils.isNotEmpty(searchVo.getGroupList())) {
DetachedCriteriaBuilder subBuilder = DetachedCriteriaBuilder.instance(UserGroup.class, "ug");
subBuilder.addPropertyEq("u.id", "ug.userId").setProjection(Projections.distinct(Projections.property("ug.userId")));
subBuilder.addIn("ug.groupId", searchVo.getGroupList());
query.withExists(subBuilder.getDetachedCriteria());
}
(11)左聯接
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "CITY_ID", updatable = false, insertable = false)
private City city;
query.leftJoin("city", "cy");
query.addLikeAny("cy.cityName", searchVo.getCity());
query.addIn("cy.provinceId", provincesId); (與多箇中的某一個相匹配)
(12)條件查詢
//query.addLikeAny("de.location", deviceVo.getLocation()); |
|||
59 |
//modify for #2864 by forever 20150604 |
||
---|---|---|---|
60 |
if(StringUtils.isNotEmpty(deviceVo.getLocation().trim())){ |
||
61 |
query.addOr(Like.as("de.location", deviceVo.getLocation()),Like.as("ct.cityName", deviceVo.getLocation())); |
||
62 |
} |
(13)
public List<SystemData> getAllByType(String[] type){
DetachedCriteriaBuilder query=DetachedCriteriaBuilder.instance(SystemData.class);
query.addIn("type", type);
return this.select(query);
}
(14)查詢某個字段的最大值:
public long generateIndex() {
DetachedCriteriaBuilder query = DetachedCriteriaBuilder.instance(Route.class, "r");
query.setProjection(Projections.max("r.index"));
return this.selectTopE(query);
}
sql: select
max(this_.`INDEX`) as y0_
from
realroutes this_ limit ?
(15)
public Routes generateIndex1() {
DetachedCriteriaBuilder query = DetachedCriteriaBuilder.instance(Routes.class);
query.setProjection(Projections.max("index"));
query.setBeanTran(Routes.class);
return this.selectTopOne(query);
}