hibernate學習筆記 – JAVA編程語言程序開發技術文章

其實hibernate完全是建立在JDBC的基礎上的。

那為什麼還要用hibernate呢?

原因:使用JDBC查詢有太多重復性的轉換工作,連接數據庫的信息放在程序代碼中,一旦需要修改數據庫的信息時,必須重新修改,重新編譯。不利於程序的維護。

hibernate的優勢:

概括的說:hibernate是一個優秀的java持久化層解決方案。是當今主流的對象-關系映射工具。

1.松散耦合,hibernate既不會滲透到上層域模型中。也不會滲透到下層數據模型中軟件開發人員可以獨立設計域模型。不必強迫遵守任何規范

2.數據庫設計人員可以獨立設計數據庫。不必強迫遵守任何規范

3.對象-關系映射不依賴於任何程序代碼。如果需要修改對象-關系映射。隻需修改xml文件。不需要修改任何程序。提高瞭軟件的靈活性,復用性,並且使維護更加方便。

持久化和ORM:

狹義的理解: “持久化”僅僅指把域對象永久保存到數據庫中;廣義的理解,“持久化”包括和數據庫相關的各種操作(持久化就是將有用的數據以某種技術保存起來,將來可以再次取出來應用,數據庫技術,將內存數據一文件的形式保存在永久介質中(磁盤等)都是持久化的例子.)。

ORM:Object Relational Mapping 即對象關系映射。在編寫程序時,以面向對象的方式處理數據,保存數據時,卻以關系型數據庫的方式存儲,所以我們需要這個對象關系映射這個機制,將需要保存的對象與關系數據庫表建立聯系。簡單的說:ORM就是利用描述對象和數據庫之間的映射,自動的把java應用程序中的對象持久化到關系數據庫中的表。

大概瞭解後:我們開始一個hibernate的基礎小程序(CRUD)

首先導入jar包。前期工作不多說瞭。

首先創建主配置文件:hibernate.cfg.xml文件:這個文件是用於配置數據庫連接的信息和hibernate運行時所需要的各種屬性,該文件一定是放在src目錄下的。而且命名一定是hibernate.cfg.xml。

[java] 
<span style="white-space:pre">    </span><!–數據庫連接信息–> 
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property> 
        <property name="connection.username">root</property> 
        <property name="connection.password">root</property> 
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
        <!– 數據庫方言。就是高訴hibernate用哪種數據庫,並提供不同的數據庫方言  –> 
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> 
        <!– 顯示sql語句。在控制臺上顯示 –> 
        <property name="show_sql">true</property> 
        <!– 對數據類中的映射 –> 
        <mapping resource="com/test/bean/UserInfo.hbm.xml" /> 
然後在創建持久化映射文件:命名規范:類名.hbm.xml文件。一般都是放在實體類的同級目錄下的。

[java] view plaincopy
<class name="UserInfo" table="userinfo" lazy="true"> 
        <!– name對應類中的屬性。colmun:對應數據庫表中的字段 –> 
      <id name="userId" column="userId" type="java.lang.Integer"> 
        <!– 主鍵生成方式 –> 
          <generator class="increment"></generator> 
      </id> 
<property name="userName" column="userName" type="java.lang.String" /> 
<property name="userPwd" column="userPwd" type="java.lang.String" /> 
<property name="userAge" column="userAge" type="java.lang.Integer" /> 
<property name="userBirthday" column="userBirthday" type="java.util.Date" /> 
  </class> 
然後就是POJO類瞭。
[java] 
public UserInfo() { 
    super(); 
    // TODO Auto-generated constructor stub 

private Integer userId;//用戶id 
private String userName;//用戶名 
private String userPwd;//密碼 
private Integer userAge;//年齡 
private Date userBirthday;//出生日期 
 
public UserInfo(String userName, String userPwd, Integer userAge, 
        Date userBirthday) { 
    super(); 
    this.userName = userName; 
    this.userPwd = userPwd; 
    this.userAge = userAge; 
    this.userBirthday = userBirthday; 

public Integer getUserId() { 
    return userId; 

public void setUserId(Integer userId) { 
    this.userId = userId; 

public String getUserName() { 
    return userName; 

public void setUserName(String userName) { 
    this.userName = userName; 

public String getUserPwd() { 
    return userPwd; 

public void setUserPwd(String userPwd) { 
    this.userPwd = userPwd; 

public Integer getUserAge() { 
    return userAge; 

public void setUserAge(Integer userAge) { 
    this.userAge = userAge; 

public Date getUserBirthday() { 
    return userBirthday; 

public void setUserBirthday(Date userBirthday) { 
    this.userBirthday = userBirthday; 

在就是:獲取Session實例對象:

[java] 
public static SessionFactory sessionfactory; 
    static{ 
        //創建會話工廠 
        sessionfactory=new Configuration().configure().buildSessionFactory(); 
    } 
    public static Session getSession(){//獲取session對象 
        Session session=sessionfactory.openSession(); 
        return session; 
    } 
    public static void closeSession(Session session){//關閉session對象 
        if(session!=null){ 
            session.close(); 
        } 
    } 
最後就可以對用戶實行CRUD瞭。

先做一個save();

[java] 
<span style="white-space:pre">        </span>Session session=HibernateUtil.getSession();//獲取session 
        Transaction tx=session.beginTransaction();//開啟事物 
        try { 
            Userinfo user=new Userinfo("zhangsan", "123", 18, new Date()); 
            session.save(user);//保存對象 
            tx.commit();//提交事物 
        } catch (HibernateException e) { 
            if(tx!=null) 
                tx.rollback();//事物回滾 
            e.printStackTrace(); 
        } 
        finally{ 
            HibernateUtil.closeSession(session);//關閉session 
        } 
一個簡單的保存用戶就OK瞭。實現瞭面向對象的編程。

例子太多就不多說瞭。簡單介紹下hibernate的API吧。

保存:把域對象永久保存到數據庫。 session.save(Object o)

更新:更新數據庫中域對象的狀態。 session.update(Object o)

刪除:從數據庫中刪除一個域對象。 session.delete(Object o)

查詢:根據特定的查詢條件,把符合查詢條件的一個或多個域對象從數據庫加載內在存中。

有兩種方式查詢:session.get(class,id)和session.load(class,id)

get和load的區別在於:如果沒有查詢到該數據的時候,get()會返回null,load()會拋出異常。

hibernate中的實體對象的三種狀態:

1.瞬時狀態:在使用持久化操作前,沒有數據庫中的數據有任何的聯系。

2.持久化狀態:即實體對象在hibernate框架所管理的狀態。與數據中的數據建立瞭聯系。

3.遊離狀態:當session對象關閉時,但是對象和數據庫中建立瞭聯系,這時該對象並未受到session實例的管理。稱之為遊離狀態。或者說是托管狀態。

作者:yy008871
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *