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

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

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

    posts - 89,  comments - 98,  trackbacks - 0
    /**
    作者:Willpower
    來源:Rifoo Technology(
    http://www.rifoo.com
    時間:2006-05
    備注:轉載請保留以上聲明
    **/

    今天開始Hibernate3之旅,在Hibernate2的基礎上改進了不少,讓我們一起借助這本書來學習吧。

    本書分兩個部分,第一部分是Hibernate入門知識(第1到4章),第二部分是Hibernate高級知識(第5到14章)。

    我們今天來看看第一章的內容:Hibernate 3的介紹。

    大多數重大的開發項目都會涉及到關系數據庫的概念。許多商業應用的核心就是對規則有序的信息進行大規模的存儲,比如目錄,客戶列表,合同資料等。

    隨著互聯網的繁榮,對數據庫的要求越來越高。在線書店的那些客戶們可能自己都不知道,自己每一次的查詢操作或者點擊某個按鈕都會去操作數據庫。

    隨著應用程序的需求不段提高,后來出現了標準的EJB規范,EJB規范提供了容器和Bean管理的CMP。但是,這個復雜性很高,而性能卻并沒有想像中的高。后來,Hibernate的出現給數據的持久化帶來了很大的轟動。針對一些數據庫持久化解決方案,有用EJB的,有用傳統JDBC的,有用Hibernate的。但Hibernate在易用性上顯示了突出的優勢。

    這一章我們會提供給大家一個“Hello world”數據庫范例。該范例能夠通過一個簡單的關鍵字來查找并顯示數據庫中被保存的一個message信息。下面我們會提供原始JDBC寫法和Hibernate寫法:

    Listing 1-1. 這個Main方法會調用我們Hibernate或JDBC的持久化操作
    CODE:


    public static void main(String[] args) {
    ? if (args.length != 1) {
    ? ? System.err.println("Nope, enter one message number");
    ? } else {
    ? try {
    ? ? int messageId = Integer.parseInt(args[0]);
    ? ? //這一句是調用的方法
    ? ? [b]Motd motd = getMotd(messageId);[/b]
    ? ? if (motd != null) {
    ? ? ? ? System.out.println(motd.getMessage());
    ? ? } else {
    ? ? ? ? System.out.println("No such message");
    ? ? }
    ? } catch (NumberFormatException e) {
    ? ? System.err.println("You must enter an integer - " + args[0]
    ? ? ? ? + " won't do.");
    ? } catch (MotdException e) {
    ? ? System.err.println("Couldn't get the message: " + e);
    ? ? }
    ? }
    }



    在理想的世界中,我們將很容易的獲取任何JAVA對象并將它持久化到數據庫。不需要編寫額外的特殊代碼。也能夠保證有良好的性能。對象關系映射(Object Relational Mapping)技術能持久化傳統的JAVA對象,而這里的POJO(Plain Old Java Objects)也是一種可重用的JAVA對象,POJO可以是任意的JAVA對象,而不需要Entity Bean那樣的命名約束。Hibernate能夠幫助我們很輕松地去持久化POJO。

    下面我們編寫POJO部分:


    Listing 1-2. 本范例中使用到的POJO
    CODE:

    public class Motd {
    ? protected Motd() {
    ? }

    ? public Motd(int messageId, String message) {
    ? ? this.messageId = messageId;
    ? ? this.message = message;
    ? }
    ? public int getId() {
    ? ? return id;
    ? }
    ? public void setId(int id) {
    ? ? this.id = id;
    ? }
    ? public String getMessage() {
    ? ? return message;
    ? }
    ? public void setMessage(String message) {
    ? ? this.message = message;
    ? }
    ? private int messageId;
    ? private String message;
    }



    下面是從數據庫中檢索Motd對象的傳統JDBC的寫法,代碼如下:


    Listing 1-3. 檢索POJO
    CODE:


    public static Motd getMotd(int messageId) throws MotdException {
    ? Connection c = null;
    ? PreparedStatement p = null;
    ? Motd message = null;
    ? try {
    ? Class.forName("org.postgresql.Driver");
    ? c = DriverManager.getConnection(
    ? ? "jdbc:postgresql://127.0.0.1/hibernate",
    ? ? "hibernate",
    ? ? "hibernate");
    ? p = c.prepareStatement(
    ? "select message from motd where id = ?");
    ? p.setInt(1, messageId);
    ? ResultSet rs = p.executeQuery();
    ? ? if (rs.next()) {
    ? ? ? ? String text = rs.getString(1);
    ? ? ? ? message = new Motd(messageId, text);
    ? ? ? ? if (rs.next()) {
    ? ? ? ? ? log.warning(
    ? ? ? ? ? "Multiple messages retrieved for message ID: "
    ? ? ? ? ? + messageId);
    ? ? ? ? ? }
    ? ? ? ? }
    ? ? } catch (Exception e) {
    ? ? log.log(Level.SEVERE, "Could not acquire message", e);
    ? ? throw new MotdException(
    ? ? "Failed to retrieve message from the database.", e);
    ? } finally {
    ? ? if (p != null) {
    ? ? ? ? try {
    ? ? ? ? ? p.close();
    ? ? ? ? } catch (SQLException e) {
    ? ? ? ? ? log.log(Level.WARNING,
    ? ? ? ? ? "Could not close ostensibly open statement.", e);
    ? ? ? ? }
    ? ? }
    ? ? if (c != null) {
    ? ? ? ? try {
    ? ? ? ? ? c.close();
    ? ? ? ? } catch (SQLException e) {
    ? ? ? ? log.log(Level.WARNING,
    ? ? ? ? "Could not close ostensibly open connection.", e);
    ? ? ? ? }
    ? ? }
    ? } ?
    return message;
    }


    大家都看到了,這段代碼包括數據庫連接建立,釋放資源等。對于每個查詢的方法,都有這樣的代碼,其實這個顯得很冗余。當然了,我們也可以對它進行重構,將這部分代碼提取出來,提供一些樣本方法。

    posted on 2006-07-28 09:55 水煮三國 閱讀(449) 評論(0)  編輯  收藏 所屬分類: Hibernate
    <2006年7月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(4)

    隨筆分類(85)

    隨筆檔案(89)

    文章分類(14)

    文章檔案(42)

    收藏夾(37)

    java

    oracle

    Sybase

    搜索

    •  

    積分與排名

    • 積分 - 210807
    • 排名 - 266

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲视频国产视频| 在线精品免费视频| 亚洲制服丝袜精品久久| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 一级毛片**不卡免费播| 7777久久亚洲中文字幕| 国产亚洲成归v人片在线观看| 久久成人国产精品免费软件| 黄色一级毛片免费看| 久久久久亚洲精品天堂| 免费jlzzjlzz在线播放视频| 亚洲av无码成人精品区一本二本| 亚洲日韩精品一区二区三区无码 | 亚洲高清资源在线观看| 免费a级毛片无码a∨性按摩| 182tv免费观看在线视频| 免费无码午夜福利片69| 33333在线亚洲| 亚洲av不卡一区二区三区| 99re在线视频免费观看| 亚洲欧洲自拍拍偷综合| 国产亚洲精品无码专区| 性色av无码免费一区二区三区| 久久亚洲精品无码av| 亚洲综合图片小说区热久久| 亚洲性日韩精品一区二区三区 | 又硬又粗又长又爽免费看 | 2020天堂在线亚洲精品专区| 久久亚洲精品成人| 亚洲精品色婷婷在线影院 | 亚洲av再在线观看| 国产精品无码免费播放| 香蕉免费一区二区三区| XXX2高清在线观看免费视频| 亚洲国产精品久久久久婷婷软件| 免费一级毛片在线播放| 夫妻免费无码V看片| 国产精品免费网站| 无人视频免费观看免费视频 | 免费黄色福利视频| 国产精品免费无遮挡无码永久视频|