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

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

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

    Vincent

    Vicent's blog
    隨筆 - 74, 文章 - 0, 評(píng)論 - 5, 引用 - 0
    數(shù)據(jù)加載中……

    第一個(gè)Hibernate with Annotation程式

    Hibernate是ORM的解決方案,其底層對(duì)數(shù)據(jù)庫(kù)的操作依賴于JDBC,所以您必須先取得JDBC驅(qū)動(dòng)程序,在這邊所使用的是MySQL,所以您必須至 MySQL? Connector/J 取得MySQL的JDBC驅(qū)動(dòng)程序。

    接下來至
    Hibernate 官方網(wǎng)站 取得Hibernate 3.2Hibernate Annotations 3.2

    您必須安裝JDK 5.0才可以使用Hibernate Annotations的功能。

    解開Hibernate 3.2的zip檔案后,當(dāng)中的hibernate3.jar是必要的,而在lib目錄中還包括了許多jar檔案,您可以在 Hibernate 3.0官方的參考手冊(cè) 上找到這些jar的相關(guān)說明,其中必要的是 antlr、dom4j、CGLIB、asm、Commons Collections、Commons Logging、 EHCache,Hibernate底層還需要Java Transaction API,所以您還需要jta.jar。

    解開Hibernate Annotations 3.2的zip檔案后,您需要hibernate-annotations.jar、ejb3-persistence.jar這兩個(gè)檔案。

    到這邊為止,總共需要以下的jar檔案:


    Hibernate可以運(yùn)行于單機(jī)之上,也可以運(yùn)行于Web應(yīng)用程序之中,如果是運(yùn)行于單機(jī),則將所有用到的jar檔案(包括JDBC驅(qū)動(dòng)程序)設(shè)定至CLASSPATH中,如果是運(yùn)行于Web應(yīng)用程序中,則將jar檔案置放于WEB-INF/lib中。

    如果您還需要額外的Library,再依需求加入,例如JUnit、Proxool等等,接下來可以將etc目錄下的 log4j.properties復(fù)制至Hibernate項(xiàng)目的Classpath下,并修改一下當(dāng)中的 log4j.logger.org.hibernate為error,也就是只在在錯(cuò)誤發(fā)生時(shí)顯示必要的訊息。

    接著設(shè)置基本的Hibernate配置文件,可以使用XML或Properties檔案,這邊先使用XML,檔名預(yù)設(shè)為hibernate.cfg.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    ? "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    ? "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    ?
    <hibernate-configuration>
    ??? <session-factory>
    ??????? <!-- 顯示實(shí)際操作數(shù)據(jù)庫(kù)時(shí)的SQL -->
    ??????? <property name="show_sql">true</property>
    ??????? <!-- SQL方言,這邊設(shè)定的是MySQL -->
    ??????? <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    ??????? <!-- JDBC驅(qū)動(dòng)程序 -->
    ??????? <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    ??????? <!-- JDBC URL -->
    ??????? <property name="connection.url">jdbc:mysql://localhost/demo</property>
    ??????? <!-- 數(shù)據(jù)庫(kù)使用者 -->
    ??????? <property name="connection.username">root</property>
    ??????? <!-- 數(shù)據(jù)庫(kù)密碼 -->
    ??????? <property name="connection.password">123456</property>
    ?
    ??????? <!-- 以下設(shè)置對(duì)象與數(shù)據(jù)庫(kù)表格映像類別 -->
    ??????? <mapping class="onlyfun.caterpillar.User"/>
    ??? </session-factory>
    </hibernate-configuration>

    這邊以一個(gè)簡(jiǎn)單的單機(jī)程序來示范Hibernate的配置與功能,首先作數(shù)據(jù)庫(kù)的準(zhǔn)備工作,在MySQL中新增一個(gè)demo數(shù)據(jù)庫(kù),并建立user表格:
    CREATE TABLE user (
    id INT(11) NOT NULL auto_increment PRIMARY KEY,
    name VARCHAR(100) NOT NULL default'',
    age INT
    );
    對(duì)于這個(gè)表格,您有一個(gè)User類別與之對(duì)應(yīng),表格中的每一個(gè)字段將對(duì)應(yīng)至User實(shí)例上的Field成員。

    package onlyfun.caterpillar;
    ?
    import javax.persistence.*;
    ?
    @Entity
    @Table(name="user") // 非必要,在表格名稱與類別名稱不同時(shí)使用
    public class User {
    ? @Id
    ? @GeneratedValue(strategy=GenerationType.AUTO)
    ??? private Integer id;
    ?
    ? @Column(name="name") // 非必要,在字段名稱與屬性名稱不同時(shí)使用
    ??? private String name;
    ?
    ? @Column(name="age")
    ??? private Integer age; // 非必要,在字段名稱與屬性名稱不同時(shí)使用
    ???
    ??? // 必須要有一個(gè)預(yù)設(shè)的建構(gòu)方法
    ??? // 以使得Hibernate可以使用Constructor.newInstance()建立對(duì)象
    ??? public User() {
    ??? }
    ?
    ??? public Integer getId() {
    ??????? return id;
    ??? }
    ?
    ??? public void setId(Integer id) {
    ??????? this.id = id;
    ??? }
    ?
    ??? public String getName() {
    ??????? return name;
    ??? }
    ?
    ??? public void setName(String name) {
    ??????? this.name = name;
    ??? }
    ???
    ??? public Integer getAge() {
    ??????? return age;
    ??? }
    ?
    ??? public void setAge(Integer age) {
    ??????? this.age = age;
    ??? }
    }

    其中id是個(gè)特殊的屬性,Hibernate會(huì)使用它來作為主鍵識(shí)別,您可以定義主鍵產(chǎn)生的方式,這邊設(shè)定為自動(dòng)產(chǎn)生主鍵,可以看到,實(shí)體標(biāo)識(shí),主鍵生成,以及相關(guān)映像,都可以使用Annotation來完成。

    接下來撰寫一個(gè)測(cè)試的程序,這個(gè)程序直接以Java程序設(shè)計(jì)人員熟悉的語法方式來操作對(duì)象,而實(shí)際上也直接完成對(duì)數(shù)據(jù)庫(kù)的操作,程序?qū)?huì)將一筆數(shù)據(jù)存入表格之中:
    package onlyfun.caterpillar;
    ?
    import org.hibernate.SessionFactory;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.hibernate.cfg.Configuration;
    ?
    public class HibernateAnnotationDemo {
    ?
    ??? public static void main(String[] args) {
    ??????? // 需要AnnotationConfiguration讀取Annotation訊息
    ??????? Configuration config = new AnnotationConfiguration().configure();
    ??????? // 根據(jù) config 建立 SessionFactory
    ??????? // SessionFactory 將用于建立 Session
    ??????? SessionFactory sessionFactory = config.buildSessionFactory();
    ?
    ??????? // 將持久化的物件
    ??????? User user = new User();
    ??????? user.setName("caterpillar");
    ??????? user.setAge(new Integer(30));????
    ?
    ??????? // 開啟Session,相當(dāng)于開啟JDBC的Connection
    ??????? Session session = sessionFactory.openSession();
    ??????? // Transaction表示一組會(huì)話操作
    ??????? Transaction tx= session.beginTransaction();
    ??????? // 將對(duì)象映像至數(shù)據(jù)庫(kù)表格中儲(chǔ)存
    ??????? session.save(user);
    ??????? tx.commit();
    ??????? session.close();
    ??????? sessionFactory.close();
    ??????
    ??????? System.out.println("新增資料OK!請(qǐng)先用MySQL觀看結(jié)果!");
    ??? }
    }

    注意,使用Annotation時(shí),需要的是AnnotationConfiguration類別。

    如您所看到的,程序中只需要直接操作User對(duì)象,并進(jìn)行Session與Transaction的相關(guān)操作,Hibernate就會(huì)自動(dòng)完成對(duì)數(shù)據(jù)庫(kù)的操作,您看不到任何一行JDBC或SQL的陳述,撰寫好以上的各個(gè)檔案之后,各檔案的放置位置如下:


    接著可以開始運(yùn)行程序,結(jié)果如下:
    Hibernate: insert into user (name, age) values (?, ?)
    新增資料OK!請(qǐng)先用MySQL觀看結(jié)果!

    執(zhí)行結(jié)果中顯示了Hibernate所實(shí)際使用的SQL,由于這個(gè)程序還沒有查詢功能,所以要進(jìn)入MySQL中看看新增的數(shù)據(jù),如下:
    mysql> select * from user;
    +----+-----------------+------+
    | id??? | name???????? | age? |
    +----+-----------------+------+
    |? 1??? | caterpillar? | 30?? |
    +----+-----------------+------+
    1 row in set (0.03 sec)

    posted on 2006-09-01 14:00 Binary 閱讀(311) 評(píng)論(0)  編輯  收藏 所屬分類: Hibernate

    主站蜘蛛池模板: 色婷婷综合缴情综免费观看| 亚洲中文字幕无码mv| 一本到卡二卡三卡免费高| 亚洲AV无码成H人在线观看| 国产精品亚洲AV三区| 国产又粗又长又硬免费视频| 特色特黄a毛片高清免费观看| 亚洲六月丁香婷婷综合| 中文在线免费观看| 亚洲免费视频一区二区三区| 四虎影视精品永久免费网站| 亚洲中文字幕乱码熟女在线| 日韩a级毛片免费视频| 高潮内射免费看片| 亚洲中文字幕无码一区 | 97无码免费人妻超级碰碰碰碰 | 6080午夜一级毛片免费看| 2022年亚洲午夜一区二区福利| 18禁美女裸体免费网站| 亚洲熟妇久久精品| 亚洲毛片网址在线观看中文字幕| xxxxxx日本处大片免费看| 亚洲av无码精品网站| 国产高清免费视频| 老司机亚洲精品影院在线观看| 亚洲欧洲一区二区三区| 日本免费一区二区三区| 国产精品亚洲综合五月天| 免费一级做a爰片性色毛片| 国内永久免费crm系统z在线| 亚洲伊人久久大香线蕉在观| 亚洲国产精品毛片av不卡在线| 免费人成毛片动漫在线播放 | 亚洲一区无码精品色| 鲁大师在线影院免费观看| 亚洲乱妇熟女爽到高潮的片| 国产亚洲美日韩AV中文字幕无码成人| 最好免费观看高清在线| 亚洲国产欧美国产综合一区 | 最近2019中文字幕免费直播| 亚洲国产精品嫩草影院|