接口查询Demo
接口查询Demo,以下只是个人意见,初次写,不喜勿喷,有好建议可以给我留言
- 1.查询接口 ,构建Hibernate的{@link org.hibernate.Criteria}之间的使用关系
package com.**.query;//包名
import org.hibernate.Criteria;
/**
* 查询接口 ,构建Hibernate的{@link org.hibernate.Criteria}之间的使用关系
* @author 佩子
*/
public interface Query {
int LEFT_JOIN = Criteria.LEFT_JOIN;
int INNER_JOIN = Criteria.INNER_JOIN;
/**
* 为查询增加注释
* @param comment
*/
void queryComment(String comment);
}
- 2.分页查询类接口,有关分页的条件的设置
package com.***.query;//包名
/**
* 分页查询类接口,有关分页的条件的设置
* @author 佩子
*/
public interface PageQuery extends Query {
/**
* 可以分多少页
* @param count
* @return
*/
int ablePagingSize(int count);
/**
* 每页显示多少条
* @return
*/
int getPageSize();
/**
* 当前的页码
* @return
*/
int getCurrentPageNum();
}
- 3.某某查询类接口
package com.****.query;//包名
import java.util.Date;
import java.util.List;
import com.***.PageQuery;//分页
import com.**.entity.SysLog;//实体
/**
* ***查询类接口
* @author 佩子
*/
public interface SysLogQuery extends PageQuery {
String INFO_TIME = "infoTime";
String INFO_NOTE = "infoNote";
String FILED_INFO_CREATE_TIME = "creater.createTime";
SysLogQuery readOnly();
SysLog uniqueResult();
int count();
List<SysLog> list();
SysLogQuery paging(int pageNum, int pageSize);
SysLogQuery infoTime(Date beginDate, Date endDate);
SysLogQuery infoNote(String infoNote);
SysLogQuery infoCrateTimeAscOrder();
}
- 4.实现接口
package com.*****.query;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import com.sinitech.zsonline.org.apache.commons.lang.StringUtils;
import com.**.AbstractPageQuery;
import com.**.entity.SysLog;
/**
* SysLogQueryImpl
* @author 佩子
* **/
public class SysLogQueryImpl extends AbstractPageQuery implements SysLogQuery {
private String infoNote;
private Date beginDate, endDate;
private boolean infoCrateTimeAscOrder;
/** 只读 */
@Override
public SysLogQuery readOnly() {
super.readOnly = true;
return this;
}
/** 查询结果只有一条 */
@Override
public SysLog uniqueResult() {
SysLog result = super.untypedUniqueResult(SysLog.class);
return result;
}
/** 返回一个list集合 */
@Override
public List<SysLog> list() {
super.enablepageCriteria();
super.enableDefaultOrder();
List<SysLog> result = super.untypedList(SysLog.class);
return result;
}
/** 统计总数 */
@Override
public int count() {
super.disablePageCriteria();
return super.count(SysLog.class);
}
/** 分页查询 */
@Override
public SysLogQuery paging(int pageNum, int pageSize) {
super.paging(pageNum, pageSize);
return this;
}
/** 排序 */
@Override
public SysLogQuery infoCrateTimeAscOrder() {
this.infoCrateTimeAscOrder = true;
return this;
}
@Override
public Criteria createCriteria(Criteria criteria) {
if (StringUtils.isNotBlank(this.infoNote)) {
criteria.add(Restrictions.like(INFO_NOTE, this.infoNote.trim(), MatchMode.ANYWHERE));
}
// 时间范围查询
if (this.beginDate != null) {
criteria.add(Restrictions.ge(INFO_TIME, beginDate));
}
if (this.endDate != null) {
criteria.add(Restrictions.lt(INFO_TIME, endDate));
}
// 排序
if (this.infoCrateTimeAscOrder) {
criteria.addOrder(Order.desc(FILED_INFO_CREATE_TIME));
} else {
criteria.addOrder(Order.asc(FILED_INFO_CREATE_TIME));
}
super.createPagingCriteria(criteria);
return criteria;
}
/** 分类查询 */
@Override
public SysLogQuery infoLevel(String infoLevel) {
this.infoLevel = infoLevel;
return this;
}
/** 时间查询 */
@Override
public SysLogQuery infoTime(Date beginDate, Date endDate) {
this.beginDate = beginDate;
if (endDate != null) {
Calendar cal = Calendar.getInstance();
cal.clear();
cal.setTime(endDate);
cal.add(Calendar.DATE, 1);
this.endDate = cal.getTime();
}
return this;
}
/** 标题查询 */
@Override
public SysLogQuery infoNote(String infoNote) {
this.infoNote = infoNote;
return this;
}
}
- Action
package com.**.syslog.action;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.**.web.JSONResultResponse;
import com.**.FlowEnvironmentImpl;
import com.**.dto.Paging;
import com.**.tags.PageTag;
import com.**.security.SecurityUserRequest;
import com.**.syslog.entity.SysLog;
import com.**.syslog.query.SysLogQuery;
import com.**.syslog.query.SysLogQueryImpl;
/**
1. 系统日志管理
2.
3. @author 佩子
*/
@Controller
@Scope(value = "prototype")
@RequestMapping(value = "/framework/syslog")
public class SysLogAction {
/** **列表 */
@RequestMapping(value = "/sysLogList")
public String sysLogList(SecurityUserRequest request, JSONResultResponse response) {
int pageNum = request.getPageNumFromRequest();
int pageSize = request.getPageSizeFromRequest();
String infoNote = request.getStringQuietly("infoNote");
SysLogQuery sysLogQuery = new SysLogQueryImpl();
sysLogQuery.infoCrateTimeAscOrder().infoNote(infoNote).readOnly().paging(pageNum, pageSize);
Paging<SysLog> paging = FlowEnvironmentImpl.pagingByQuery(SysLog.class, sysLogQuery);
PageTag.setPagingResult(request, paging);
return "sysLog/list_sysLog";
}
}
- 注释1:其中**代表某某,不是所有,SecurityUserRequest request, JSONResultResponse response是封装好的。
- 注释2:action中采用的链式书写