日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hibernate的初次使用

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate的初次使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載地址:http://blog.csdn.net/aboy123/article/details/10222675

一、Hibernate概述

(一)什么是Hibernate?

? ? ? ? ? ?hibernate核心內容是ORM(關系對象模型)。可以將對象自動的生成數據庫中的信息,使得開發更加的面向對象。這樣作為程序員就可以使用面向對象的思想來操作數據庫,而不用關心繁瑣的JDBC。所以,Hibernate處于三層架構中的D層(持久層)。

(二)使用Hibernate的優點

1、Hibernate可以使用在Java的任何項目中,不一定非要使用在Java web項目中。因為Hibernate不需要類似于tomact這些容器的支持,可以直接通過一個main方法進行測試。

2、通過下面的實例,可以發現使用Hibernate可以大大減少代碼量。

3、由于使用了Hibernate,代碼中不涉及具體的JDBC語句,所以就方便了代碼的可移植性。

二、Hibernate開發的環境搭建

(一)Hibernate的環境搭建非常簡單,只需要引入Hibernate核心包(單擊下載)以及Hibernate依賴包(單擊下載)即可。 (二)加入數據庫驅動。下面的例子中主要是采用Mysql數據庫來演示的,所以在這里引入MysqL的JDBC驅動(點擊下載)。 (三)提供核心配置文件hibernate.cfg.xml文件(在src文件夾下即可)。其中的配置如下(針對mysql) [html] view plaincopyprint?
  • <!DOCTYPE?hibernate-configuration?PUBLIC??
  • ????"-//Hibernate/Hibernate?Configuration?DTD?3.0//EN"??
  • ????"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">??
  • ??
  • <hibernate-configuration>??
  • ????<session-factory?>??
  • ????????<!--?mysql數據庫驅動?-->??
  • ????????<property?name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>??
  • ????????<!--?mysql數據庫名稱?-->??
  • ????????<property?name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>??
  • ????????<!--?數據庫的登陸用戶名?-->??
  • ????????<property?name="hibernate.connection.username">root</property>??
  • ????????<!--?數據庫的登陸密碼?-->??
  • ????????<property?name="hibernate.connection.password">root</property>??
  • ????????<!--?方言:為每一種數據庫提供適配器,方便轉換?-->??
  • ????????<property?name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>??
  • ??????????
  • ????</session-factory>??
  • </hibernate-configuration>??
  • <!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><!-- mysql數據庫驅動 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!-- mysql數據庫名稱 --><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property><!-- 數據庫的登陸用戶名 --><property name="hibernate.connection.username">root</property><!-- 數據庫的登陸密碼 --><property name="hibernate.connection.password">root</property><!-- 方言:為每一種數據庫提供適配器,方便轉換 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property></session-factory> </hibernate-configuration>

    三、HIbernate第一個實例

    該實例的目錄結構如下 說明:最后一個HIBERNATE3里面包含了所有的需要引用的jar包
    1、新建一個普通的java項目,按照上面的步驟引入相關的jar包和配置文件
    2、建立User實體類 [java] view plaincopyprint?
  • import?java.util.Date;??
  • ??
  • public?class?User?{??
  • ????private?String?id;??
  • ????private?String?username;??
  • ????private?String?password;??
  • ????private?Date?createTime;??
  • ????private?Date?expireTime;??
  • ??????
  • ????public?String?getId()?{??
  • ????????return?id;??
  • ????}??
  • ????public?void?setId(String?id)?{??
  • ????????this.id?=?id;??
  • ????}??
  • ????public?String?getUsername()?{??
  • ????????return?username;??
  • ????}??
  • ????public?void?setUsername(String?userName)?{??
  • ????????this.username?=?userName;??
  • ????}??
  • ????public?String?getPassword()?{??
  • ????????return?password;??
  • ????}??
  • ????public?void?setPassword(String?password)?{??
  • ????????this.password?=?password;??
  • ????}??
  • ????public?Date?getCreateTime()?{??
  • ????????return?createTime;??
  • ????}??
  • ????public?void?setCreateTime(Date?createTime)?{??
  • ????????this.createTime?=?createTime;??
  • ????}??
  • ????public?Date?getExpireTime()?{??
  • ????????return?expireTime;??
  • ????}??
  • ????public?void?setExpireTime(Date?expireTime)?{??
  • ????????this.expireTime?=?expireTime;??
  • ????}??
  • }??
  • import java.util.Date;public class User {private String id;private String username;private String password;private Date createTime;private Date expireTime;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String userName) {this.username = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}public Date getExpireTime() {return expireTime;}public void setExpireTime(Date expireTime) {this.expireTime = expireTime;} }
    2、提供User.hbm.xml文件,完成實體類的映射 [html] view plaincopyprint?
  • <?xml?version="1.0"?>??
  • <!DOCTYPE?hibernate-mapping?PUBLIC???
  • ????"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"??
  • ????"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">??
  • ??????
  • <hibernate-mapping>??
  • ????<class?name="com.example.hibernate.User">??
  • ????????<id?name="id">??
  • ????????????<generator?class="uuid"/>??
  • ????????</id>??
  • ????????<property?name="username"/>??
  • ????????<property?name="password"/>??
  • ????????<property?name="createTime"/>??
  • ????????<property?name="expireTime"/>??
  • ????</class>??
  • </hibernate-mapping>??
  • <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.example.hibernate.User"><id name="id"><generator class="uuid"/></id><property name="username"/><property name="password"/><property name="createTime"/><property name="expireTime"/></class> </hibernate-mapping>其中的property標簽是將要生成是數據庫表中的字段,在這里不用關心各個字段是什么類型的。因為Hibernate會根據上面的實體類中屬性的類型來決定將來表中字段的類型
    3、配置hibernate.cfg.xml文件 [html] view plaincopyprint?
  • <hibernate-configuration>??
  • ????<session-factory?>??
  • ????????<!--?mysql數據庫驅動?-->??
  • ????????<property?name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>??
  • ????????<!--?mysql數據庫名稱?-->??
  • ????????<property?name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>??
  • ????????<!--?數據庫的登陸用戶名?-->??
  • ????????<property?name="hibernate.connection.username">root</property>??
  • ????????<!--?數據庫的登陸密碼?-->??
  • ????????<property?name="hibernate.connection.password">root</property>??
  • ????????<!--?方言:為每一種數據庫提供適配器,方便轉換?-->??
  • ????????<property?name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>??
  • ??????????
  • ????????<span?style="color:?rgb(255,?0,?0);"><mapping?resource="com/example/hibernate/User.hbm.xml"/></span>??
  • ????</session-factory>??
  • </hibernate-configuration>??
  • <hibernate-configuration><session-factory ><!-- mysql數據庫驅動 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!-- mysql數據庫名稱 --><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property><!-- 數據庫的登陸用戶名 --><property name="hibernate.connection.username">root</property><!-- 數據庫的登陸密碼 --><property name="hibernate.connection.password">root</property><!-- 方言:為每一種數據庫提供適配器,方便轉換 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><mapping resource="com/example/hibernate/User.hbm.xml"/></session-factory> </hibernate-configuration>注意:必須是“/”而不能是“.”。 4、生成表:編寫工具類ExoprtDB.java,將hbm生成ddl [java] view plaincopyprint?
  • import?org.hibernate.cfg.Configuration;??
  • import?org.hibernate.tool.hbm2ddl.SchemaExport;??
  • /**?
  • ?*?將hbm生成ddl?
  • ?*?@author?BCH?
  • ?*?
  • ?*/??
  • public?class?ExoprtDB?{??
  • ??
  • ????public?static?void?main(String[]?args)?{??
  • ????????//默認讀取hibernate.cfg.xml文件??
  • ????????Configuration?cfr?=?new?Configuration().configure();??
  • ??????????
  • ????????SchemaExport?export?=?new?SchemaExport(cfr);??
  • ????????export.create(true,?true);??
  • ????}??
  • }??
  • import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; /*** 將hbm生成ddl* @author BCH**/ public class ExoprtDB {public static void main(String[] args) {//默認讀取hibernate.cfg.xml文件Configuration cfr = new Configuration().configure();SchemaExport export = new SchemaExport(cfr);export.create(true, true);} } 到這里就可以生成User表了,但是如果直接運行ExoprtDB.java文件是不能生成User表的。因為在mysql數據中還沒有建立數據庫Hibernate-first。所以在mysql控制臺中通過create database hibernate-first; use hibernate-first;之后再執行ExoprtDB.java文件就可以生成表了。
    5、向表中添加數據 [java] view plaincopyprint?
  • import?java.util.Date;??
  • ??
  • import?org.hibernate.Session;??
  • import?org.hibernate.SessionFactory;??
  • import?org.hibernate.cfg.Configuration;??
  • ??
  • public?class?Client?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????//讀取配置文件??
  • ????????Configuration?cfg?=?new?Configuration().configure();??
  • ??????????
  • ????????SessionFactory?factory?=?cfg.buildSessionFactory();??
  • ??????????
  • ????????Session?session?=?null;??
  • ????????try{??
  • ????????????session?=?factory.openSession();??
  • ????????????//開啟事務??
  • ????????????session.beginTransaction();??
  • ??????????????
  • ????????????User?user?=?new?User();??
  • ????????????user.setUsername("用戶名");??
  • ????????????user.setPassword("123");??
  • ????????????user.setCreateTime(new?Date());??
  • ????????????user.setExpireTime(new?Date());??
  • ??????????????
  • ????????????session.save(user);??
  • ????????????//提交事務??
  • ????????????session.getTransaction().commit();??
  • ??????????????
  • ????????}catch(Exception?e){??
  • ????????????e.printStackTrace();??
  • ????????????//回滾事務??
  • ????????????session.getTransaction().rollback();??
  • ????????}finally{??
  • ????????????if(session?!=?null){??
  • ????????????????if(session.isOpen()){??
  • ????????????????????//關閉session??
  • ????????????????????session.close();??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ????}??
  • }??
  • import java.util.Date;import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration;public class Client {public static void main(String[] args) {//讀取配置文件Configuration cfg = new Configuration().configure();SessionFactory factory = cfg.buildSessionFactory();Session session = null;try{session = factory.openSession();//開啟事務session.beginTransaction();User user = new User();user.setUsername("用戶名");user.setPassword("123");user.setCreateTime(new Date());user.setExpireTime(new Date());session.save(user);//提交事務session.getTransaction().commit();}catch(Exception e){e.printStackTrace();//回滾事務session.getTransaction().rollback();}finally{if(session != null){if(session.isOpen()){//關閉sessionsession.close();}}}} }
    執行該java文件就可以完成向表中增加數據了,效果如下

    (四)總結

    通過上面的代碼我們可以看出,在代碼中沒有涉及到任何有關JDBC的代碼,作為開發人員只需要寫好相應的實體類,然后通過配置就可以實現了表的建立以及向表中實現數據的插入。 在代碼中有許多Hibernate的核心對象,例如Configuration、SessionFactory、Session等等。這些內容將在以后介紹。

    一、什么是映射

    在上一篇文章中?新手上路之Hibernate:第一個Hibernate例子,通過一個例子了解了什么是hibernate。而其中最重要的就是通過User.hbm.xml來配置映射。這里所說的映射就是對象關系映射:將對象數據保存到數據庫中,同時可以將數據庫數據讀入對象中,開發人員只對對象進行操作就可以完成對數據庫數據的操作。


    二、什么是基本映射

    知道了什么是映射,那么我們先來看一下最基本的映射關系——基本映射,即根據表結構創建相應實體類


    例如:還是以MySQL數據庫為例,進行說明。有如下一張表:

    建立相應的實體類:User

    [java]?view plaincopy
  • public?class?User?{??
  • ????private?String?id;??
  • ????private?String?username;??
  • ??????
  • ????public?String?getId()?{??
  • ????????return?id;??
  • ????}??
  • ????public?void?setId(String?id)?{??
  • ????????this.id?=?id;??
  • ????}??
  • ????public?String?getUsername()?{??
  • ????????return?username;??
  • ????}??
  • ????public?void?setUsername(String?userName)?{??
  • ????????this.username?=?userName;??
  • ????}??
  • }??

  • 對于Hibernate來說,最重要的就是配置文件,即還需要一個User.hbm.xml文件

    [html]?view plaincopy
  • <hibernate-mapping>??
  • ????<class?name="com.example.hibernate.User"?table="t_user">??
  • ????????<id?name="id">??
  • ????????????<generator?class="uuid"/>??
  • ????????</id>??
  • ????????<property?name="username"/>??
  • ??????????
  • ????</class>??
  • </hibernate-mapping>??

  • 其他部分的代碼參照上一篇文章即可。


    三、建立User實體類的一些原則

    ? ? ? ?1、實現無參的默認的構造函數

    ? ? ? ?2、提供一個標識

    ? ? ? ?3、建議不要使用fianl修飾實體類

    ? ? ? ?4、建議為實體類生成setter和getter方法

    對于第3條建議,如果使用了fianl關鍵字,那么延遲加載(load)將會無效。具體含義將會在下一篇文章中給出實例。


    四、HIbernate主鍵生成策略

    在上面User.hbm.xml配置文件中有一個標簽:<generator>。它表示的是主鍵生成策略。主鍵生成策略必須配置,用來為該持久化類的實例生成唯一的標識。它有如下幾種策略

    ? ? uuid: 用一個128-bit的UUID算法生成字符串類型的標識符,這在一個網絡中是唯一的(使用了IP地址),UUID被編碼為一個32位16進制數字的字符串,它的生成是由Hibernate生成,一般不會重復UUID包含:IP地址,JVM的啟動時間,系統時間和一個計算器值。

    ? ? identity:MySql數據庫中自增長

    ? ? Sequence:Oracle數據庫自增長

    ? ? native:根據底層數據庫能力選擇identity、sequence中的一個。

    ? ? assigned:手動分配主鍵.<generator>沒有指定時的默認生成策略

    ? ? foreign:使用另外一個相關聯的對象的標示符。通常和<one-to-one>配合使用

    五、總結

    概括一下Hibernate的基本映射就是: 實體類——對應了——數據庫中表、實體類中的屬性——對應了——表中字段。

    總結

    以上是生活随笔為你收集整理的hibernate的初次使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。