主頁 > 後端開發 > JasperReports+iReport在eclipse中的使用

JasperReports+iReport在eclipse中的使用

2020-09-21 22:57:43 後端開發

一、介紹

1)它可以PDF,HTML,XML等多種形式產生報表或動態報表,在新版本還支持CSV,XLS,RTF等格式的報表;
2)它按預定義的XML檔案來組織資料,來源多(如:關系資料庫,Java容器物件(collection,arrays)等);
報表的填充程序:
先產生報表設計物件->序列化該物件->存盤在磁盤或網路->產生XML檔案(表格資料),
表單的設計程序就是用定義于XML檔案中的Java運算式來實作報表的設計,
3)它帶資料一致性驗證;
4)報表引擎必須先接受資料(通過引數等多種形式)來產生報表,更多的是來自資料源,引擎直接接收用于填充表格的資料源物件,或者通過自身提供的JDBC連接物件來處理資料庫的資料;
5)報表最終要產生一個新的物件來進行填充操作,從而產生列印檔案物件,這也是存盤在磁盤或網路傳輸介質的序列化物件;
6)內置瀏覽器能直接查看結果,以PDF,HTML,XML匯出;
7)重要的類:
net.sf.jasperreports.engine.design.JasperDesign
其實體是用于報表產生的原始類;
net.sf.jasperreports.engine.design.JasperReport
表現了報表設計物件,是作為報表的編譯程序的結果而被實體化,是向報表中填充資料的準備,

二、結構

JasperReports用XML檔案來定義,約定用jrxml作為檔案的后綴名,

1)主要元素:

<jasperReport> 根元素
<title> 報表的標題
<pageHeader> 頁眉
<detail> 正文
<pageFooter> 頁腳
<band> 定義報表部件,以上所有元素都包含一個band元素作為其唯一子元素,

除了根元素,其余元素是可選的,

2)其編輯工具iReport在Eclipse3.2下的安裝程序

選單“幫助”->“軟體更新”->“查找并安裝”->“搜索要安裝的新功能部件”--(下一步)-->“新建遠程站點”,輸入以下內容:
名稱:JasperForge
URL:http://www.jasperforge.org/update
--(確定)-->“下一步”-->直至完成,

3)以JasperReports1.3.0版本為例,一個JasperReports專案需要如下jar包:

包名 說明
xml-apis.jar XML parser API
jasperreports-1.3.0.jar JasperReports API
commons-beanutils-1.7.jar   JavaBeans Utility classes
commons-collections-2.1.jar Collections framework extension classes
commons-digester-1.7.jar  classes for processing XML documents
commons-logging-1.0.2.jar  Logging classes
poi-2.0-final-20040126.jar   Jarkarta POI API to generate an Excel Document
itext-1.3.1.jar   PDF library

三、iReport介紹

1)iReport是為JasperReports設計的強大的,直觀的,易于使用的可視化報表設計器,為win32平臺撰寫,允許用戶可視化地編輯XML JasperDesign檔案,可以和其它資料庫進行JDBC通信,
再設計模板時可以以HTML,PDF,XML方式預覽,用它生成的檔案有.jrxml和.jasper兩種檔案,
.jrxml:是可視化編輯的xml檔案;
.jasper:經編譯后生成的類檔案,即報表模板檔案,

2)iReport的輸出格式
其預覽輸出格式有:PDF,HTML,CSV,JAVA2D,EXCEL,純文本,JRView,
注意:JRViewer是直接以C/S方式作為報表的輸出格式,在JFrame框架下輸出,

3)報表的動態物件變數、引數、欄位
欄位Fields:是從資料庫抽取出來的,在報表中出現的資料庫內容,$F
引數Parameters:你寫的應用需要提供給報表的入口, $P
變數Variables:報表中一些邏輯運算的表現, $V
每個物件的定義格式如下: $V{variablesName}

4)運行時需要.jasper檔案;編譯:把.jrxml->.jasper檔案,
靜態運行:靜態文本來運行,和資料源無關;
動態運行:帶資料源運行,

5)報表的結構
title、pageHeader、columnHeader、detail、columnFooter、pageFooter、summary、groupHeader、groupfooter,

6)在iReport中創建資料庫連接
(1)選單DourceSource -> Connections/DataSources -> ...new ->
(2)選單Build -> Set active connection -> 選擇 -> ... -> OK

7)在iReport中創建檔案
iReport工具是一個可視編輯器幫助創建JasperReports檔案,JasperReports是一個基于Java報表的引擎,
當你在iReport中創建一個報表,你實際上是對組態檔進行操作,告訴JasperReports應該怎樣建立Report,
三種檔案:
.jasper檔案:編譯的二進制檔案;
.jrxml檔案:報表的組態檔;
.pdf檔案:生成的pdf檔案,

8)報表格式化
在iReport上選擇報表的一個區域,將呈現藍色高亮顯示;
可用滑鼠拖曳來改變區域的尺寸,當誤操作時,用undo來恢復;
如選擇框變紅,則有錯誤,report將不能編譯;
改變字體或調整尺寸,選單“View”->“Element properties”->分三個選擇:
(1)Common選擇:尺寸,前景色/背景色,透明度,列印條件,位置屬性等;
(2)Font選擇:字體、大小、型別,PDF字體,加粗,斜體,下劃線,水平位置,垂直位置,PDF編碼,
注意:兩種字體:
     Font Name:將顯示在iReport設計器和JasperReports運行中;
     PDF font Name:將顯示在編譯后的PDF檔案中,
(3)Static Text:靜態文本,
想瀏覽元素時,看“View”->“Elements browser”;
一次選擇多個域,按“shift”鍵再用滑鼠點擊;
選單“View”->“Report Properties”報表屬性:
報表尺寸,單位,頁邊距,報表名,縱向Portrait/橫向Landscape,列寬,Spacing,標題作為新頁,Summary作為新頁,XML編碼(UTF-8),

9)使用Groups
選單“View”->“Report query” 可以查詢和修改SQL陳述句,

10)為report增加引數
(1)選單“View”->“Report Query”,修改SQL陳述句,如:加上 WHERE LAST_NAME=$P{LAST_NAME}
注意:引數用$P{}來封裝,
(2)定義引數
選單“View”->“Reports Parameters”
新建引數,如引數名為“LAST_NAME”,再指定引數的型別(如:String)
還可設定“預設值”和引數的“描述”
運行報表(預設),還可以傳遞引數方式:http://server/showReport?LAST_NAME=smith
選單“Build”->“Execute report(using active conn.)”

11)創建子報表
例子:一個報表包含另一個報表
(1)建立兩個報表;
(2)擴展master報表,增加一個subreport元素;
(3)雙擊subreport元素,設定其屬性,在Subreport(other)欄中,
Subreport Expression填入“c:\test2.jasper”(第二個表即子表的檔案名),點擊“Add”,增加/修改:“Subreport parameter name”和Default value expression值;(COUNTRY     $F{COUNTRY})
(4)對子表“Report query”->添加''where COUNTRY=${COUNTRY}''
(5)增加“Report parameters”,(COUNTRY,java.lang.String)
(6)編譯detail report;
(7)運行master report,

iReport支持Groovy腳本語言,可無需懂Java,

1、配置XML檔案
jasperreports的XML組態檔局域jasperreport.dtd檔案而來,

1)根元素jasperReport
其子元素有:報告的字體reportFont,引數parameter,查詢字串queryString,欄位field,變數variable,組group,標題title,頁眉pageHeader,列眉columnHeader,表明細detail,列腳columnFooter,頁腳pageFooter,
屬性有:列寬columnWidth,列間距columnSpacing,左邊距leftMargin,頂邊距topMargin,底邊距bottomMargin,

2)報表層字體含義reportFonts
無子元素;
屬性有:名字name,是否預設isFault,字體名fontName,字體大小size,是否粗體isBold,是否斜體isItalic,是否帶下劃線isUnderline,isStrikeThrough,PDF字體名pdfFontName,PDF編碼pdfEncoding,是否嵌入PDF(isPdfEmbedded),

3)用于產生報表的物件引數parameter,參考P${name}
其子元素有:ParameterDescription,defaultValueExpression
屬性有:name,class

4)從資料庫檢索資料的查詢SQL陳述句 queryString

5)包含于report中的資料庫表列欄位 field, 參考F${name}
其子元素有:variableExpression,initialValueExpression
屬性有:name,class

6)用在XML檔案中的變數 Variable   參考V${name}
其子元素有:variableExpression,initialValueExpression
屬性有:name,class

7)報表標題 title
其子元素有:band
無屬性

8)頁眉 pageHeader
其子元素有:band
無屬性

