溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

jspXCMS頁面動(dòng)態(tài)查詢怎么實(shí)現(xiàn)

發(fā)布時(shí)間:2022-01-19 17:18:56 來源:億速云 閱讀:235 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“jspXCMS頁面動(dòng)態(tài)查詢怎么實(shí)現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“jspXCMS頁面動(dòng)態(tài)查詢怎么實(shí)現(xiàn)”吧!

系統(tǒng)后臺(tái)的列表頁通常都有查詢功能,如果通過寫sql語句進(jìn)行查詢非常費(fèi)時(shí),特別是在查詢條件較多的情況下。如果查詢條件發(fā)生變化,則需要修改sql語句,非常麻煩。

jspxcms使用頁面動(dòng)態(tài)查詢來解決這個(gè)問題,直接解析查詢表單的名稱來生成sql查詢條件,只要修改頁面就可以實(shí)現(xiàn)查詢,而不需要修改java代碼和寫sql語句。

/WEB-INF/views/plug/resume/resume_list.jsp(已做簡化):

<form action="list.do" method="get">
    名稱:<input type="text" name="search_CONTAIN_name" value="${search_CONTAIN_name[0]}"/>
    職位:<input type="text" name="search_CONTAIN_post" value="${search_CONTAIN_post[0]}"/>
    開始日期:<input type="text" name="search_GTE_creationDate_Date" value="${search_GTE_creationDate_Date[0]}"/>
    結(jié)束日期:<input type="text" name="search_LTE_creationDate_Date" value="${search_LTE_creationDate_Date[0]}" />

    <button type="submit">搜索</button>
</form>
com.jspxcms.plug.domain.Resume;

public class Resume {
    private Integer id;
    private Site site;
    private String name;
    private String post;
    private Date creationDate;
    private String gender;
    private Date birthDate;
    private String mobile;
    private String email;

    ...

}

其中 search_CONTAIN_name search_CONTAIN_post search_GTE_creationDate_Date search_LTE_creationDate_Date 是關(guān)鍵內(nèi)容。

  • search_ 是前綴,代表這個(gè)輸入框用于構(gòu)建搜索條件。

  • CONTAIN GTE LTE 是查詢關(guān)鍵字。相當(dāng)于 like >=  <=。

  • name post creationDate 是查詢的字段。是com.jspxcms.plug.domain.Resume實(shí)體類中的屬性名。

  • _Date 是類型后綴,默認(rèn)是字符串,所以字符串不需要類型后綴;creationDate是日期,所以要加上_Date后綴。

最后的效果類似 where name like '%abc%' and post like '%def%' and creationDate >= 'xxxx-xx-xx' and creationDate <= 'xxxx-xx-xx'

保留頁面查詢條件值

點(diǎn)擊查詢按鈕后,希望把之前的查詢條件值依然保留在頁面上。

value="${search_CONTAIN_name[0]}"的作用是將查詢條件反填至頁面,也就是點(diǎn)擊查詢按鈕得到查詢結(jié)果后,查詢條件值依然顯示在頁面上,而不會(huì)變成空白。

如果name里面的值帶有.號,則必須使用這種格式:

name="search_CONTAIN_detail.title" value="${requestScope['search_CONTAIN_detail.title'][0]}"

表連接

上面的例子是只查詢當(dāng)前實(shí)體類的字段。

查詢many-to-one或one-to-one的關(guān)聯(lián)實(shí)體類的字段用.分隔。比如search_CONTAIN_site.name。

查詢many-to-many或one-to-many的關(guān)聯(lián)實(shí)體類的字段需加上J前綴。比如Info查詢中的search_CONTAIN_JinfoSpecials.Jspecial.title search_CONTAIN_JinfoTags.Jtag.name

查詢條件

  • EQ :代表sql中的 =。

  • LIKE : 代表sql中的 like。

  • CONTAIN : 代表sql中的 like,且會(huì)在查詢內(nèi)容前后加上通配符,如 like '%abc%'。

  • STARTWITH : 代表sql中的 like,且會(huì)在查詢內(nèi)容后加上通配符,如 like 'abc%'。

  • ENDWITH : 代表sql中的 like,且會(huì)在查詢內(nèi)容后前上通配符,如 like '%abc'。

  • GT : 代表sql中的 >。

  • LT : 代表sql中的 <。

  • GTE : 代表sql中的 >=。

  • LTE : 代表sql中的 <=。

  • IN : 代表sql中的 in。

字段類型后綴

  • String:默認(rèn)類型,不指定類型則默認(rèn)為該類型。

  • Integer

  • Long

  • Float

  • Double

  • BigDecimal

  • BigInteger

  • Boolean

  • Date

  • Timestamp

Controller

package com.jspxcms.plug.web.back;

public class ResumeController {
    @RequiresPermissions("plug:resume:list")
    @RequestMapping("list.do")
    public String list(@PageableDefault(sort = "id", direction = Direction.DESC) Pageable pageable,
                       HttpServletRequest request, org.springframework.ui.Model modelMap) {
        Integer siteId = Context.getCurrentSiteId();
        // 獲取`search_`開頭的查詢字段
        Map<String, String[]> params = Servlets.getParamValuesMap(request, Constants.SEARCH_PREFIX);
        Page<Resume> pagedList = service.findAll(siteId, params, pageable);
        modelMap.addAttribute("pagedList", pagedList);
        return "plug/resume/resume_list";
    }

在Controller中需要獲取search_開頭的查詢參數(shù):Map<String, String[]> params = Servlets.getParamValuesMap(request, Constants.SEARCH_PREFIX);

Service

package com.jspxcms.plug.service.impl;

public class ResumeServiceImpl implements ResumeService, SiteDeleteListener {
    public Page<Resume> findAll(Integer siteId, Map<String, String[]> params, Pageable pageable) {
        return dao.findAll(spec(siteId, params), pageable);
    }

    private Specification<Resume> spec(final Integer siteId, Map<String, String[]> params) {
        // 解析頁面?zhèn)鬟f過來的params參數(shù)
        Collection<SearchFilter> filters = SearchFilter.parse(params).values();
        final Specification<Resume> fsp = SearchFilter.spec(filters, Resume.class);
        Specification<Resume> sp = new Specification<Resume>() {
            public Predicate toPredicate(Root<Resume> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                // 此處可以增加額外查詢條件。屬于JPA的用法,具體請查看JPA文檔。
                Predicate pred = fsp.toPredicate(root, query, cb);
                if (siteId != null) {
                    pred = cb.and(pred, cb.equal(root.get("site").<Integer>get("id"), siteId));
                }
                return pred;
            }
        };
        return sp;
    }
}

查詢解析類: com.jspxcms.common.orm.SearchFilter。

到此,相信大家對“jspXCMS頁面動(dòng)態(tài)查詢怎么實(shí)現(xiàn)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI