99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

UReport2 參數(shù)

2023-01-05 16:03 更新
UReport2教學(xué)視頻http://pan.baidu.com/s/1boWTxF5,密碼:98hj

       參數(shù)指的是從報(bào)表外部傳入報(bào)表的值,在 UReport 2中,三種類(lèi)型的數(shù)據(jù)源都支持參數(shù)。直接連接數(shù)據(jù)庫(kù)和內(nèi)置數(shù)據(jù)庫(kù)連接兩種方式本質(zhì)上一樣,都是采用 SQL 方式從數(shù)據(jù)庫(kù)中獲取報(bào)表數(shù)據(jù),所以對(duì)于這種類(lèi)型的數(shù)據(jù)源參數(shù)傳遞只需要在 SQL 層面配置好相關(guān)參數(shù)即可;對(duì)于 spring bean 類(lèi)型的數(shù)據(jù)源,就更為簡(jiǎn)單,只需要在對(duì)應(yīng)在方法中獲取對(duì)應(yīng)的參數(shù)即可。我們首先來(lái)看看 SQL 取數(shù)據(jù)方式如何配置參數(shù)。

SQL數(shù)據(jù)集參數(shù)

       對(duì)于 SQL 方式數(shù)據(jù)集參數(shù)傳遞方式,實(shí)際上就是給 SQL 添加查詢(xún)條件,UReport2 中S QL 參數(shù)傳遞采用的是命名參數(shù)的方式,這點(diǎn)與 Spring中NamedParameterJdbcTemplate 中采用命名參數(shù)的寫(xiě)法完全一致,所以如果您用過(guò) Spring 中的 NamedParameterJdbcTemplate,那對(duì)命名參數(shù)一定很熟悉。

示例
說(shuō)明
select * from emp where dept_id=:deptId 查詢(xún)條件為 dept_id=:deptId,運(yùn)行時(shí)引擎將采用名為 deptId 的參數(shù)值來(lái)填充 SQL
select * from emp where age > :age and dept_id in (:deptIds) 這個(gè) SQL 中條件有兩個(gè),同樣運(yùn)行時(shí)引擎將嘗試從外部參數(shù)中獲取對(duì)應(yīng)的值來(lái)填充 SQL

       打開(kāi)報(bào)表設(shè)計(jì)器,添加一個(gè)數(shù)據(jù)庫(kù)連接方式數(shù)據(jù)源(直接連接數(shù)據(jù)庫(kù)或內(nèi)置數(shù)據(jù)庫(kù)連接兩種方式任選其一),添國(guó)一個(gè) SQL 數(shù)據(jù)集,即可在彈出的窗口中定義 SQL 及相關(guān)參數(shù)。

sql-dataset

       在我們定義好含有命名參數(shù)的 SQL 后,接下來(lái)我們需要,在下面的參數(shù)配置區(qū)域進(jìn)行配置 SQL 中用到的命名參數(shù),當(dāng)然如果你的 SQL 中沒(méi)用到命名參數(shù),那就不需要配置了。

參數(shù)各字段
說(shuō)明
參數(shù)名 對(duì)應(yīng)的命名參數(shù)名稱(chēng),比如上面的 deptId 等
數(shù)據(jù)類(lèi)型 當(dāng)前參數(shù)在數(shù)據(jù)庫(kù)中定義的數(shù)據(jù)類(lèi)型。UReport2 中對(duì)應(yīng)的數(shù)據(jù)類(lèi)型有六種,分別是:String、Integer、Float、Boolean、Date 和 List。
默認(rèn)值

當(dāng)前外部沒(méi)有為這個(gè)命名參數(shù)提供值的時(shí)候?qū)⒉捎眠@里提供的默認(rèn)值來(lái)填充 SQL。

還需要注意的是,如果 SQL 中有命名參數(shù),那么一定義配置好參數(shù)的默認(rèn)值,否則將無(wú)法為對(duì)應(yīng)的SQL數(shù)據(jù)集生成對(duì)應(yīng)的表字段。

關(guān)于參數(shù)的數(shù)據(jù)類(lèi)型要求配置參數(shù)時(shí)定義好參數(shù)的數(shù)據(jù)類(lèi)型, 是為了與數(shù)據(jù)庫(kù)中定義的字段的數(shù)據(jù)類(lèi)型匹配,在運(yùn)行時(shí)外部傳入的參數(shù)或在外部未傳入?yún)?shù)而采用的默認(rèn)值時(shí),引擎會(huì)根據(jù)參數(shù)配置的數(shù)據(jù)類(lèi)型將采用的數(shù)據(jù)值進(jìn)行自動(dòng)轉(zhuǎn)換,以期與目標(biāo)數(shù)據(jù)類(lèi)型吻合。比如,參數(shù)為日期類(lèi)型,外部可傳入對(duì)應(yīng)的日期類(lèi)型的對(duì)象或普通字符串,如果是字符串,要求是 yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss 格式,否則引擎將無(wú)法解析成日期對(duì)象,同樣參數(shù)類(lèi)型為 Date 的參數(shù)默認(rèn)值也必須是 yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss 格式的字符串。如果參數(shù)是 List 類(lèi)型,那么外部可以傳入一個(gè) List 對(duì)象,或一個(gè)以逗號(hào)分隔的字符串,如果是一個(gè)以逗號(hào)分隔的字符串,那么引擎將以逗號(hào)為分隔符,將字符串轉(zhuǎn)換成一個(gè) ArrayList 對(duì)象,List類(lèi)型的參數(shù)多用在存在 in 條件的 SQL 中。

       設(shè)計(jì)好帶有參數(shù)的報(bào)表后,我們可以直接預(yù)覽,默認(rèn)預(yù)覽顯示的數(shù)據(jù)將是參數(shù)配置時(shí)參數(shù)默認(rèn)值對(duì)應(yīng)的數(shù)據(jù),這時(shí)我們可以在預(yù)覽報(bào)表的 URL 后面手工添加對(duì)應(yīng)的參數(shù)名,以使報(bào)表呈現(xiàn)我們需要的數(shù)據(jù)。在URL后面添加參數(shù)是最簡(jiǎn)單、最直接的一種為帶參數(shù)的報(bào)表提供外部參數(shù)的方法,報(bào)表一旦檢測(cè)到外部有對(duì)應(yīng)的參數(shù)傳入,則不再取這個(gè)參數(shù)對(duì)應(yīng)的默認(rèn)值來(lái)填充 SQL。

       從2.0.9版本開(kāi)始,SQL 數(shù)據(jù)集中的 SQL 開(kāi)始支持表達(dá)式(表達(dá)式語(yǔ)法見(jiàn)5.表達(dá)式),參數(shù)格式為:${表達(dá)式},也就是說(shuō),在 ${} 中輸入的內(nèi)容引擎認(rèn)為是表達(dá)式,否則認(rèn)為是標(biāo)準(zhǔn) SQL。一旦在 ${} 中輸入表達(dá)式,引擎會(huì)嘗試進(jìn)行語(yǔ)法檢查。在 SQL 表達(dá)式中,我們可以對(duì)傳入?yún)?shù)進(jìn)行判斷,這樣就可以實(shí)現(xiàn)諸如當(dāng)有參數(shù)傳入 SQL 時(shí),就取該參數(shù)過(guò)濾后的結(jié)果集,如果沒(méi)有該參數(shù)傳入時(shí)則取所有數(shù)據(jù)集需求,示例如下圖所示:

sql-expr

表達(dá)式中返回SQL的注意事項(xiàng)我們?cè)谑褂帽磉_(dá)式返回SQL時(shí),如果SQL中包含單引號(hào)包裹的字符串,那么需要加上“\”來(lái)為單引號(hào)轉(zhuǎn)義,否則會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤,如下面的表達(dá)式:${ if(param("deptId")==null || param("deptId")==''){     return "select * from employee where dept_id=\'D11\'"; } }在上面的表達(dá)式中,return 后面的 SQL 中 dept_id=\'D11\' 就用來(lái)“\”為單引號(hào)轉(zhuǎn)義。

Spring Bean 數(shù)據(jù)源參數(shù)

       早在3.報(bào)表存儲(chǔ)與數(shù)據(jù)源配置一節(jié)中我們就介紹過(guò),要將一個(gè) Spring Bean 的方法定義某個(gè)數(shù)據(jù)集的數(shù)據(jù)來(lái)源,那么方法必須要有三個(gè)參數(shù),依次是 String,String,Map,最后一個(gè) Map 參數(shù)就是外部傳入報(bào)表的參數(shù)集合,UReport2 會(huì)將外部傳入的各種參數(shù)都收集到這個(gè) Map 中,我們只需要根據(jù)需求從 Map 中獲取即可。

public List<Map<String,Object>> loadReportData(String dsName,String datasetName,Map<String,Object> parameters){
    int salary=0;
    Object s=parameters.get("salary");
    if(s!=null){
        salary=Integer.valueOf(salary);
    }
    List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
    for(int i=0;i<1000;i++){
        int ss=RandomUtils.nextInt(10000)+i;
        if(ss<=salary){
            continue;
        }
        Map<String,Object> m=new HashMap<String,Object>();
        m.put("id", i);
        m.put("name", RandomStringUtils.random(10, true, false));
        m.put("salary", ss);
        list.add(m);
    }
    return list;
}

       在上面的代碼中,我們嘗試從 Map 中獲取名為 salary 的參數(shù),如果存在則采用這個(gè)參數(shù)。

查詢(xún)表單設(shè)計(jì)

       從 UReport2.2版本開(kāi)始,UReport 設(shè)計(jì)器提供了一個(gè)查詢(xún)表單設(shè)計(jì)器,通過(guò)這個(gè)設(shè)計(jì)器,可實(shí)現(xiàn)在網(wǎng)頁(yè)中對(duì)SQL里配置的參數(shù)參數(shù)配置相應(yīng)的查詢(xún)表單。具體做法就是我們首先需要配置一個(gè)SQL數(shù)據(jù)集,并為其配置相應(yīng)的查詢(xún)參數(shù),如下圖所示:

sql-params

       接下來(lái)點(diǎn)擊報(bào)表模版設(shè)計(jì)器工具欄上如下圖所示按鈕:

designer-form-tool

       點(diǎn)擊后就會(huì)彈出如下圖所示的表單設(shè)計(jì)器窗口,在這個(gè)窗口就進(jìn)行相應(yīng)的查詢(xún)表單設(shè)計(jì)即可:

form-d1

      設(shè)計(jì)器設(shè)計(jì)方式比較簡(jiǎn)單,那就是采用直接拖曳方式,將布局或輸入組件拖到畫(huà)布上即可。對(duì)于輸入類(lèi)型的組件來(lái)說(shuō),在將其拖曳到畫(huà)布后,可通過(guò)點(diǎn)擊將其選中,然后切換到"屬性"頁(yè)即可對(duì)這個(gè)輸入組件的屬性進(jìn)行調(diào)整,需要注意的是,所有的輸入組件都需要配置其綁定的查詢(xún)參數(shù),否則將 HTML 預(yù)覽頁(yè)將不能提交查詢(xún),如下圖所示:

form-binding

       這里要選擇的綁定查詢(xún)參數(shù),就是我們?cè)赟QL數(shù)據(jù)集里配置的參數(shù)查詢(xún),如果不配置,那么這里將無(wú)法選擇。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)