<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

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久精品亚洲综合| 国产AV无码专区亚洲AV手机麻豆| 国产在线精品观看免费观看| 中文字幕亚洲综合久久综合 | 一个人免费高清在线观看| 黄色片在线免费观看| 亚洲毛片网址在线观看中文字幕 | 2017亚洲男人天堂一| 日韩色日韩视频亚洲网站| 十八禁在线观看视频播放免费| 色婷婷7777免费视频在线观看 | 国产午夜亚洲精品理论片不卡| 亚洲一区二区三区在线网站| 黄页网站在线观看免费高清| 中文有码亚洲制服av片| 国产精品免费看香蕉| 亚洲精品亚洲人成在线麻豆| 色多多www视频在线观看免费| 99国产精品免费观看视频| 日产乱码一卡二卡三免费| 国产亚洲一区二区三区在线不卡| 黄色短视频免费看| 日本牲交大片免费观看| 亚洲av综合日韩| 曰韩亚洲av人人夜夜澡人人爽| 无码A级毛片免费视频内谢| 亚洲婷婷国产精品电影人久久| 亚洲一线产区二线产区区| 四虎成人精品永久免费AV| 亚洲最大成人网色香蕉| 免费人妻av无码专区| 亚洲av中文无码乱人伦在线观看| 69式国产真人免费视频| 久久精品国产亚洲av水果派| 中文字幕在线免费看| 亚洲国产精品综合久久久| 久久精品国产免费观看| 亚洲国产香蕉碰碰人人| 国产午夜精品久久久久免费视| 亚洲中文字幕第一页在线| 中文毛片无遮挡高潮免费|