水晶报表 jar包版本过低_工具类学习-UReport报表设计器整合
dada-report報(bào)表整合UReport報(bào)表設(shè)計(jì)器工具
結(jié)合日常工作和學(xué)習(xí)實(shí)踐,針對(duì)傳統(tǒng)報(bào)表子站面臨的問題,嘗試借助UReport報(bào)表設(shè)計(jì)器解決
1.可在現(xiàn)有工程基礎(chǔ)上引入U(xiǎn)report2報(bào)表設(shè)計(jì)器
Ureport報(bào)表設(shè)計(jì)器是一個(gè)基于WEB的在線報(bào)表設(shè)計(jì)器,其具有良好的界面設(shè)計(jì)和強(qiáng)大的報(bào)表設(shè)計(jì)功能,支持報(bào)表多種格式導(dǎo)出(分頁)、報(bào)表通用性設(shè)計(jì)等,Ureport2支持簡單、復(fù)雜報(bào)表的設(shè)計(jì),能夠很好地嵌合實(shí)際業(yè)務(wù)需求,其報(bào)表設(shè)計(jì)可通過純sql或者是配置的方式實(shí)現(xiàn),以此可針對(duì)不同的人員進(jìn)行管理。
2.針對(duì)多租戶、復(fù)雜報(bào)表設(shè)計(jì)
Ureport2可在工程中自定義報(bào)表存儲(chǔ)器和數(shù)據(jù)源,在代碼邏輯層模擬實(shí)現(xiàn)多租戶概念(不同的租戶訪問不同的報(bào)表存儲(chǔ)器、數(shù)據(jù)源信息)
3.現(xiàn)存問題
a.學(xué)習(xí)成本
將UReport報(bào)表設(shè)計(jì)器整合到已有項(xiàng)目并非一件難事,只需要通過簡單的配置便可完成,主要的工作量在于后期報(bào)表的設(shè)計(jì)、維護(hù),以及UReport2報(bào)表設(shè)計(jì)器的學(xué)習(xí)需要耗費(fèi)一定的時(shí)間和精力,需要開發(fā)人員了解報(bào)表設(shè)計(jì)的流程、原理,掌握排查報(bào)表設(shè)計(jì)錯(cuò)誤的方法,熟練應(yīng)用。
b.與實(shí)際業(yè)務(wù)整合
現(xiàn)有報(bào)表子站中的存量報(bào)表數(shù)量較多,如果所有的報(bào)表都要重新進(jìn)行設(shè)計(jì)、維護(hù),將是一個(gè)巨大的工作量。
UReport2僅僅是一個(gè)報(bào)表設(shè)計(jì)器,如果要結(jié)合需求實(shí)現(xiàn)多租戶概念,相應(yīng)需要額外對(duì)應(yīng)的維護(hù)頁面與接口設(shè)計(jì)
針對(duì)大數(shù)據(jù)量數(shù)據(jù)處理還存在一定的問題,其中涉及緩存概念,有時(shí)候處理特大數(shù)據(jù)量的時(shí)候后臺(tái)報(bào)錯(cuò),考慮需要深入U(xiǎn)Report源碼分析或者是相關(guān)配置調(diào)整;且其提供的圖形統(tǒng)計(jì)圖顯示相對(duì)EChart而言并不太友好。
從這段時(shí)間的學(xué)習(xí)來看Ureport是比較方便且功能強(qiáng)大的開源插件,其與實(shí)際業(yè)務(wù)的整合、數(shù)據(jù)的處理還需要時(shí)間的驗(yàn)證,畢竟還需要考慮額外諸多因素,在后續(xù)的學(xué)習(xí)中會(huì)考慮進(jìn)一步完善
以下簡單提供本人在畢設(shè)中使用Ureport的一些學(xué)習(xí)筆記參考,個(gè)人建議可借助網(wǎng)絡(luò)資源去結(jié)合學(xué)習(xí)會(huì)比較好理解:https://www.w3cschool.cn/ureport/
SSM框架整合UReport報(bào)表設(shè)計(jì)器
參考鏈接:
https://www.w3cschool.cn/ureport/
整合過程分析
1.在pom.xml文件中引入相關(guān)依賴
<dependency>完整pom.xml參考配置:
<project2.在web.xml文件中配置UReport的Servlet
<servlet>3.引入U(xiǎn)Report相關(guān)的配置文件
有三種方式實(shí)現(xiàn)配置文件引入:根據(jù)實(shí)際工程搭建的情況靈活選擇引入的方式
方式1:直接在web.xml中加載ureport-console-context.xml文件(針對(duì)普通的Maven工程配置,沒有采用spring文件)
<listener>方式2:在已有的spring配置文件中導(dǎo)入數(shù)據(jù)
<import方式3:如果沒有spring配置文件,直接創(chuàng)建一個(gè)context.xml中
<?xml version="1.0" encoding="UTF-8"?>此處對(duì)已有的SSM項(xiàng)目整合做說明:
無論是以上哪種方式實(shí)現(xiàn),必須保證在web.xml需要加載相應(yīng)的spring配置文件,否則項(xiàng)目在啟動(dòng)的時(shí)候就會(huì)報(bào)視圖解析失敗,沒有相應(yīng)的designer
在整合啟動(dòng)的過程中可能由于maven相關(guān)jar包沒有正常導(dǎo)入,導(dǎo)致ureport依賴的相關(guān)jar包非正常導(dǎo)入,項(xiàng)目啟動(dòng)報(bào)錯(cuò)(刪除maven倉庫的內(nèi)容,重新導(dǎo)入jar包)
以下簡單對(duì)整合過程中可能遇到的問題做簡單的說明
問題1:指定屬性無法找到(是由于在整合的過程中Ureport報(bào)表設(shè)計(jì)器需要指定的屬性并沒有在自己搭建的工程中指定,因而報(bào)錯(cuò))
啟動(dòng)的時(shí)候如果報(bào)找不到指定的屬性:則需要在屬性配置的時(shí)候需要不存在(未配置)的屬性(在applicationContext-dao.xml、springmvc.xml下加載了屬性文件,添加屬性忽略掉沒有定義的屬性查找),報(bào)錯(cuò)內(nèi)容如下所示
針對(duì)spring配置文件處理:
針對(duì)普通maven工程處理:
配置屬性說明:Ureport有自定義的配置屬性,這些配置屬性是與報(bào)表存儲(chǔ)、設(shè)計(jì)相關(guān)的,具體內(nèi)容需要根據(jù)實(shí)際的業(yè)務(wù)需求去自行配置,如果不需要?jiǎng)t在代碼邏輯層對(duì)業(yè)務(wù)流轉(zhuǎn)進(jìn)行控制即可
問題2:404或指定designer設(shè)計(jì)器不存在
在整合的ssm中配置ureport出錯(cuò),通過鏈接訪問數(shù)據(jù)的時(shí)候無法找到指定的頁面,初步考慮路徑配置,之后查看web.xml配置,發(fā)現(xiàn)在之前的前端控制器配置中,默認(rèn)攔截了所有的請(qǐng)求,因此在請(qǐng)求的時(shí)候直接被dada-report這個(gè)前端控制器攔截,但dada-report這個(gè)控制器下并沒有指定的ureport相關(guān)的內(nèi)容存在,因此會(huì)報(bào)404訪問路徑錯(cuò)誤或者是designer報(bào)表設(shè)計(jì)器不存在的問題,此處需要對(duì)dada-report攔截的內(nèi)容做限制,參考前端控制器攔截(攔截說明、攔截順序、執(zhí)行順序)
原始配置:
直接配置如下所示,但如果出現(xiàn)designer視圖不存在,考慮是相應(yīng)的文件沒有加載進(jìn)去,因?yàn)樵趕pringmvc.xml中加載了有關(guān)的ureport2配置文件,因此要在初始化加載spring容器的時(shí)候?qū)?duì)應(yīng)的springmvl.xml配置文件進(jìn)行加載,否則無法找到相應(yīng)內(nèi)容,出現(xiàn)如下所示錯(cuò)誤
要么就設(shè)置Servlet默認(rèn)啟動(dòng)的時(shí)候加載配置文件
實(shí)際SSM整合說明如下:
依賴配置:添加ureport相關(guān)的依賴jar包
為了避免配置文件混亂,也避免改動(dòng)原有ssm配置,此處單獨(dú)在resources目錄下創(chuàng)建一個(gè)文件夾ureport存放ureport-custom-context.xml配置文件以編輯相關(guān)的ureport配置,并在web.xml中配置相應(yīng)的全局參數(shù)(必須在context-param中配置加載文件)
配置完成,啟動(dòng)項(xiàng)目,訪問鏈接:http://localhost:8084/ureport/designer
Ureport報(bào)表設(shè)計(jì)器顯示如下:
可以適當(dāng)了解web.xml各個(gè)參數(shù)配置的含義:
完成配置,根據(jù)W3CSchoool等相關(guān)教程完成業(yè)務(wù)和報(bào)表工具的整合,以下簡單根據(jù)教程完成業(yè)務(wù)流程簡單實(shí)現(xiàn)
https://www.w3cschool.cn/ureport/ureport-y4op2han.html
測試的時(shí)候如果出現(xiàn)按鈕點(diǎn)擊無反應(yīng),則可能是彈出式窗口被瀏覽器攔截,只需要允許彈出即可,或可直接通過url直接訪問
通用報(bào)表設(shè)計(jì)整合
無論是機(jī)構(gòu)、還是平臺(tái)報(bào)表存儲(chǔ)器,此處操作的表字段都是統(tǒng)一的,因此此處做一個(gè)調(diào)整,設(shè)置通用的方法將重復(fù)的內(nèi)容統(tǒng)一起來,用不同的字段標(biāo)識(shí)進(jìn)行劃分,由前臺(tái)頁面?zhèn)魅霐?shù)據(jù)限定相應(yīng)的標(biāo)準(zhǔn),不需要重復(fù)操作代碼
a.創(chuàng)建指定數(shù)據(jù)表結(jié)構(gòu)(字段需保持一致)
存儲(chǔ)報(bào)表文件、數(shù)據(jù)源配置文件(概念上區(qū)分,實(shí)際內(nèi)容基本一致)
機(jī)構(gòu)相關(guān)存儲(chǔ)器:ureport_file、ureport_data_source_file、
平臺(tái)公共存儲(chǔ)器:ureport_backup、ureport_data_source_backup
保持?jǐn)?shù)據(jù)字段相應(yīng)一致,主要包括file_id(主鍵)、file_name(文件名稱)、file_content(文件內(nèi)容)三個(gè)基本字段,具體其余字段的設(shè)計(jì)則根據(jù)實(shí)際工程需求進(jìn)行擴(kuò)展。
表字段:
b.創(chuàng)建通用的實(shí)體類UreportFileManager
UreportFileManager類作為通用的實(shí)體類,使得在dao層只需要指定需要操作的表名tableName便可實(shí)現(xiàn)對(duì)不同的數(shù)據(jù)表進(jìn)行操作,UreportFileManager基本結(jié)構(gòu)定義需要與相應(yīng)數(shù)據(jù)表的屬性一一對(duì)應(yīng)。
Model實(shí)體:
Mapper層查找參數(shù)設(shè)置:
c.通用mapper方法實(shí)現(xiàn)
為了實(shí)現(xiàn)mapper方法操作的通用性,引入U(xiǎn)reportFileSearchParam類用于封裝操作參數(shù),其主要包括操作表名tableName、操作實(shí)體ureportFileManager以及與報(bào)表文件數(shù)據(jù)庫實(shí)體相對(duì)應(yīng)篩選參數(shù)。
UreportFileManagerMapper接口通過接收searchParam指定的參數(shù)組合,操作指定的報(bào)表文件存儲(chǔ)器,實(shí)現(xiàn)以參數(shù)配置去訪問不同的數(shù)據(jù)庫并與UReport報(bào)表引擎進(jìn)行數(shù)據(jù)交互,從而間接減少代碼設(shè)計(jì)的冗余量,并便于報(bào)表存儲(chǔ)器的不限量擴(kuò)展。針對(duì)報(bào)表的管理與權(quán)限的控制則考慮在同一個(gè)數(shù)據(jù)庫中劃分不同的區(qū)域用以區(qū)分不同的機(jī)構(gòu)、不同的部門所訪問的存儲(chǔ)空間不同,在mapper層借助searchParam指定篩選條件,提供相應(yīng)的接口供相應(yīng)的Serivce層、存儲(chǔ)器Provider進(jìn)行調(diào)用
對(duì)應(yīng)mapper層配置:
對(duì)應(yīng)mapper.xml:
<?xml version="1.0" encoding="UTF-8"?>對(duì)應(yīng)狀態(tài)概念調(diào)整:
public_state:可理解為開發(fā)狀態(tài)(開發(fā)中0、已完結(jié)1),亦可理解為公開狀態(tài)(私有0、公開1)
visible_state:可見狀態(tài):針對(duì)部分已完結(jié)的報(bào)表,但想對(duì)用戶隱藏(0.不可見 1.可見)
Ureport報(bào)表工具學(xué)習(xí)
報(bào)表設(shè)計(jì)器訪問路徑:http://localhost:8084/ureport/designer
http://host[:port][/context-path]/ureport/designer
1.報(bào)表存儲(chǔ)存儲(chǔ)目錄配置
a.默認(rèn)的報(bào)表存儲(chǔ)目錄配置
默認(rèn)情況下:在項(xiàng)目的WEB-INF目錄有會(huì)自動(dòng)生成了一個(gè)名為“ureportfiles”目錄,這個(gè)目錄是UReport2提供的默認(rèn)的報(bào)表文件存儲(chǔ)目錄,也就是說默認(rèn)情況下,UReport將在項(xiàng)目的WEB-INF/ureportfiles目錄下存儲(chǔ)設(shè)計(jì)好的報(bào)表文件。
默認(rèn)報(bào)表存儲(chǔ)目錄
如果項(xiàng)目在Eclipse的開發(fā)環(huán)境運(yùn)行時(shí),采用的是jetty(比如run-jetty-run插件),那么就可以在項(xiàng)目的WEB-INF目錄下發(fā)現(xiàn)一個(gè)名為“ureportfiles”目錄。
但如果采用tomcat運(yùn)行項(xiàng)目,那么在WEB-INF目錄下就沒有一個(gè)名為“ureportfiles”目錄,原因是在Eclipse中運(yùn)行tomcat,tomcat需要?jiǎng)?chuàng)建一個(gè)臨時(shí)的工作目錄(該目錄一般位于workspace.metadata.pluginsorg.eclipse.wst.server.coretmp0wtpwebapps下),所以采用tomcat運(yùn)行項(xiàng)目,則需要到這個(gè)臨時(shí)的工作目錄下找到對(duì)應(yīng)的項(xiàng)目,再到這個(gè)項(xiàng)目的WEB-INF目錄下找到對(duì)應(yīng)的“ureportfiles”目錄
運(yùn)行搭建好的項(xiàng)目,打開報(bào)表設(shè)計(jì)器,點(diǎn)擊工具欄的保存按鈕,彈出如下所示窗口:
完成數(shù)據(jù)保存,刷新工程目錄則可看到對(duì)應(yīng)生成的數(shù)據(jù)信息
b.自定義報(bào)表存儲(chǔ)目錄配置
在項(xiàng)目對(duì)應(yīng)配置文件(參考整合過程,此處ureport獨(dú)立的spring配置文件在resource/ureport/ureport-custom-context.xml),相應(yīng)在其ureport目錄下創(chuàng)建一個(gè)ureport-custom.properties配置文件存放有關(guān)ureport配置的基本屬性
上面的Bean配置,實(shí)際上就是一個(gè)標(biāo)準(zhǔn)的
org.springframework.beans.factory.config.PropertyPlaceholderConfigurer類配置,通過配置PropertyPlaceholderConfigurer,可以實(shí)現(xiàn)加載Spring外部properties的作用,所以項(xiàng)目中已配置了PropertyPlaceholderConfigurer類,那么直接在這個(gè)類對(duì)應(yīng)的properties文件中添加對(duì)應(yīng)的UReport2屬性即可,而不需要額外配置config.properties文件
完成文件加載配置,在相應(yīng)的配置文件中配置屬性即可:
表示在E盤根下名為ureportfiles的目錄中存儲(chǔ)報(bào)表文件,需要注意的是,這里指定特定目錄時(shí),一定要保證這個(gè)目錄已存在,否則將不會(huì)被采用,比如上面的E盤下名為ureportfiles的目錄,就需要預(yù)先創(chuàng)建好。(指定文件目錄不存在,則提示如下)
c.自定義報(bào)表存儲(chǔ)器
UReport2默認(rèn)提供的名為“服務(wù)器文件系統(tǒng)”的報(bào)表存儲(chǔ)機(jī)制,實(shí)際上是實(shí)現(xiàn)了UReport2提供的com.bstek.ureport.provider.report.ReportProvider接口,該接口源碼如下:
package實(shí)現(xiàn)了ReportProvider接口后,只需要將實(shí)現(xiàn)類配置到Spring中,讓其成為一個(gè)標(biāo)準(zhǔn)的Spring Bean,這樣UReport2就會(huì)檢測到它而將其加載。下面是UReport2默認(rèn)提供的名為“服務(wù)器文件系統(tǒng)”的報(bào)表存儲(chǔ)器源碼:
package禁用系統(tǒng)提供的默認(rèn)報(bào)表存儲(chǔ)器
如果想使用自定義的報(bào)表存儲(chǔ)器,同時(shí)又不想再使用系統(tǒng)默認(rèn)提供的”服務(wù)器文件系統(tǒng)“的報(bào)表存儲(chǔ)器,那么只需要在相應(yīng)的報(bào)表配置文件(舉例:config.properties)文件中添加一個(gè)名為ureport.disableFileProvider屬性,將其值設(shè)置成true即可。
通過實(shí)現(xiàn)ReportProvider接口,可以開發(fā)出其它類型的報(bào)表存儲(chǔ)器,比如開發(fā)一個(gè)新的報(bào)表存儲(chǔ)器將報(bào)表文件存儲(chǔ)到數(shù)據(jù)庫、FTP等。
參考鏈接:
存儲(chǔ)報(bào)表至fastdfs:
https://blog.csdn.net/qq_35170213/article/details/80290797
存儲(chǔ)報(bào)表至數(shù)據(jù)庫:
https://blog.csdn.net/qq_35170213/article/details/80290425
自定義報(bào)表存儲(chǔ)器(數(shù)據(jù)庫)
<1>創(chuàng)建存儲(chǔ)報(bào)表信息的數(shù)據(jù)表
考慮實(shí)際需求,此處分別定義了CustomProvider報(bào)表存儲(chǔ)器用于測試,可結(jié)合實(shí)際業(yè)務(wù)球球完成數(shù)據(jù)表設(shè)計(jì),在基礎(chǔ)屬性的基礎(chǔ)上添加其他字段用于業(yè)務(wù)的邏輯擴(kuò)展
基本設(shè)計(jì):(僅供參考)
/** 建表 sql - 基本參考 */為契合業(yè)務(wù)需求,初步考慮數(shù)據(jù)表設(shè)計(jì)如下,具體的內(nèi)容根據(jù)實(shí)際需求做調(diào)整
<2>dao層/Mapper實(shí)現(xiàn)方法(基本的增刪改查)
此處提供一個(gè)通用的接口模板,具體實(shí)現(xiàn)的邏輯則需要根據(jù)實(shí)際的業(yè)務(wù)需求去設(shè)計(jì)
例如整合報(bào)表平臺(tái)的時(shí)候需要考慮實(shí)際報(bào)表權(quán)限的問題,因此需要考慮根據(jù)當(dāng)前用戶登錄的權(quán)限,所屬的機(jī)構(gòu)等進(jìn)行條件篩選
PS:由于報(bào)表存儲(chǔ)器的數(shù)據(jù)庫設(shè)計(jì)基本保持一致,由此可考慮創(chuàng)建一個(gè)通用的dao、service進(jìn)行控制,只需要通過前端頁面調(diào)用接口傳入數(shù)據(jù)表名tableName即可控制要操作的存儲(chǔ)器,由此可間接實(shí)現(xiàn)多租戶報(bào)表管理的概念(不同的租戶可訪問不同的報(bào)表存儲(chǔ)器)
-- 此處為簡單配置簡單演示單表操作
@Mapper具體的mapper.xml文件則需要參考實(shí)際表設(shè)計(jì)完成相應(yīng)配置,需要注意的是name、content這兩個(gè)屬性,這兩個(gè)屬性是報(bào)表設(shè)計(jì)的必要屬性,以下提供基本模板,實(shí)際內(nèi)容參考實(shí)際需求進(jìn)行調(diào)整
<?xml version="1.0" encoding="UTF-8" ?>報(bào)表內(nèi)容存儲(chǔ)的類型:
Mysql數(shù)據(jù)庫中表字段設(shè)置為‘mediumblob’類型
在mapper配置的數(shù)據(jù)類型為‘BLOB’、‘LONGARBINARY’
兩種類型在數(shù)據(jù)庫中存儲(chǔ)的形式:
報(bào)表存儲(chǔ)器設(shè)計(jì)
基于springboot的參考
import基于SSM的設(shè)計(jì)參考
public測試問題分析
創(chuàng)建xxxProvider繼承ureport的ReportProvider方法,完成報(bào)表存儲(chǔ)相關(guān)的操作
測試:數(shù)據(jù)能夠正常保存,但是卻無法正常訪問
分析,在保存報(bào)表文件信息,或者是打開報(bào)表文件的時(shí)候請(qǐng)求接口,報(bào)錯(cuò)。
理想結(jié)果:自動(dòng)封裝相應(yīng)存儲(chǔ)的數(shù)據(jù)信息
實(shí)際結(jié)果:只封裝了第一個(gè)定義的存儲(chǔ)器,隨后報(bào)如下錯(cuò)誤
(查看數(shù)據(jù)庫mapper配置!!)
一開始考慮是多個(gè)報(bào)表存儲(chǔ)器沖突導(dǎo)致的問題,之后測試無論是啟用或禁用服務(wù)默認(rèn)報(bào)表存儲(chǔ)器還是出現(xiàn)同樣的問題,數(shù)據(jù)庫訪問也沒有看見明顯的錯(cuò)誤,隨后查閱代碼發(fā)現(xiàn)問題所在,由于一開始考慮機(jī)構(gòu)報(bào)表存儲(chǔ)器和平臺(tái)備份報(bào)表存儲(chǔ)器是類似的,直接復(fù)制粘貼代碼,后期改動(dòng)沒有注意到一些細(xì)節(jié)性的問題,設(shè)置斷點(diǎn)也無法找到明顯的錯(cuò)誤點(diǎn)(點(diǎn)擊的時(shí)候加載就報(bào)錯(cuò),無法通過設(shè)置斷點(diǎn)查找出錯(cuò)問題),仔細(xì)查看報(bào)錯(cuò)信息,發(fā)現(xiàn)問題所在
可以看到保存信息顯示兩條sql語句查詢的結(jié)果不同,前者正常查找數(shù)據(jù),而后者查找數(shù)據(jù)到“Parameters:”(參數(shù)沒有正常傳遞)則異常結(jié)束關(guān)閉數(shù)據(jù)庫連接,并沒有正常的返回,網(wǎng)上查閱輸出流格式?jīng)_突,具體原因并不明確,考慮是報(bào)表內(nèi)容存儲(chǔ)格式問題,由mybatis逆向工程生成的mediumblob對(duì)應(yīng)的是LONGVARBINARY,而網(wǎng)上參考是BLOB,修正后再次測試數(shù)據(jù)方能正常顯示!!由此考慮報(bào)表內(nèi)容存儲(chǔ)格式導(dǎo)致出錯(cuò)!!(具體可以參考相關(guān)鏈接了解LONGVARBINARY與BLOB的區(qū)別)
以上描述的問題均為mapper配置文件出現(xiàn)問題導(dǎo)致,在配置mapper文件時(shí)需要注意mapper層接口和相應(yīng)配置文件的名稱、方法名意義對(duì)應(yīng),需要注意方法的定義(入?yún)?、出?#xff09;,需要注意參數(shù)定義的類型(文本型字符串需要考慮數(shù)據(jù)定義的類型要相對(duì)應(yīng))
自定義報(bào)表存儲(chǔ)器(ftp-待定)
參考鏈接:https://blog.csdn.net/qq_35170213/article/details/80290797
2.數(shù)據(jù)源配置
打開UReport2的報(bào)表設(shè)計(jì)器,可以看到UReport2提供了三種類型的報(bào)表數(shù)據(jù)源,如下圖所示:三種類型的數(shù)據(jù)源分別是直接連接數(shù)據(jù)庫,Spring Bean以及通過實(shí)現(xiàn)com.bstek.ureport.definition.datasource.BuildinDatasource接口提供的內(nèi)置數(shù)據(jù)源。
配置1:直連數(shù)據(jù)庫
直接連接數(shù)據(jù)庫比較簡單,就是在項(xiàng)目的classpath中添加好相應(yīng)數(shù)據(jù)庫的驅(qū)動(dòng)Jar包后,在彈出的窗口中配置數(shù)據(jù)源連接信息即可,如下圖所示:在頁面用數(shù)據(jù)源配置鏈接數(shù)據(jù)庫注意,不要刷新瀏覽器,刷新之后鏈接會(huì)清空
點(diǎn)擊測試連接,可以看到對(duì)應(yīng)目錄下生成了相應(yīng)的數(shù)據(jù)源,右鍵選擇需要操作的數(shù)據(jù)源可進(jìn)行“添加數(shù)據(jù)集、編輯、刪除操作”
根據(jù)相應(yīng)的數(shù)據(jù)集配置相關(guān)的數(shù)據(jù):
如果連接測試失敗:查看失敗原因,依次進(jìn)行查找
Maven引入Oracle驅(qū)動(dòng)依賴
(在pom.xml文件中添加oracle驅(qū)動(dòng)maven依賴存在一定的問題,可參考鏈接了解相關(guān)內(nèi)容https://blog.csdn.net/erlian1992/article/details/74279106)
由于Oracle數(shù)據(jù)庫JDBC驅(qū)動(dòng)包的使用的JDK版本有所區(qū)別,一定要下載對(duì)應(yīng)的JDK版本的Oracle數(shù)據(jù)庫JDBC驅(qū)動(dòng),JDK1.5的選擇ojdbc.jar驅(qū)動(dòng)包,如果是JDK1.6及以上版本的選擇ojdbc6.jar驅(qū)動(dòng)包,如果JDK環(huán)境是JDK1.8,那么選擇ojdbc6.jar驅(qū)動(dòng)包。
方式1:可以通過在官網(wǎng)下載相應(yīng)的jar包:
https://www.oracle.com/technetwork/database/application-development/jdbc/downloads/index.html
方式2:如果本地安裝了oracle數(shù)據(jù)庫,則可在指定目錄查找到相應(yīng)的ojdbc6.jar(其路徑為對(duì)應(yīng)安裝目錄)E:OracleappAdministratorproduct11.2.0dbhome_1jdbclibojdbc6.jar)
接下來就是手動(dòng)向Maven的本地倉庫中添加Oracle數(shù)據(jù)庫的JDBC驅(qū)動(dòng)依賴。安裝的前提是你的電腦必須安裝了Maven,并且配置了Maven環(huán)境變量(參考maven配置)通過cmd窗口(或Eclipse的Maven插件、IDEA的Terminal)執(zhí)行命令(雖然使用的工具不同,但是指定的文件位置和Maven坐標(biāo)都是一樣的)
需要注意的是如果是使用方式2,需要將相關(guān)的ojdb6.jar包放到其他文件夾中,不要在oracle安裝目錄下直接執(zhí)行指令,可能會(huì)出現(xiàn)Oracle拒絕訪問的情況
此處用eclipse的maven插件實(shí)現(xiàn)(Terminal)
$ mvn install:install -file -Dfile=F:jarojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar(根據(jù)實(shí)際調(diào)整路徑)
進(jìn)入到指定的目錄下直接執(zhí)行:
$ mvn install:install-file -Dfile=ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar
執(zhí)行完成之后可以看到對(duì)應(yīng)的mvn安裝倉庫有相應(yīng)的資源生成:
完成jar導(dǎo)入到本地倉庫之后,則可在項(xiàng)目中添加使用oracle相關(guān)依賴(添加的依賴版本需要與指定的數(shù)據(jù)(導(dǎo)入到maven本地倉庫時(shí)的依賴定義)一致),如果依賴引入失敗,查看對(duì)應(yīng)的定義的版本、依賴是否一致
<!-- 添加oracle驅(qū)動(dòng)依賴 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
配置2:SpringBean數(shù)據(jù)源
Spring Bean類型的數(shù)據(jù)源可以選擇Spring上下文中定義好的一個(gè)Bean來作為數(shù)據(jù)源,點(diǎn)擊
圖標(biāo),在彈出的窗口中輸入數(shù)據(jù)源名稱及要采用的Bean的ID,如下圖所示:
保存后,就可以在這個(gè)數(shù)據(jù)源下添加具體的數(shù)據(jù)集,添加方法就是在這個(gè)數(shù)據(jù)源下右鍵,在彈出的菜單中選擇添加數(shù)據(jù)集,在彈出的窗口中定義數(shù)據(jù)集名稱、對(duì)應(yīng)的方法名以及返回對(duì)象類型,如下圖所示:
(如果springBean中沒有指定id的bean兌現(xiàn)個(gè),此處在添加數(shù)據(jù)集,選擇方法的時(shí)候相應(yīng)報(bào)錯(cuò)-空指針異常,指定的bean對(duì)象不存在)
在Spring bean數(shù)據(jù)集配置中,方法名我們可以點(diǎn)擊右側(cè)的“選擇方法”按鈕來選擇當(dāng)前Bean對(duì)應(yīng)的類中定義的方法,但這里對(duì)方法的要求是:方法必須要有三個(gè)參數(shù),依次是String,String,Map,比如我們上面定義的testBean里就包含兩個(gè)合法的方法,如下所示:
對(duì)于一個(gè)合法的Bean數(shù)據(jù)集方法要有三個(gè)參數(shù),分別是String,String,Map,依次對(duì)應(yīng)數(shù)據(jù)源名稱、數(shù)據(jù)集名稱以及外部傳入的參數(shù)Map,Bean的方法只有是這種結(jié)構(gòu)才可以進(jìn)行選擇。對(duì)于數(shù)據(jù)集方法的返回值,目前來說可以支持兩種類型,一種是我們TestBean中返回的Map<String,Object>類型的List集合;另一種就是返回一個(gè)POJO類型的List集合,比如像下面的方法: 在上面的示例方法中,返回的就是User對(duì)象集合,這里的User對(duì)象,就是一個(gè)普通的POJO對(duì)象。(提供示例可以通過SpringBean自定義相關(guān)數(shù)據(jù)實(shí)現(xiàn))
參考上述介紹,設(shè)置了如下數(shù)據(jù)配置:
在dada-report下創(chuàng)建com.dada.report.datasource包,創(chuàng)建相應(yīng)的xxxBean類,并在指定的ureport配置文件中配置bean對(duì)象(或者是直接通過@Component注解進(jìn)行定義)
package配置完成,啟動(dòng)項(xiàng)目,再次填寫數(shù)據(jù)并點(diǎn)擊保存按鈕,能夠看到相應(yīng)的SpringBean數(shù)據(jù)配置完成,相應(yīng)的會(huì)返回相關(guān)的方法
選擇相應(yīng)數(shù)據(jù)源配置,返回相應(yīng)為數(shù)據(jù)類型(如果不配置則需要手動(dòng)添加字段)
配置3:內(nèi)置數(shù)據(jù)源
內(nèi)置數(shù)據(jù)源要求實(shí)現(xiàn)BuildinDatasource接口,同時(shí)將BuildinDatasource接口實(shí)現(xiàn)類配置到Spring即可,BuildinDatasource接口源碼如下:
此處測試參考代碼如下:
方式1:借助JDBCUtils工具類(自定義)獲取數(shù)據(jù)源
package}
在ureport配置文件中配置dataSource對(duì)象:
方式2:通過spring管理DataSource數(shù)據(jù)源(以注解方式獲取數(shù)據(jù)源連接)
package在ureport配置文件中配置dataSource對(duì)象:
多數(shù)據(jù)源配置問題:
在通過xml配置文件配置的時(shí)候,使用@Autowired注解,其按住奧byType自動(dòng)植入,但如果文中配置兩個(gè)相同類型的dataSource,則在項(xiàng)目啟動(dòng)加載spring自動(dòng)注入的時(shí)候會(huì)報(bào)錯(cuò)
org因此在配置注解的時(shí)候需要明確注入的是哪個(gè)對(duì)象(可以參考spring注解說明,了解每個(gè)注解之間的異同,參考鏈接:https://www.cnblogs.com/think-in-java/p/5474740.html)
@Resource的作用相當(dāng)于@Autowired,只不過@Autowired按照byType自動(dòng)注入
BuildinDatasource接口實(shí)現(xiàn)類配置到Spring中后,UReport2會(huì)自動(dòng)檢測到,完成配置啟動(dòng)測試,在報(bào)表設(shè)計(jì)器中,點(diǎn)擊數(shù)據(jù)源頁簽中的
按鈕,在彈出的窗口中就可以選擇定義好的內(nèi)置數(shù)據(jù)源,如下圖所示:
查看配置是否正確,可通過右鍵選擇添加數(shù)據(jù)集,如果數(shù)據(jù)正常顯示則連接正常,但如果出現(xiàn)“數(shù)據(jù)源不存在”或“后臺(tái)空指針異?!眲t說明數(shù)據(jù)源配置存在問題,需要進(jìn)行修改調(diào)整
數(shù)據(jù)源配置方法說明
在數(shù)據(jù)源中有三個(gè)選擇:
服務(wù)器啟動(dòng)期間數(shù)據(jù)源配置是有效,當(dāng)服務(wù)器重啟后數(shù)據(jù)源配置并不保存,除卻在spring配置完成的springBean、內(nèi)置數(shù)據(jù)源數(shù)據(jù)是在服務(wù)器啟動(dòng)的時(shí)候便加載,直接連接數(shù)據(jù)源信息不會(huì)保存,三種不同的數(shù)據(jù)源連接方式創(chuàng)建數(shù)據(jù)保存到指定的xml,重啟服務(wù)器后再次加載該模板數(shù)據(jù)也不會(huì)丟失(基本的配置在xml文件中已做存儲(chǔ))
數(shù)據(jù)源直接連接:在報(bào)表數(shù)據(jù)多的情況下如果環(huán)境替換則難以維護(hù)
spring bean數(shù)據(jù)源:需要指定spring 中 datasource的bean Id,其會(huì)在IOC容器中獲取!
內(nèi)置數(shù)據(jù)源:在spring配置該數(shù)據(jù)源對(duì)象,即需要?jiǎng)?chuàng)建一個(gè)類,其實(shí)現(xiàn)
com.bstek.ureport.definition.datasource.BuildinDatasource接口,封裝數(shù)據(jù)源信息
3.報(bào)表的基本使用
參考鏈接:
https://www.w3cschool.cn/ureport/
UReport2教學(xué)視頻:http://pan.baidu.com/s/1boWTxF5,密碼:98hj
4.報(bào)表設(shè)計(jì)器與業(yè)務(wù)結(jié)合
在項(xiàng)目中整合報(bào)表設(shè)計(jì)器之后,便可通過相關(guān)url完成報(bào)表數(shù)據(jù)的引用,將其與實(shí)際業(yè)務(wù)進(jìn)行整合,以下簡單說明ureport相關(guān)報(bào)表設(shè)計(jì)器的url說明
報(bào)表相關(guān)url介紹
報(bào)表設(shè)計(jì)器:http://host[:port][/context-path]/ureport/designer
報(bào)表預(yù)覽:http://host[:port][/context-path]/ureport/preview?_u=報(bào)表名稱
預(yù)覽正在設(shè)計(jì)中的報(bào)表注意事項(xiàng):在預(yù)覽正在設(shè)計(jì)器中設(shè)計(jì)的報(bào)表時(shí)(也就是_u=p),UReport2會(huì)在點(diǎn)擊設(shè)計(jì)器工具欄
圖標(biāo)時(shí),將設(shè)計(jì)中的報(bào)表模版信息提交到服務(wù)器,存放于當(dāng)前用戶的session中(用戶會(huì)話中),所以一旦用戶session失效,如果我們?cè)俅沃苯宇A(yù)覽_u=p類型報(bào)表時(shí),會(huì)看到“com.bstek.ureport.console.exception.ReportDesignException: Report data has expired,can not do preview.”這樣的錯(cuò)誤提示,表示存放于session中的正在設(shè)計(jì)器中設(shè)計(jì)的報(bào)表模版已經(jīng)失效,不能預(yù)覽。但如果_u的值是一個(gè)具體的報(bào)表名稱,則不存在這種問題,只有正在設(shè)計(jì)器中設(shè)計(jì)的報(bào)表模版在預(yù)覽中采用了這種機(jī)制,這點(diǎn)需要注意。
如果預(yù)覽的不是正在設(shè)計(jì)器中設(shè)計(jì)的模版,那么只需要給出具體的報(bào)表名稱即可,需要注意的是,這里的報(bào)表名稱要以其ReportProvider中要求的前綴開始,比如http://localhost:8080/ureport2-demo/ureport/preview?_u=file:test.ureport.xml等。
在線打印:在UReport2的報(bào)表預(yù)覽頁面中,可以看到UReport2提供了三種在線打印方式,分別是直接HTML打印、直接PDF打印以及PDF在線預(yù)覽打印。這其中直接HTML打印是利用瀏覽器的HTML打印功能實(shí)現(xiàn),能用于普通的A4紙類型報(bào)表頁面的打印,同時(shí)它不能打印出報(bào)表中定義的頁眉頁腳,如果有定義的話。對(duì)于直接PDF打印以及PDF在線預(yù)覽打印是服務(wù)端向?yàn)g覽器中寫入PDF流,利用Chrome、Firefox、Edge這些瀏覽器可以在線顯示PDF功能實(shí)現(xiàn)的打印,這種是直接打印的PDF,所以可以應(yīng)付各種復(fù)雜報(bào)表紙張類型的打印輸出。
Firefox預(yù)覽PDF:在預(yù)覽PDF時(shí),Firefox不允許當(dāng)前frame外通過javascript調(diào)用其打印功能(目前來看可能是Firefox的Bug),所以我們需要手工點(diǎn)擊其frame內(nèi)部自帶的打印按鈕實(shí)現(xiàn)打印。
在代碼中使用報(bào)表
在UReport2當(dāng)中,我們可以使用ExportManager實(shí)現(xiàn)在業(yè)務(wù)代碼中導(dǎo)出各種類型的報(bào)表,ExportManager接口源碼如下:
package因?yàn)镋xportManager接口實(shí)現(xiàn)是配置在Spring當(dāng)中,所以要使用ExportManager接口,我們需要首先通過Spring的ApplicationContext取到ExportManager實(shí)例對(duì)象,我們可以通過ExportManager.BEAN_ID來取到對(duì)應(yīng)的Bean實(shí)例。
以下測試如何采用ExportManager導(dǎo)出HTML報(bào)表,并將報(bào)表內(nèi)容嵌入到一個(gè)JSP中。 首先需要采用報(bào)表設(shè)計(jì)器設(shè)計(jì)好一個(gè)報(bào)表模版文件,將其保存,比如報(bào)表模版保存后的文件名為demo.ureport.xml,然后在項(xiàng)目中創(chuàng)建一個(gè)JSP(這里之所以選擇JSP,是因?yàn)樗顬楹唵?#xff0c;可以保證所有的J2EE開發(fā)者都能看懂,實(shí)際使用時(shí)可能是MVC框架、Ajax等,但如果了解了在JSP中用法,其它的就簡單了),在JSP中輸入相應(yīng)代碼,導(dǎo)出Html報(bào)表,并將其寫入到JSP中,完整的JSP源碼如下:
預(yù)覽:http://localhost:8084/ureport/preview?_u=file:hhhhh.ureport.xml
在SSM配置基礎(chǔ)上添加相應(yīng)的jsp文件,完成配置啟動(dòng)服務(wù)器訪問測試:
http://localhost:8084/custom/report/page/other?url=report/testReport
考慮實(shí)際業(yè)務(wù)整合問題:
數(shù)據(jù)源配置問題
總結(jié)
以上是生活随笔為你收集整理的水晶报表 jar包版本过低_工具类学习-UReport报表设计器整合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么电脑不能打字_为什么不能用电脑验光
- 下一篇: service启动activity_「