检索方法

来源:互联网 发布:房地产数据来源 编辑:程序博客网 时间:2024/06/04 20:39

写一个实体,专门用来简单的关键词检索

package com.boventech.zyk.util;/** * 简单的关键词检索辅助类 (参数都可以为空)<BR> * page 页码,pageSize 分页大小, limit 最大结果数, queryName 检索列,queryWord 检索关键词, orderColumn 排序列,orderType 排序类型 */public class SimpleQuery {    public static final int UNPAGE = -99;    /**     * 页码 (page=UNPAGE表示不分页)     */    private Integer page = 1;    /**     * 分页大小     */    private Integer pageSize;    /**     * 最大结果数 (不分页时有效)     */    private Integer limit;    /**     * 检索列名 (不指定时为全文检索)     */    private String queryColumn;    /**     * 检索关键词     */    private String queryWord;    /**     * 排序列名     */    private String orderColumn;    /**     * 排序类别     */    private String orderType;    public Integer getPage() {        if (page <= 0) {            setPage(1);        }        return page;    }    public void setPage(Integer page) {        this.page = page;    }    public Integer getPageSize() {        return pageSize;    }    public void setPageSize(Integer pageSize) {        this.pageSize = pageSize;    }    public Integer getLimit() {        return limit;    }    public void setLimit(Integer limit) {        this.limit = limit;    }    public String getQueryColumn() {        return queryColumn;    }    public void setQueryColumn(String queryColumn) {        this.queryColumn = queryColumn;    }    public String getQueryWord() {        return queryWord;    }    public void setQueryWord(String queryWord) {        this.queryWord = queryWord;    }    public String getOrderColumn() {        return orderColumn;    }    public void setOrderColumn(String orderColumn) {        this.orderColumn = orderColumn;    }    public String getOrderType() {        return orderType;    }    public void setOrderType(String orderType) {        this.orderType = orderType;    }    public void filter() {        this.setQueryColumn(doFilter(this.getQueryColumn()));        this.setOrderColumn(doFilter(this.getOrderColumn()));        this.setOrderType(doFilter(this.getOrderType()));    }    public String getWord() {        return queryWord == null ? "%%" : "%" + queryWord + "%";    }    private String doFilter(String rawStr) {        String str = rawStr;        if (str != null && !"".equals(str)) {            str = str.replaceAll("<[^>]*>", "");            str = str.replaceAll("\"", "");            str = str.replaceAll("'", "");            str = str.replaceAll("\\s", "");        }        return str;    }}
controller中这么写,正好可以接收检索的关键字的值:

@RequestMapping(method = GET)    public String index(SimpleQuery query, Model model) {        List<Resource> resources = resourceService.listBySimpleQuery(query);        model.addAttribute("resources", resources);        model.addAttribute("query", query);        return "/XX";    }

DAOIMPL:
@SuppressWarnings("unchecked")    @Override    public List<Resource> listBySimpleQuery(SimpleQuery query) {        String word = query.getWord();        Integer pageSize = getPageSize(query.getPageSize());        String whereClause = " where r.name like ?1 or r.tags like ?1 or r.description like ?1 or r.remark like ?1 ";        String countQuery = "select count(distinct r.resId) from Resource r" + whereClause;        String queryString = "select * from (select * from " + Constants.DB_TABLE_PREFIX + "resource r" + whereClause                + "order by r.createTime desc) t group by t.resId";        int total = executeCountQuery(countQuery, word);        Query listQuery = getEntityManager().createNativeQuery(queryString, Resource.class);        setParameter(listQuery, word);        listQuery.setFirstResult((query.getPage() - 1) * pageSize);        listQuery.setMaxResults(pageSize);        List<Resource> result = listQuery.getResultList();        return (List<Resource>) PaginateSupportUtil.pagingList(result, total, query.getPage(), pageSize);    }


0 0
原创粉丝点击