• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    Hibernate 入門

    發布: 2007-6-06 17:38 | 作者: 網絡轉載 | 來源: 網絡 | 查看: 107次 | 進入軟件測試論壇討論

    領測軟件測試網

    本文配置環境:
    JBuilder X
    jdk 1.4.2
    Mysql 4.0.11 驅動:mm.mysql-2.0.4-bin.jar(org.gjt.mm.mysql.Driver)
    Hibernate 2.1

    解壓Hibernate

    打開JB,新建工程,名為:hibernate
    加入Hibernate需要的包與MYSQL驅動
    步驟:file->new project->name中輸入hibernate,directory選擇你要存放本工程的路徑->next

    ->required libraries->add->new->name中輸入你要設置的hibernate包名

    ->add->選擇你hibernate解壓到的目錄,選中該目錄下的hibernate2.jar與lib目錄下的所有jar包,再把你的MYSQL驅動包也加進去

    然后一直按OK,next。

    新建一個類,名為Hello_Bean.java,代碼如下:

    package hibernate;

    import java.io.Serializable;

    /**
    * @author geezer
    * QQ:9986986 MSN:geezer_hot@hotmail.com
    */

    public class Hello_Bean implements Serializable {

    private String name;//這里name與address和id的名字可以自己定,不會有什么影響.但get與set方法不可以。因為那得跟數據庫與配置文件對應。

    private String address;

    private int id;

    public Hello_Bean() {

    }

    public Hello_Bean(String name, String address) {//構造函數,看完本章以后相信你會明白的了
    this.name = name;
    this.address = address;
    }

    public String getName() {//此方法名必須與Hello_Bean.hbm.xml文件里的對應的名字一樣,下面會詳細講
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public String getAddress() {
    return address;
    }

    public void setAddress(String address) {
    this.address = address;
    }

    public int getId() {//必須的方法
    return id;
    }

    public void setId(int id)//必須的方法
    {
    this.id = id;
    }


    }

    完成這一步以后編譯

    將hibernate解壓后的目錄下的src文件夾里的hibernate.properties與log4j.properties文件復制到你的工程目錄的classes目錄下

    (例如hibernate\classes\目錄下),

    打開hibernate.properties文件,找到

    ## HypersonicSQL

    hibernate.dialect net.sf.hibernate.dialect.HSQLDialect
    hibernate.connection.driver_class org.hsqldb.jdbcDriver
    hibernate.connection.username sa
    hibernate.connection.password
    hibernate.connection.url jdbc:hsqldb:hsql://localhost
    hibernate.connection.url jdbc:hsqldb:test
    hibernate.connection.url jdbc:hsqldb:.

    改為

    ## HypersonicSQL

    #hibernate.dialect net.sf.hibernate.dialect.HSQLDialect
    #hibernate.connection.driver_class org.hsqldb.jdbcDriver
    #hibernate.connection.username sa
    #hibernate.connection.password
    #hibernate.connection.url jdbc:hsqldb:hsql://localhost
    #hibernate.connection.url jdbc:hsqldb:test
    #hibernate.connection.url jdbc:hsqldb:.

    再找到

    ## MySQL

    #hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
    #hibernate.connection.driver_class org.gjt.mm.mysql.Driver
    #hibernate.connection.driver_class com.mysql.jdbc.Driver
    #hibernate.connection.url jdbc:mysql:///test
    #hibernate.connection.username root
    #hibernate.connection.password

    改為


    ## MySQL

    hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
    hibernate.connection.driver_class org.gjt.mm.mysql.Driver
    hibernate.connection.url jdbc:mysql://localhost:3306/test
    hibernate.connection.username root
    hibernate.connection.password

    上面的URL請改為你自己的

    完成以后創建一個空的文件,保存在你工程的類文件同個文件夾里(例如hibernate\classes\hibernate\目錄下),文件名為:Hello_Bean.hbm.xml

    內容如下:

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <hibernate-mapping>

    <class name="hibernate.Hello_Bean" table="test_hibernate" >

    <id name="id" column="id">

    <generator class="identity"/>

    </id>

    <property name="name" type="string" update="true" insert="true" column="name" />
    <property name="address" type="string" update="true" insert="true" column="address" />

    </class>

    </hibernate-mapping>

    稍微解釋一下,<class name="hibernate.Hello_Bean" table="test_hibernate" >里的name指你的生成表的類,

    table則指定你要創建的數據庫表的名字,可以自由修改,沒有影響.

    <id name="id" column="id">設置主鍵ID,這里name的值id跟Hello_Bean.java里的方法getId與setId對應,不用管這個,hibernate會自動調用,配置好就可以了,column的值為要生成的字段名,可以自由修改,沒有影響。

    <generator class="identity"/>屬性讓主鍵的ID自增(插入數據的時候自動加1)

    <property name="name" type="string" update="true" insert="true" column="name" />這里的name值"name"跟Hello_Bean.java里的getName方法對應,column為要生成的字段名
    <property name="address" type="string" update="true" insert="true" column="address" />

    分別添加一個字段name與address,注意這里的type屬性類型為string,如果這里的類型與Hello_Bean.java里設置的類型不一樣會出錯。

    修改完以后保存。

    最后在JB里新建一個類,名字為Hello.java,我會一步步解釋,代碼如下:

    package hibernate;

    import net.sf.hibernate.cfg.Configuration;
    import net.sf.hibernate.SessionFactory;
    import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
    import net.sf.hibernate.Session;
    import net.sf.hibernate.Query;
    import net.sf.hibernate.Hibernate;
    import net.sf.hibernate.type.LongType;
    import net.sf.hibernate.Transaction;
    import net.sf.hibernate.ScrollableResults;
    import java.util.*;

    /**
    * @author geezer
    * QQ:9986986 MSN:geezer_hot@hotmail.com
    */


    public class Hello {


    public Hello() {


    }

    public static void main(String[] args) throws Exception {

    Configuration cfg = new Configuration().addClass(Hello_Bean.class);//用Hello_Bean.class類初始化

    SessionFactory sessions = cfg.buildSessionFactory();//用buildSessionFactory方法得到一個SessionFactory對象

    Session session = sessions.openSession();//再用SessionFactory的openSession方法得到一個session

    new SchemaExport(cfg).create(true, true);//這句意思是創建表,第一次運行以后,就是創建完表以后再把這行加上注釋。如果建表以后不把這一句注釋掉的話會刪掉以前創建的表再重新建一個。


    Hello_Bean my_hibernate = new Hello_Bean();//得到一個Hello_Bean對象

    my_hibernate.setName("my_name");//設置Hello_Bean對象的name值為my_name,這里其實就是說把字符串my_name當作數據庫字段name的值.數據庫字段name與Hello_Bean類里的getName,setName方法是對應的。形成一個映射關系。

    my_hibernate.setAddress("my_address");//如上

    session.save(my_hibernate);//這句很重要,將my_hibernate對象寫進數據庫(my_hibernate對象里的name與address我們剛剛已經設置了值了,會直接把name,address的值寫進數據庫去)

    session.flush();
    session.close();


    //上面是一個簡單的插入數據與第一次運行建表的介紹,下面我再介紹刪除與修改的方法,下面的代碼我都加了注釋,自己需要什么方法(刪除,修改,循環數據庫的值)就把注釋去掉就可以了
    HSQL比較簡單,大家看一下例子就應該明白了,這里就不講了。
    遍歷數據庫的方法有三種,分別是Query,find,iterate,Query和find返回一個List接口,iterate返回一個Iterator,具體方法可以查看這些類得知。

    //刪除數據
    /*
    int a=session.delete("from Hello_Bean where id=1");//如果沒有找到id為1的數據那么返回0,如果找到返回1,這里的Hello_Bean是我們的Hello_Bean類,他跟數據庫表對應,所以我們在這里是直接用Hello_Bean來代碼數據庫表的。
    System.out.println(a);
    session.flush();
    session.close();

    */

    //Query方法查詢數據
    /*
    Hello_Bean my_hibernate = null;
    Query q = session.createQuery("from Hello_Bean");
    // Query q = session.createQuery("from Hello_Bean where name=?");//這里的?跟JDBC的PreparedStatement方法的差不多,只不過這里的是以0開始,jdbc的是1開始。
    // q.setString(0,"my_name");
    // q.setFirstResult(0);//這句話的意思是說查詢結果從第幾行開始列出數據
    // q.setMaxResults(3);//這句話的意思是取多少條數據,就跟SQL SERVER的TOP方法和MYSQL的LIMIT方法一樣的意思。
    // ScrollableResults sc=q.scroll();//得到一個ScrollableResults,可滾動的,如果你的數據庫支持游標自由移動的話可以加上,也就是說可以判斷查詢結果有沒有值,或者移動到下一行記錄等等。

    // if(!sc.next())
    // {
    // System.out.println("沒有找到你需要的數據");
    // }

    session.flush();//如果使用了ScrollableResults的話請把這行注釋掉
    session.close();//如果使用了ScrollableResults的話請把這行注釋掉

    List l=q.list();//返回一個List接口,用來遍歷結果集

    for(int i=0;i<l.size();i++){
    my_hibernate = (Hello_Bean) l.get(i);//從List中取得一個my_hibernate對象
    System.out.println(my_hibernate.getName());//調用my_hibernate對象的getName方法取得數據庫name字段的值

    }

    */

    //find方法查詢數據
    /*
    Hello_Bean my_hibernate = null;
    List q = session.find("from Hello_Bean");
    session.flush();
    session.close();

    for(int i=0;i<q.size();i++)
    {
    my_hibernate = (Hello_Bean) q.get(i);
    System.out.println(my_hibernate.getName());
    }
    */

    //iterate方法查詢數據
    /*
    Hello_Bean my_hibernate = null;
    Iterator q = session.iterate("from Hello_Bean");

    while(q.hasNext())
    {
    my_hibernate = (Hello_Bean) q.next();
    System.out.println(my_hibernate.getName());
    }

    */

    //修改數據
    /*
    Query qq=session.createQuery("from Hello_Bean");

    Hello_Bean my_hibernate=(Hello_Bean)session.load(Hello_Bean.class,new Integer(2));
    //這里的new Integer(2)意思是修改表中id為2的那一行數據,必須是一個包裝類的對象,如果使用int的話會出錯。
    my_hibernate.setName("geezer");//把id為2的那一行數據的name字段值改為"geezer"
    session.flush();
    session.close();

    */

    }

    }

    最后運行就可以了。

    如果大家有什么不清楚的,可以下載這篇文章的例子看看,運行一下。

    下載地址:http://www.phpx.com/happy/attachment.php?s=&postid=599353

    下載完以后用JB打開hibernate.jpx就可以了。用之前把hibernate和MYSQL的驅動加進去,方法如果不知道再看看本章開頭部分。


    常見錯誤:
    Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence.
    如果出現這行錯誤說明你的xml配置文件有不規范的字符,檢查下。

    net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml


    如果出現這行錯誤說明你的hibernate的XML配置文件有錯

    net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found


    如果出現這行錯誤說明hibernate的XML配置文件沒有找到,你應該把XML文件放在與你的類文件同個目錄下,本文中是放在hibernate\classes\hibernate\目錄下,也就是跟Hello_Bean.class類文件一起。

    net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean


    如果出現這行錯誤說明你的xml文件里設置的字段名name的值與Hello_Bean.java類里的getXXX或setXXX方法不一致。

    net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver
    如果出現這行錯誤說明你的MYSQL驅動沒有加進JB庫里或者不在CLASSPATH里。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: hibernate 入門


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>