接口查询

这篇博客主要介绍了接口查询的Demo,包括使用Hibernate Criteria进行查询,设置分页查询条件,以及某某查询类接口的实现。文中提到了Action中的链式书写方式,并且指出了请求和响应的封装细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接口查询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. 注释1:其中**代表某某,不是所有,SecurityUserRequest request, JSONResultResponse response是封装好的。
  2. 注释2:action中采用的链式书写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值