<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    泰仔在線

    java學習,心情日記,繽紛時刻
    posts - 100, comments - 34, trackbacks - 0, articles - 0

    JasperReports+iReport在eclipse中的使用

    Posted on 2008-04-08 11:52 泰仔在線 閱讀(4177) 評論(0)  編輯  收藏 所屬分類: Java 相關



            一、介紹

    1)它可以PDF,HTML,XML等多種形式產(chǎn)生報表或動態(tài)報表,在新版本還支持CSV,XLS,RTF等格式的報表;

    2)它按預定義的XML文檔來組織數(shù)據(jù),來源多(如:關系數(shù)據(jù)庫,Java容器對象(collection,arrays)等);

    報表的填充過程:

    先產(chǎn)生報表設計對象->序列化該對象->存儲在磁盤或網(wǎng)絡->產(chǎn)生XML文件(表格數(shù)據(jù))。

    表單的設計過程就是用定義于XML文件中的Java表達式來實現(xiàn)報表的設計。

    3)它帶數(shù)據(jù)一致性驗證;

    4)報表引擎必須先接受數(shù)據(jù)(通過參數(shù)等多種形式)來產(chǎn)生報表,更多的是來自數(shù)據(jù)源,引擎直接接收用于填充表格的數(shù)據(jù)源對象,或者通過自身提供的JDBC連接對象來處理數(shù)據(jù)庫的數(shù)據(jù);

    5)報表最終要產(chǎn)生一個新的對象來進行填充操作,從而產(chǎn)生打印文檔對象,這也是存儲在磁盤或網(wǎng)絡傳輸介質的序列化對象;

    6)內(nèi)置瀏覽器能直接查看結果,以PDF,HTML,XML導出;

    7)重要的類:

    net.sf.jasperreports.engine.design.JasperDesign

    其實例是用于報表產(chǎn)生的原始類;

    net.sf.jasperreports.engine.design.JasperReport

    表現(xiàn)了報表設計對象,是作為報表的編譯過程的結果而被實例化,是向報表中填充數(shù)據(jù)的準備。

    二、結構

    JasperReports用XML文件來定義,約定用jrxml作為文件的后綴名。

    1)主要元素:

    <jasperReport> 根元素

    <title> 報表的標題

    <pageHeader> 頁眉

    <detail> 正文

    <pageFooter> 頁腳

    <band> 定義報表部件,以上所有元素都包含一個band元素作為其唯一子元素。

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

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

    菜單“幫助”->“軟件更新”->“查找并安裝”->“搜索要安裝的新功能部件”--(下一步)-->“新建遠程站點”,輸入以下內(nèi)容:

    名稱:JasperForge

    URL:http://www.jasperforge.org/update

    --(確定)-->“下一步”-->直至完成。

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

    包名                                    說明

    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

    xml-apis.jar                            XML parser API

    三、iReport介紹

    1)iReport是為JasperReports設計的強大的,直觀的,易于使用的可視化報表設計器,為win32平臺編寫。允許用戶可視化地編輯XML JasperDesign文件,可以和其它數(shù)據(jù)庫進行JDBC通信。

    再設計模板時可以以HTML,PDF,XML方式預覽,用它生成的文件有.jrxml和.jasper兩種文件。

    .jrxml:是可視化編輯的xml文件;

    .jasper:經(jīng)編譯后生成的類文件,即報表模板文件。

    2)iReport的輸出格式

    其預覽輸出格式有:PDF,HTML,CSV。JAVA2D,EXCEL,純文本,JRView。

    注意:JRViewer是直接以C/S方式作為報表的輸出格式,在JFrame框架下輸出。

    3)報表的動態(tài)對象變量、參數(shù)、字段

    字段Fields:是從數(shù)據(jù)庫抽取出來的,在報表中出現(xiàn)的數(shù)據(jù)庫內(nèi)容。$F

    參數(shù)Parameters:你寫的應用需要提供給報表的入口。 $P

    變量Variables:報表中一些邏輯運算的表現(xiàn)。 $V

    每個對象的定義格式如下: $V{variablesName}

    4)運行時需要.jasper文件;編譯:把.jrxml->.jasper文件。

    靜態(tài)運行:靜態(tài)文本來運行,和數(shù)據(jù)源無關;

    動態(tài)運行:帶數(shù)據(jù)源運行。

    5)報表的結構

    title、pageHeader、columnHeader、detail、columnFooter、pageFooter、summary、groupHeader、groupfooter。

    6)在iReport中創(chuàng)建數(shù)據(jù)庫連接

    (1)菜單DourceSource -> Connections/DataSources -> ...new ->

    (2)菜單Build -> Set active connection -> 選擇 -> ... -> OK

    7)在iReport中創(chuàng)建文件

    iReport工具是一個可視編輯器幫助創(chuàng)建JasperReports文件。JasperReports是一個基于Java報表的引擎。

    當你在iReport中創(chuàng)建一個報表,你實際上是對配置文件進行操作,告訴JasperReports應該怎樣建立Report。

    三種文件:

    .jasper文件:編譯的二進制文件;

    .jrxml文件:報表的配置文件;

    .pdf文件:生成的pdf文件。

    8)報表格式化

    在iReport上選擇報表的一個區(qū)域,將呈現(xiàn)藍色高亮顯示;

    可用鼠標拖曳來改變區(qū)域的尺寸,當誤操作時,用undo來恢復;

    如選擇框變紅,則有錯誤,report將不能編譯;

    改變字體或調(diào)整尺寸,菜單“View”->“Element properties”->分三個選擇:

    (1)Common選擇:尺寸,前景色/背景色,透明度,打印條件,位置屬性等;

    (2)Font選擇:字體、大小、類型,PDF字體,加粗,斜體,下劃線,水平位置,垂直位置,PDF編碼。

    注意:兩種字體:

         Font Name:將顯示在iReport設計器和JasperReports運行中;

         PDF font Name:將顯示在編譯后的PDF文件中。

    (3)Static Text:靜態(tài)文本。

    想瀏覽元素時,看“View”->“Elements browser”;

    一次選擇多個域,按“shift”鍵再用鼠標點擊;

    菜單“View”->“Report Properties”報表屬性:

    報表尺寸,單位,頁邊距,報表名,縱向Portrait/橫向Landscape,列寬,Spacing,標題作為新頁,Summary作為新頁,XML編碼(UTF-8)。

    9)使用Groups

    菜單“View”->“Report query” 可以查詢和修改SQL語句。

    10)為report增加參數(shù)

    (1)菜單“View”->“Report Query”,修改SQL語句,如:加上 WHERE LAST_NAME=$P{LAST_NAME}

    注意:參數(shù)用$P{}來封裝。

    (2)定義參數(shù)

    菜單“View”->“Reports Parameters”

    新建參數(shù),如參數(shù)名為“LAST_NAME”,再指定參數(shù)的類型(如:String)

    還可設定“缺省值”和參數(shù)的“描述”

    運行報表(缺省),還可以傳遞參數(shù)方式:http://server/showReport?LAST_NAME=smith

    菜單“Build”->“Execute report(using active conn.)”

    11)創(chuàng)建子報表

    例子:一個報表包含另一個報表

    (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,參數(shù)parameter,查詢字符串queryString,字段field,變量variable,組group,標題title,頁眉pageHeader,列眉columnHeader,表明細detail,列腳columnFooter,頁腳pageFooter。

    屬性有:列寬columnWidth,列間距columnSpacing,左邊距l(xiāng)eftMargin,頂邊距topMargin,底邊距bottomMargin。

    2)報表層字體含義reportFonts

    無子元素;

    屬性有:名字name,是否缺省isFault,字體名fontName,字體大小size,是否粗體isBold,是否斜體isItalic,是否帶下劃線isUnderline,isStrikeThrough,PDF字體名pdfFontName,PDF編碼pdfEncoding,是否嵌入PDF(isPdfEmbedded)。

    3)用于產(chǎn)生報表的對象參數(shù)parameter。引用P${name}

    其子元素有:ParameterDescription,defaultValueExpression

    屬性有:name,class

    4)從數(shù)據(jù)庫檢索數(shù)據(jù)的查詢SQL語句 queryString

    5)包含于report中的數(shù)據(jù)庫表列字段 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節(jié)點。一個band元素包括:staticText(靜態(tài)文本)和textElement(文本元素)兩個元素。

    常見報表模型:列表、分組、主從、嵌套、交叉、圖形、套打、分欄、填報。

    2、創(chuàng)建報表

    1)建立輸入源

    InputStream input = new FileInputStream(new File("c:\\JasperReports\\catalog.xml"));

    JasperDesign design=JRXmlLoader.load(Input);

    2)創(chuàng)建對象

    JasperReport report = JasperCompileManager.compileReport(design);

    3)獲得JDBC連接從數(shù)據(jù)庫檢索數(shù)據(jù)

    InitialContext initialContext = new InitialContext();

    DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/OracleDBConnectionDS");

    Connection conn = ds.getConnection();

    4)產(chǎn)生可預覽、打印、輸出為其它格式的JasperPrint文件

    JasperPrint print = JasperFillManager.fillReport(report, parameters, conn);

    5)參數(shù)處理

    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環(huán)境變量;

    2)要支持中文,需itext-1.3.1.jar和iTextAsian.jar包,加入CLASSPATH環(huán)境變量中;

    3)安裝iReport,用iReport-1.3.0-windows-installer.exe安裝;

    4)JasperReport不需任何配置,將其jar包(jasperreports-1.3.0.jar)放入CLASSPATH;

    5)數(shù)據(jù)庫的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的核心特征。它是一個重要的機制,允許操縱和顯示報告數(shù)據(jù),執(zhí)行各種計算,自定義報告的外觀和報告對象的可視性。

    1)一個典型的表達式

    $F{LastName} + " " + $F{LastName}

    一個JasperReports的表達式是以Java表達式為基礎的,再加上一些附加的語法,它允許引用參數(shù)、變量和字段等。

    比如說要引用一個名叫DATA的參數(shù)時,語法應為$P{PARAM_NAME}。

    對變量和字段來說,其引用語法分別為$V{VAR_NAME}和$F{FIELD_NAME}。

    注意:在JasperReports的groovy腳本語言中,也同樣可以用$F,$P,$V引用參數(shù)、變量和字段。

    2)表達式的語法

    (1)$F{FIELD}   引用名為FIELD的字段;

    (2)$V{VAR}     引用名為VAR的變量;

    (3)$P{PARAM}   引用名為PARAM的參數(shù);

    (4)$P!{PARAM} 引用名為PARAM的參數(shù);這個特殊的語法僅能用于report的查詢中。它允許插入?yún)?shù)的內(nèi)容到查詢字符串中。例如,它能被用于創(chuàng)建一個帶通過參數(shù)來指定WHERE條件的動態(tài)查詢。

    $R{keyName}      在resource bundle中檢索帶keyName關鍵字的字符串。

    注意:表達式是用Java或Groovy寫成的,這意外著可以用Java強大的功能,如調(diào)用方法,允許構建無限復雜的表達式。還要注意,表達式的結果總是一個對象。

    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、內(nèi)建的函數(shù)

    JasperReports提供了一套內(nèi)建的函數(shù)用于report表達式中。這些函數(shù)盡管是內(nèi)建的工具,還是可以在普通操作中執(zhí)行它。

    注意:目前這套函數(shù)很有限,在未來會得到擴展。

    1)例:使用內(nèi)建函數(shù)

    msg("Total cost is {0}", $F{TOTAL})

    msg("Matched {0} products out of {1}", $F{MATCHED}, $P{TOTAL})

    2)內(nèi)建的函數(shù)

    (1)String str(String key);

    從和report相聯(lián)系的resource bundle中得到給出的key的一個字符串。這個函數(shù)的功能和使用$R{key}語法等價。

    (2)String msg(String pattern, Object arg0);

    建立一個帶給定的pattern和給定參數(shù)來指定其格式的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是表現(xiàn)為報告模板的根對象。在報告執(zhí)行期間,report模板和數(shù)據(jù)組合成最終的文檔。

    報告的屬性有:

    (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 報告中的列數(shù);

    (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類的子類。如果省略,將創(chuàng)建一個JRDefaultScriptlet的實例。

    (20)Summary New Page 新頁的概要;

    (21)Title New Page 新頁的標題;

    (22)When No Data Print 無數(shù)據(jù)時的打印,有三個選擇:No Pages 表示0頁;Blank Page 空白頁;All Sections No Detail 除了detail section,其它的都打印。

    (23)Query 查詢,用來檢索數(shù)據(jù)到報告中。

    (24)Query Language 查詢語言,有五個值:SQL 用于JDBC數(shù)據(jù)源的查詢語言;HBM Hibernate用于Hibernate數(shù)據(jù)源的查詢語言;XPath 用于XML數(shù)據(jù)源的查詢語言;EJBQL用于支持Java持久層(Persistence)API的數(shù)據(jù)源的查詢語言;MDX 用于Mondrian數(shù)據(jù)源的查詢語言。

    (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 用錯誤來中斷報告的執(zhí)行。

    4、Styles 風格

    一個report可以定義大量的風格。一旦定義了,它們能和report對象聯(lián)系起來,為了給各種可視視圖提供基本的配置。report允許用模塊化的方式來定義模塊的風格。

    風格有相關聯(lián)的條件風格。條件風格允許當其表達式為真時改變風格。

    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類來定義;其數(shù)值型的值用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對象包含了已定義風格或規(guī)則的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 節(jié)屬性

    Section的種類前面已經(jīng)講了,這里只是補充講述它的屬性:

    (1)Height 以報告的單位指定的section的高度;

    (2)Print When Expression 是一個布爾表達式,決定是否打印本Section;

    (3)Split Allowed 一個標志位,指示當Section超過當前頁面的尺寸時,是否允許分割它。如果為真,當前Section將遷移到下一頁。注意:如果Section在下一頁也不適合時,則不管標志位值如何,都會分割它。

    6、Groups 組

    一個report可以定義大量的組。組表示決定帶相關數(shù)據(jù)的可視組的表達式名。一旦聲明后,組能在報告任意地方使用。

    一個數(shù)據(jù)組用一個表達式組來識別。

    注意:組機制不能完成來自于數(shù)據(jù)源數(shù)據(jù)的任何排序。如果想要有序的數(shù)據(jù),必須把數(shù)據(jù)源的數(shù)據(jù)進行先排序處理。

    組屬性:

    (1)Name 組名;用于引用組。

    (2)Expression 表達式;決定report數(shù)據(jù)的組;

    (3)Min Height To Start New Page 開始新頁的最小高度;

    (4)Reprint Header On Each Page 一個標志位,指示在每一頁的開始處是否重新打印組頭;

    (5)Reset Page Number 重設頁數(shù),一個標志位;在組頭在新頁開始處打印時,是否重新設置頁數(shù);

    (6)Start New Column 一個標志位,是否在新列中總是打印組頭;

    (7)Start New Page 一個標志位,是否在新頁中總是打印組頭;

    報表工具之JasperReports+iReport(5)

    五、JasperReports作為一種開源的報表庫為應用提供了強大的支持。其易用性和靈活性為系統(tǒng)的開發(fā)提供了極大的便利。

    在報表生成過程中,使用JDBC等傳統(tǒng)數(shù)據(jù)源操作方法獲取數(shù)據(jù)的過程會消耗大量的系統(tǒng)時間,這樣就需要利用其它手段來簡化數(shù)據(jù)源操作。

    在這種情況下,適當?shù)氖褂肙RM(Object/Relational Mapping)技術,能夠很好的解決這個問題,對于系統(tǒng)性能的提升有很大的幫助。

    1、JasperReports填充報表

    要完成報表的填充,必須先完成用于報表的xml模板,其過程是先產(chǎn)生報表布局對象,再序列號該對象,存儲在磁盤或者網(wǎng)絡,用于產(chǎn)生特定應用的表格數(shù)據(jù)。

    實際上,表單的設計過程就是用定義于xml文件中的java表達式來表現(xiàn)報表的布局。

    編輯過程中會有各種保證數(shù)據(jù)一致性的驗證,最終會產(chǎn)生相關數(shù)據(jù)的文檔。

    報表引擎必須先接受數(shù)據(jù)來產(chǎn)生報表,這些數(shù)據(jù)一般來源于各種數(shù)據(jù)源,報表引擎能直接接收用于填充表格的數(shù)據(jù)源對象,或者通過自身提供的JDBC連接對象來處理數(shù)據(jù)庫的數(shù)據(jù)。

    報表最終要產(chǎn)生一個新的對象來進行填充操作從而產(chǎn)生用于輸出的文檔對象,這也是一個存儲在磁盤或者網(wǎng)絡傳輸介質的序列化對象。

    JasperReports的內(nèi)置瀏覽器能直接查看結果或者以PDF,HTML,XML形式將其導出。

    2、持久化技術和ORM

    持久化(Persistence),即把數(shù)據(jù)保存到可永久保存的存儲設備中(如磁盤)。

    持久化的主要應用是將內(nèi)存中的數(shù)據(jù)存儲在關系型的數(shù)據(jù)庫中,當然也可以存儲在磁盤文件中、XML數(shù)據(jù)文件中等。

    ORM即“對象-關系型數(shù)據(jù)映射組件。對于O/R,即Object(對象)和Relational(關系型數(shù)據(jù)),表示必須同時使用面向對象和關系型數(shù)據(jù)進行開發(fā)。

    MVC(Model View Control)中的Model包含了復雜的業(yè)務邏輯和數(shù)據(jù)邏輯,以及數(shù)據(jù)存取機制(如JDBC的連接、SQL生成和Statement創(chuàng)建、還要ResultSet結果集的讀取等)。將這些復雜的業(yè)務邏輯和數(shù)據(jù)邏輯分離,以將系統(tǒng)的緊耦合關系轉化為松耦合關系(即解耦合),是降低系統(tǒng)耦合度迫切要做的,也是持久化要做的工作。

    MVC模式實現(xiàn)了架構上將表現(xiàn)層和數(shù)據(jù)處理層分離的解耦合,而持久化設計則實現(xiàn)了數(shù)據(jù)處理層內(nèi)部的業(yè)務邏輯和數(shù)據(jù)邏輯分離的解耦合。

    關系型數(shù)據(jù)庫中的數(shù)據(jù)基本都是以一行行的數(shù)據(jù)進行存取的,而程序運行卻是一個個對象進行處理,而目前大部分數(shù)據(jù)庫驅動技術(如ADO.NET、JDBC、ODBC等)均是以行集的結果集一條條進行處理的。所以為解決這一困難,就出現(xiàn)ORM這一個對象和數(shù)據(jù)之間映射技術。

    3、在JasperReports中使用Hibernate

    Hibernate是一個開發(fā)源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。

    Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,最具革意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數(shù)據(jù)持久化的重任。

    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接口可將數(shù)據(jù)通過Hibernate的POJO(Plain Old Java Object)實例映射到報表域中,使用JRXmlLoader.load(templateName)方法加載報表模板,最后通過JasperFillManager方法將數(shù)據(jù)填入模板中。

    本例使用JasperExportManager.exportReportToPdfFile()方法將報表輸出為PDF格式。JasperReports提供的net.sf.jasperreports.engine.JRExporter接口可以方便的將報表輸出為PDF、XLS、CSV、RTF、HTML或者XML格式,目前以PDF和EXCEL格式較為通用。

    4、總結

    在JasperReports中使用了Hibernate以后,如果隨業(yè)務更換數(shù)據(jù)源的話,只需要更好Hibernate的映射文件,極大提高了代碼的可重用性,同時由于Hibernate本身對于查詢的優(yōu)化,也能很好的提高整個應用的效率,盡可能的節(jié)省開發(fā)時間。


            轉載自: JasperReports+iReport在eclipse中的使用
    主站蜘蛛池模板: 99热在线观看免费| 亚洲国产无线乱码在线观看| 美女视频黄频a免费| 妞干网免费视频观看| 色婷五月综激情亚洲综合| 久久久久av无码免费网| 久久久无码精品亚洲日韩蜜臀浪潮 | 精品国产亚洲一区二区三区 | 亚洲产国偷V产偷V自拍色戒| 久久久受www免费人成| 国产亚洲人成网站在线观看不卡 | 猫咪免费观看人成网站在线| 亚洲国产精品尤物YW在线观看| 国产精品亚洲一区二区在线观看| 精品国产一区二区三区免费看| 亚洲综合一区国产精品| 成全影视免费观看大全二| 亚洲AV噜噜一区二区三区| 伊人久久亚洲综合影院| 羞羞视频在线观看免费| 夜夜春亚洲嫩草影院| 无码日韩精品一区二区免费暖暖 | 99久久国产亚洲综合精品| 四只虎免费永久观看| 国产区在线免费观看| 久久精品国产亚洲一区二区| 青青青国产手机频在线免费观看| 亚洲一级视频在线观看| 俄罗斯极品美女毛片免费播放| 成人免费777777被爆出| 久久精品国产亚洲av麻| 免费看黄视频网站| 黄色三级三级三级免费看| 亚洲精品无码不卡在线播放HE| 毛片在线播放免费观看| 精品久久亚洲中文无码| 亚洲国产精品尤物yw在线| 99re热精品视频国产免费| 亚洲熟妇久久精品| 亚洲国产精品无码久久久不卡| 无码人妻久久一区二区三区免费丨|