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

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

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

    Heis的Blog

    保持簡單,保持愚蠢
    隨筆 - 29, 文章 - 1, 評論 - 122, 引用 - 0
    數(shù)據(jù)加載中……

    JasperReport那些事兒(二)——從對象到XML數(shù)據(jù)源

           記得剛學(xué)Jasperreport的時候,在谷歌和百度上搜到的大多數(shù)入門文章都是教授如何使用數(shù)據(jù)庫來做報表的。對于只采用簡單數(shù)據(jù)集和那些直接面向數(shù)據(jù)的報表,使用數(shù)據(jù)庫作為數(shù)據(jù)源是合適的;但是也有很多的報表不是直接面向原始數(shù)據(jù)的,例如財務(wù)報表,都是需要計算和做后續(xù)處理;也有一些報表引用的數(shù)據(jù)粒度小,但是數(shù)量多,使用數(shù)據(jù)庫做數(shù)據(jù)源是不合適的。
           XML一直被認(rèn)為是一種很好的描述結(jié)構(gòu)化數(shù)據(jù)的語言。
           首先XML文件的數(shù)據(jù)結(jié)構(gòu)非常清晰??梢园褕蟊硭枰臄?shù)據(jù)集成到一個XML文件上,然后再通過在文件內(nèi)查詢,這比每需要一條數(shù)據(jù)就使用SQL來查詢要顯得更高效和簡單。試想一下,你的同事A告訴你,“報表的數(shù)據(jù)都在這份XML文件里哦”。而同事B則對你說:”那些數(shù)據(jù)在某個數(shù)據(jù)庫里,你自己去查吧。“,你更喜歡聽到哪一句呢?(當(dāng)然我的語氣上的差別就說明了我的喜好,我老懷疑后者在背向我的那一刻有在奸笑。)
           其次,現(xiàn)在對象映射到XML的工具很多。哦?你知道我在暗示什么嗎?沒錯,你可以面向?qū)ο?,而不用面向丑陋的表格。在上一篇文章中,我給出這樣一個數(shù)據(jù)源。
     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <NameList>
     3     <Person>
     4         <Name>強尼</Name>
     5         <Gender></Gender>
     6         <Age>56</Age>
     7     </Person>
     8     <Person>
     9         <Name>阿美</Name>
    10         <Gender></Gender>
    11         <Age>23</Age>
    12     </Person>
    13     <Person>
    14         <Name>李麗</Name>
    15         <Gender></Gender>
    16         <Age>58</Age>
    17     </Person>
    18     <Person>
    19         <Name>杰森</Name>
    20         <Gender></Gender>
    21         <Age>32</Age>
    22     </Person>
    23     <Person>
    24         <Name>劉三</Name>
    25         <Gender></Gender>
    26         <Age>21</Age>
    27     </Person>
    28 </NameList>
           
            如果你是個典型的面向?qū)ο蟮乃伎颊撸瑧?yīng)該馬上想到一個叫Person的Java類。大概像下面這樣。
     1 package com.blogjava.heis.jasper.chapter2;
     2 
     3 public class Person {
     4     
     5     private String name;
     6     private String gender;
     7     private int age;
     8     
     9     private String getName() {
    10         return name;
    11     }
    12     private void setName(String name) {
    13         this.name = name;
    14     }
    15     private String getGender() {
    16         return gender;
    17     }
    18     private void setGender(String gender) {
    19         this.gender = gender;
    20     }
    21     private int getAge() {
    22         return age;
    23     }
    24     private void setAge(int age) {
    25         this.age = age;
    26     }
    27 }
           
          想像一下,把一個個對象排著隊跳進模板,然后一張完整的報表就出來了,不用管那些煩人的Sql,那應(yīng)該是多么美好的一件事兒。面向?qū)ο蠊皇俏覀兊母R?。接下來看看我們?nèi)绾伟褜ο筠D(zhuǎn)換成XML文件。
    package com.blogjava.heis.jasper.chapter2;

    import java.io.File;
    import java.io.FileWriter;
    import java.io.StringWriter;
    import java.util.ArrayList;

    import org.apache.commons.betwixt.io.BeanWriter;

    public class BeanToXMLConverter {    
        
    private final static String FILE_PATH="c:/test.xml";
        
        
    /** 
         * Create an example bean and then convert it to xml.
         
    */
        
    public static final void main(String [] args) throws Exception {
            Person person1
    =new Person();
            person1.setName(
    "張三");
            person1.setGender(
    "");
            person1.setAge(
    35);
            
            Person person2
    =new Person();
            person2.setName(
    "李四");
            person2.setGender(
    "");
            person2.setAge(
    25);
            ArrayList
    <Person> al=new ArrayList<Person>();
            al.add(person1);
            al.add(person2);
            
            NameList nameList
    =new NameList();
            nameList.setList(al);       
            
    try{
                BeanToXMLConverter wea
    =new BeanToXMLConverter();
                wea.writeToXMLFile(nameList);
            }
    catch(Exception e){
                e.printStackTrace();
            }
        }
        
        
    private void writeToXMLFile(Object obj)throws Exception{
            StringWriter outputWriter 
    = new StringWriter();       
            outputWriter.write(
    "<?xml version='1.0' ecoding='UTF-8' ?>\n");       
            BeanWriter beanWriter 
    = new BeanWriter(outputWriter);       
            beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(
    false);
            beanWriter.getBindingConfiguration().setMapIDs(
    false);
            beanWriter.enablePrettyPrint();

            beanWriter.write(obj);
            String xmlFilePath
    =FILE_PATH;
            File xmlFile
    =new File(FILE_PATH);
            
    if(!xmlFile.exists()){
                xmlFile.createNewFile();
            }
            FileWriter fw
    =new FileWriter(xmlFilePath);
            fw.write(outputWriter.toString().toCharArray());
            fw.flush();
            System.out.println(outputWriter.toString());
            outputWriter.close();
        }
    }

         NameList類代碼。
     1 package com.blogjava.heis.jasper.chapter2;
     2 
     3 import java.util.List;
     4 
     5 public class NameList {
     6 
     7     private List<Person> list;
     8 
     9     public List<Person> getList() {
    10         return list;
    11     }
    12 
    13     public void setList(List<Person> list) {
    14         this.list = list;
    15     }
    16 }
    17 
            運行以上的代碼需要四個包,commons-betwixt.jar,commons-logging.jar, commons-collections.jar, commons-beanutils-core.jar。這些都可以從http://commons.apache.org/下載。JDK需要1.5或以上。
            看到這里你心里也許開始矛盾(或者不屑),對,同事Q也是這樣想的。
          Q:“這不是擺明更麻煩么?對象轉(zhuǎn)換為XML,再從XML查數(shù)據(jù),你這瞎折騰我,浪費資源在轉(zhuǎn)換上??!”
          俺:“也許是多了一些功夫,多占用了點資源。但是這可以讓報表的數(shù)據(jù)可讀性更強,更重要的是報表制作可以和SQL說拜拜,他和對象走得更密切了。”
          Q:“但是你的XML文件不是還是需要查詢么?你能保證那些查詢語句比SQL更簡單么?”
          俺:“我能給你肯定的回答。但是XML的查詢就要留到下一章去介紹了。這星期OT比較多,先溜啦,88。”
          Q:“哎,你給我說清楚點再走……”
         






    程序員的一生其實可短暫了,這電腦一開一關(guān),一天過去了,嚎;電腦一開不關(guān),那就成服務(wù)器了,嚎……

    posted on 2009-02-21 21:14 Heis 閱讀(3102) 評論(2)  編輯  收藏 所屬分類: JasperReport那些事兒

    評論

    # re: JasperReport那些事兒(二)——從對象到XML數(shù)據(jù)源  回復(fù)  更多評論   

    這樣確實解決了煩人的SQL但是增加了額外的負(fù)擔(dān),fillReport你需要的數(shù)據(jù)源需要從xmlDatasource中加載,如果再來點統(tǒng)計、圖表型等等,scriplet也會讓你越來越頭疼,首先維護起來麻煩,其次為了填充obj大對象所帶來代碼額外的代碼、性能開銷......
    2009-02-23 08:55 | 凌晨風(fēng)

    # re: JasperReport那些事兒(二)——從對象到XML數(shù)據(jù)源  回復(fù)  更多評論   

    如果相對于那些時常導(dǎo)出報表的,如在瀏覽器上導(dǎo)出報表的這確實一個很好的方案。
    但是還是搞不清如何解決查詢的問題,所以期待你的下一章。
    2009-02-25 09:44 | duduli
    主站蜘蛛池模板: 亚洲国产精品日韩在线| 欧洲乱码伦视频免费| 操美女视频免费网站| 久久精品亚洲综合| 色婷婷综合缴情综免费观看| 最近免费中文字幕大全视频 | 一个人在线观看视频免费| 久久亚洲免费视频| 精品国产呦系列在线观看免费 | 成全高清在线观看免费| 在线亚洲精品自拍| 欧美日韩亚洲精品| 成人毛片免费观看视频大全| 亚洲第一视频在线观看免费| 国产亚洲精品自在线观看| 一个人看的www视频免费在线观看| 亚洲男人的天堂在线va拉文| 一级女性全黄久久生活片免费| 中文文字幕文字幕亚洲色| 久久久国产精品无码免费专区| 卡一卡二卡三在线入口免费| 亚洲一区电影在线观看| 成人免费无码大片A毛片抽搐色欲| 丝袜捆绑调教视频免费区| 亚洲国产精品特色大片观看完整版| 中文字幕乱码系列免费| 亚洲日本va一区二区三区| 日本中文一区二区三区亚洲| 免费无码国产在线观国内自拍中文字幕 | 四虎1515hh永久久免费| 亚洲人成7777影视在线观看| 日韩免费视频观看| 国产亚洲日韩在线a不卡| 亚洲区小说区图片区| 野花高清在线电影观看免费视频| 国产一精品一AV一免费| 亚洲一区二区三区四区视频| 久久久久久亚洲精品| 亚洲日产无码中文字幕| 免费大片黄在线观看yw| 性xxxxx大片免费视频|