9)報表的列名 columnHeader
其子元素有:band
無屬性

10)指定的列值detail
其子元素有:band
無屬性

11)列尾columnFooter
其子元素有:band
無屬性

12)頁腳pageFooter
其子元素有:band
無屬性
注:在report中,一個band表示一個report節點,一個band元素包括:staticText(靜態文本)和textElement(文本元素)兩個元素,
常見報表模型:串列、分組、主從、嵌套、交叉、圖形、套打、分欄、填報,

2、創建報表

1)建立輸入源
InputStream input = new FileInputStream(new File("c:\\JasperReports\\catalog.xml"));
JasperDesign design=JRXmlLoader.load(Input);

2)創建物件
JasperReport report = JasperCompileManager.compileReport(design);

3)獲得JDBC連接從資料庫檢索資料
InitialContext initialContext = new InitialContext();
DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/OracleDBConnectionDS");
Connection conn = ds.getConnection();

4)產生可預覽、列印、輸出為其它格式的JasperPrint檔案
JasperPrint print = JasperFillManager.fillReport(report, parameters, conn);

5)引數處理
Map parameters = new HashMap();
parameters.put("ReportTitle", "PDF JasperReport");

6)輸出成XML,PDF,HTML,CSV,XLS(Excel)的任一種檔案,
OutputStream output = new FileOutputStream(new File("c:/JasperReports/catalog.pdf"))
JasperExportManager.exportReportToPdfStream(print,output);

3、JasperReports的安裝配置

1)JDK的安裝,注意JAVA_HOME環境變數;
2)要支持中文,需itext-1.3.1.jar和iTextAsian.jar包,加入CLASSPATH環境變數中;
3)安裝iReport,用iReport-1.3.0-windows-installer.exe安裝;
4)JasperReport不需任何配置,將其jar包(jasperreports-1.3.0.jar)放入CLASSPATH;
5)資料庫的JDBC驅動包,例如Sybase的驅動包為jconn6.jar,加入到CLASSPATH,

4、iReport的安裝配置

iReport如果不用其安裝檔案iReport-1.3.0-windows-installer.exe安裝,則需要配置,
iReport需Sun公司的JDK下的tools.jar,需拷貝到iReport的lib目錄下,
iReport初始化配置的組成:
(1)建立報表;
(2)選擇語言;
(3)加入到CLASSPATH,

四、Report Structure 報告的結構

本章描述報告的結構,可用的report物件和它們的屬性,這基本上是JasperReports的快速參考,

1、Expressions 運算式
運算式是JasperReports的核心特征,它是一個重要的機制,允許操縱和顯示報告資料,執行各種計算,自定義報告的外觀和報告物件的可視性,

1)一個典型的運算式
$F{LastName} + " " + $F{LastName}
一個JasperReports的運算式是以Java運算式為基礎的,再加上一些附加的語法,它允許參考引數、變數和欄位等,
比如說要參考一個名叫DATA的引數時,語法應為$P{PARAM_NAME},
對變數和欄位來說,其參考語法分別為$V{VAR_NAME}和$F{FIELD_NAME},
注意:在JasperReports的groovy腳本語言中,也同樣可以用$F,$P,$V參考引數、變數和欄位,

2)運算式的語法
(1)$F{FIELD}   參考名為FIELD的欄位;
(2)$V{VAR}     參考名為VAR的變數;
(3)$P{PARAM}   參考名為PARAM的引數;
(4)$P!{PARAM} 參考名為PARAM的引數;這個特殊的語法僅能用于report的查詢中,它允許插入引數的內容到查詢字串中,例如,它能被用于創建一個帶通過引數來指定WHERE條件的動態查詢,
$R{keyName}      在resource bundle中檢索帶keyName關鍵字的字串,
注意:運算式是用Java或Groovy寫成的,這意外著可以用Java強大的功能,如呼叫方法,允許構建無限復雜的運算式,還要注意,運算式的結果總是一個物件,

3)更多的運算式
(1)new Integer(Math.max($V{Price1},$V{Price2}))
(2)(new SimpleDateFormat("dd/MM/yyyy")).format($F{OrderDate})
(3)$F{SpecialOffer}.booleanValue()? $F{SpecialPrice} : $F{Price}

2、內建的函式
JasperReports提供了一套內建的函式用于report運算式中,這些函式盡管是內建的工具,還是可以在普通操作中執行它,
注意:目前這套函式很有限,在未來會得到擴展,

1)例:使用內建函式
msg("Total cost is {0}", $F{TOTAL})
msg("Matched {0} products out of {1}", $F{MATCHED}, $P{TOTAL})

2)內建的函式
(1)String str(String key);
從和report相聯系的resource bundle中得到給出的key的一個字串,這個函式的功能和使用$R{key}語法等價,
(2)String msg(String pattern, Object arg0);
建立一個帶給定的pattern和給定引數來指定其格式的java.util.MessageFormat物件,
(3)String msg(String pattern, Object arg0, Object arg1);
同上;
(4)String msg(String pattern, Object arg0, Object arg1, Object arg2);
同上,

3、Report 報告
Report是表現為報告模板的根物件,在報告執行期間,report模板和資料組合成最終的檔案,
報告的屬性有:
(1)Report Name 報告名;
(2)Units 報告的單位;有:像素Pixels,毫米Millimeters,厘米Centimeters和英寸Inches,
(3)Language 報告運算式使用的語言;目前有Java和Groovy兩種,
(4)Orientation 頁的方向;其可能值為水平Protrait和縱向Landscape,
(5)Page Width 以報告單位指定的頁寬;
(6)Page Height 以報告單位指定的頁高;
(7)Page Size 報告的尺寸,即為page width和page height,
(8)Left Margin 以報告單位指定的左邊頁邊距;
(9)Right Margin 以報告單位指定的右邊頁邊距;
(10)Top Margin 以報告單位指定的頂部頁邊距;
(11)Bottom Margin 以報告單位指定的底部頁邊距;
(12)Column Count 報告中的列數;
(13)Column Spacing 以報告單位指定的列邊距;
(14)Column Width 以報告單位指定的列寬;
(15)Print Order 填充列的順序;有垂直Vertical和水平Horizontal兩種,
(16)Float Column Footer 浮動列腳,指出是否在列底部或明細表最后或組腳進行列印;
(17)Default Font 預設字體;
(18)Default Style 預設風格;
(19)Scriptlet Class 腳本類,它必須是JRAbstractScriptlet類的子類,如果省略,將創建一個JRDefaultScriptlet的實體,
(20)Summary New Page 新頁的概要;
(21)Title New Page 新頁的標題;
(22)When No Data Print 無資料時的列印,有三個選擇:No Pages 表示0頁;Blank Page 空白頁;All Sections No Detail 除了detail section,其它的都列印,
(23)Query 查詢,用來檢索資料到報告中,
(24)Query Language 查詢語言,有五個值:SQL 用于JDBC資料源的查詢語言;HBM Hibernate用于Hibernate資料源的查詢語言;XPath 用于XML資料源的查詢語言;EJBQL用于支持Java持久層(Persistence)API的資料源的查詢語言;MDX 用于Mondrian資料源的查詢語言,
(25)Imports java輸入的串列,例如:java.util.*和java.text.SimpleDateFormat格式,用于簡化report的運算式,
(26)Resource Bundle 為report提供了本地的系列字串,在報告中,本地字串能用$R{key}參考,
(27)When Resource Missing Print 允許自定義引擎在resource bundle中處理丟失的resource,有4種選擇:Null 丟失的resource不列印;Empty 丟失的resource為空;Key 用$R{key}指定的key來列印; Error 用錯誤來中斷報告的執行,

4、Styles 風格
一個report可以定義大量的風格,一旦定義了,它們能和report物件聯系起來,為了給各種可視視圖提供基本的配置,report允許用模塊化的方式來定義模塊的風格,
風格有相關聯的條件風格,條件風格允許當其運算式為真時改變風格,

1)風格的屬性有:
(1)Name 風格名;
(2)Parent Style 父風格;
(3)Foreground 前景色;
(4)Background 背景色;
(5)Mode 方式,決定是否帶透明度;
(6)Pen 畫筆 有6種選擇:None 無線;1 Point 正常寬度的線;2 Point 中等寬度的線;4 Point 粗線;Dotted 虛線;Thin 細線,
(7)Fill 填充;決定對物件進行填充的模式;
(8)Box 指定盒子的屬性,如邊框型別,邊框顏色,是否填充,
(9)Horizontal Alignment 水平排列;有3種選擇:Left 左;Center 中;Right 右,
(10)Vertical Alignment 垂直排列;有3種選擇:Top 頂;Middle 中;Bottom 底,
(11)Scale 比例;指定影像的比例,有3種選擇:Clip 尺寸不適合時,多余部分省略;Fill Frame 影像按比例填充進Image物件中;Retain Shape 保留原形狀進行填充,
(12)Radius 指定矩形邊框倒角的弧度;
(13)Pattern 用Text Field運算式的值來指定樣式;其日期型別的值用java.text.SimpleDataFormat類來定義;其數值型的值用java.text.DecimalFormat來定義,
(14)Blank When Null 當Text Field運算式的值為null時顯示空白;
(15)Line Spacing 線距;有3種選擇:Single:單倍線距;1 and 1/2:1.5倍線距;Double:雙倍線距,
(16)Rotation 旋轉;有3種選擇:None 不旋轉;Left 左旋180度;Right 右旋180度,
(17)Styled Text 是一個標志位,用來指定是否text物件包含了已定義風格或規則的text,
(18)Font Name 字體名;
(19)Font Size 字體的尺寸;
(20)Bold 粗體;
(21)Italic 斜體;
(22)Underline 下劃線;
(23)Strike Through 通過標準位來取消;
(24)PDF Font Name:PDF字體名;
(25)PDF Encoding:PDF編碼;
(26)PDF Embedded是一個標志位,指定是否PDF字體應該嵌入到檔案中,

2)條件風格的屬性:
和上面僅有一點點的不同,其不同的屬性為:
Condition Expression 條件運算式;是一個布爾型的運算式,用于判斷是否應用條件運算式,

5、Section Properties 節屬性
Section的種類前面已經講了,這里只是補充講述它的屬性:
(1)Height 以報告的單位指定的section的高度;
(2)Print When Expression 是一個布爾運算式,決定是否列印本Section;
(3)Split Allowed 一個標志位,指示當Section超過當前頁面的尺寸時,是否允許分割它,如果為真,當前Section將遷移到下一頁,注意:如果Section在下一頁也不適合時,則不管標志位值如何,都會分割它,

6、Groups 組
一個report可以定義大量的組,組表示決定帶相關資料的可視組的運算式名,一旦宣告后,組能在報告任意地方使用,
一個資料組用一個運算式組來識別,
注意:組機制不能完成來自于資料源資料的任何排序,如果想要有序的資料,必須把資料源的資料進行先排序處理,
組屬性:
(1)Name 組名;用于參考組,
(2)Expression 運算式;決定report資料的組;
(3)Min Height To Start New Page 開始新頁的最小高度;
(4)Reprint Header On Each Page 一個標志位,指示在每一頁的開始處是否重新列印組頭;
(5)Reset Page Number 重設頁數,一個標志位;在組頭在新頁開始處列印時,是否重新設定頁數;
(6)Start New Column 一個標志位,是否在新列中總是列印組頭;
(7)Start New Page 一個標志位,是否在新頁中總是列印組頭

五、JasperReports作為一種開源的報表庫為應用提供了強大的支持,其易用性和靈活性為系統的開發提供了極大的便利,

在報表生成程序中,使用JDBC等傳統資料源操作方法獲取資料的程序會消耗大量的系統時間,這樣就需要利用其它手段來簡化資料源操作,
在這種情況下,適當的使用ORM(Object/Relational Mapping)技術,能夠很好的解決這個問題,對于系統性能的提升有很大的幫助,

1、JasperReports填充報表

要完成報表的填充,必須先完成用于報表的xml模板,其程序是先產生報表布局物件,再序列號該物件,存盤在磁盤或者網路,用于產生特定應用的表格資料,
實際上,表單的設計程序就是用定義于xml檔案中的java運算式來表現報表的布局,
編輯程序中會有各種保證資料一致性的驗證,最侄訓產生相關資料的檔案,
報表引擎必須先接受資料來產生報表,這些資料一般來源于各種資料源,報表引擎能直接接收用于填充表格的資料源物件,或者通過自身提供的JDBC連接物件來處理資料庫的資料,
報表最終要產生一個新的物件來進行填充操作從而產生用于輸出的檔案物件,這也是一個存盤在磁盤或者網路傳輸介質的序列化物件,
JasperReports的內置瀏覽器能直接查看結果或者以PDF,HTML,XML形式將其匯出,

2、持久化技術和ORM

持久化(Persistence),即把資料保存到可永久保存的存盤設備中(如磁盤),
持久化的主要應用是將記憶體中的資料存盤在關系型的資料庫中,當然也可以存盤在磁盤檔案中、XML資料檔案中等,
ORM即“物件-關系型資料映射組件,對于O/R,即Object(物件)和Relational(關系型資料),表示必須同時使用面向物件和關系型資料進行開發,
MVC(Model View Control)中的Model包含了復雜的業務邏輯和資料邏輯,以及資料存取機制(如JDBC的連接、SQL生成和Statement創建、還要ResultSet結果集的讀取等),將這些復雜的業務邏輯和資料邏輯分離,以將系統的緊耦合關系轉化為松耦合關系(即解耦合),是降低系統耦合度迫切要做的,也是持久化要做的作業,
MVC模式實作了架構上將表現層和資料處理層分離的解耦合,而持久化設計則實作了資料處理層內部的業務邏輯和資料邏輯分離的解耦合,
關系型資料庫中的資料基本都是以一行行的資料進行存取的,而程式運行卻是一個個物件進行處理,而目前大部分資料庫驅動技術(如ADO.NET、JDBC、ODBC等)均是以行集的結果集一條條進行處理的,所以為解決這一困難,就出現ORM這一個物件和資料之間映射技術,

3、在JasperReports中使用Hibernate

Hibernate是一個開發源代碼的物件關系映射框架,它對JDBC進行了非常輕量級的物件封裝,使得Java程式員可以隨心所欲的使用物件編程思維來操縱資料庫,
Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程式使用,也可以在Servlet/JSP的Web應用中使用,最具革意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成資料持久化的重任,

關鍵代碼片段

 

package src;

import java.util.HashMap;
import java.util.List;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.engine.JasperExportManager;

import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Simple1 {
public static void main(String args[]) {
   String sampleReportFile=new String("reports/sampleReport.jrxml");
   //Hibernate Result Set Holder.
   List bowlerInfo=null;
   try {
    //Configure the Hibernate session
    Configuration cfg=new Configuration();
    cfg.addResource("hibernate-mapping.xml");
    SessionFactory sessions=cfg.buildSessionFactory();
    //Open the Hibernate Session
    Session session=sessions.openSession();
    //Returns all SampleData records.
    //Simple POJO object.
    bowlerInfo=session.createQuery("from SampleData").list();
    //Fill the parameters
    HashMap parameters=new HashMap();
    parameters.put("ReportTitle","Bowling Scores");
    parameters.put("NoOfGames", new Integer(3));
    //Load the sample report file from the XML file
    //into the JasperDesign object.
    JasperDesign design=JRXmlLoader.load(sampleReportFile);
    //Compile the Report in Memory storing it in a JasperReport object
    //no .jasper report file is created.
    JasperReport report=new JasperCompileManager().compileReport(design);
    //Fill the report using the JRBeanCollectionDataSource passed
    //a Hibernate query result set.
    JasperPrint print=JasperFillManager.fillReport(report,parameters,new JRBeanCollectionDataSource(bowlerInfo));
    //Export to PDF file.
    JasperExportManager.exportReportToPdfFile(print,"simpleHibernatExample.pdf");
    //Close the Hibernate Session.
    session.close();  
   }catch(JRException jre) {
    jre.printStackTrace();
   }catch(MappingException me) {
    me.printStackTrace();
   }catch(HibernateException he) {
    he.printStackTrace();
   }
}
}

 

當Hibernate檢索回傳集合型別的物件時,使用JRBeanCollection介面可將資料通過Hibernate的POJO(Plain Old Java Object)實體映射到報表域中,使用JRXmlLoader.load(templateName)方法加載報表模板,最后通過JasperFillManager方法將資料填入模板中,
本例使用JasperExportManager.exportReportToPdfFile()方法將報表輸出為PDF格式,JasperReports提供的net.sf.jasperreports.engine.JRExporter介面可以方便的將報表輸出為PDF、XLS、CSV、RTF、HTML或者XML格式,目前以PDF和EXCEL格式較為通用,

4、總結

在JasperReports中使用了Hibernate以后,如果隨業務更換資料源的話,只需要更好Hibernate的映射檔案,極大提高了代碼的可重用性,同時由于Hibernate本身對于查詢的優化,也能很好的提高整個應用的效率,盡可能的節省開發時間,

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/100250.html

標籤:Java

上一篇:通過java程式(JSch)運行遠程linux主機上的shell腳本

下一篇:dll打開不了

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more