*2 hibernate快速入門
1)開發步驟:
>>導入hibernate相關的10個jar包,如果後面,要用到其它功能,可以添加新jar包 (包括了MySQL的驅動包)
>>創建表:customers.sql
>>創建實體:Customer.java
>>創建Customer.hbm.xml映射文件,目的是通知hibernate框架,如何將實體和表關聯起來
>>創建hibernate.cfg.xml配置文件,目的是通知hibernate框架,如何連接不同的數據庫和產生不同數據庫的SQL命令
>>測試類:CURD操作(CustomerService)
2具體步驟詳解
>>jar 包:
antlr-2.7.6.jar 一個語言轉換工具,Hibernate利用它實現 HQL 到 SQL 的轉換
commons-collections-3.1.jar collections Apache 的工具集,用來增強Java對集合的處理能力
dom4j-1.6.1.jar dom4j XML 解析器
hibernate3.jar 核心包
javassist-3.9.0.GA.jar 代碼生成工具, Hibernate用它在運行時擴展 Java類
jta-1.1.jar 標準的 JAVA 事務處理接口
log4j.jar 日誌包
mysql-connector-java-5.1.7-bin.jar mysql驅動包
slf4j-api-1.5.8.jar slf4j-log4j12.jar hibernate使用的一個日誌系統
>>創建sql表
例: dropdatabaseifexists hibernate;
createdatabaseifnotexists hibernate;
use hibernate;
droptableifexists customer;
createtableifnotexists customer(
id intprimarykey auto_increment,
namevarchar(20) default "小小",
ageintdefault 21,
des varchar(100) default "文雅"
);
select * from customer;
>>Customer.hbm.xml文件
1.Hibernate 採用 XML 格式的文件來指定對象和關係數據之間的映射. 在運行時 Hibernate 將根據這個映射文件來生成各種 SQL 語句, 映射文件的擴展名爲 .hbm.xml 如;Customer.hbm.xml文件. 如: 以上Customer.hbm.xml文件是Customer類和customers表的對應關係。該文件前綴必須和類名一致,後綴必須是.hbm.xml。文件位置任意
2. property元素:設定持久化類的屬性和表字段映射
name屬性:指定持久化類的屬性的名字
column屬性:指定表中字段的名稱
type屬性指定Hibernate映射類型 Hibernate映射類型是java類型與SQL類型的橋樑
.hbm.xml文件的來源:
hibernate-distribution-3.5.6-Final-dist.zip\hibernate-distribution-3.5.6-Final\project\tutorials\web\src\main\resources\org\hibernate\tutorial\domain......
注:該映射文件的規範在org.hibernate. hibernate-mapping-3.0.dtd文件中
例:
Customer.hbm.xml文件的屬性含義:
<hibernate-mapping package="cn.itcast.web.hibernate.character0(實體對象的包名)">
<class name="Customer(類名)" table="CUSTOMERS(表名)">
<id name="id" column="ID" type="integer">
<generator class="increment"/>
</id>
<property name="name(屬性名)" column="NAME(列名)" type="string(hibernate類型)"/>
<property name="age(屬性名)" column="AGE(列名)" type="integer(hibernate類型)"/>
<property name="des(屬性名)" column="DES(列名)" type="string(hibernate類型)"/>
</class>
</hibernate-mapping>
>>hibernate.cfg.xml文件
創建 Hibernate 配置文件, Hibernate 從其配置文件中讀取和數據庫連接的有關信息, 這個文件應該位於應用的 classpath 下.
文件名必須是hibernate.cfg.xml,文件位置任意, 除了使用xml作爲配置文件之除,還可以使用hibernate.properties文件(項目中不提倡)。
注:該映射文件的規範在org.hibernate.hibernate-configuration-3.0.dtd文件中
文件的來源: hibernate-distribution-3.5.6-Final-dist.zip\hibernate-distribution-3.5.6-Final\project\tutorials\web\src\main\resources
例:
hibernate.cfg.xml文件的屬性含義:
<hibernate-configuration>
<session-factory>
<!-- 配置連接數據庫的相關屬性 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver(驅動類名)</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernate(URL)</property>
<property name="connection.username">root(訪問數據庫的用戶名)</property>
<property name="connection.password">root(訪問數據庫的密碼)</property>
<!-- 通知hibernate動態生成哪個數據庫的SQL命令 -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect(數據庫的方言)</property>
<!-- 顯示hibernate動態生成的SQL命令,true表示顯示 -->
<property name="show_sql">true(需要顯示sq命令)</property>
<!-- 加載對象和關係的映射文件 -->
<mapping resource="cn/itcast/web/hibernate/character0/Customer.hbm.xml(映射文件的類路徑)"/>
</session-factory>
</hibernate-configuration>
>>Configuration類:
是hibernate中一個用於加載hibernate.cfg.xml文件的類,config .config(“xml文件的類路徑”)方法能夠加載指定目錄下的hibernate.cfg.xml文件,config.buildSessionFactory()創建一個SessionFactory工廠。該工廠有大量空閒的session.
Configuration 類負責管理 Hibernate 的配置信息。包括如下內容:
Hibernate運行的底層信息:數據庫的URL、用戶名、密碼、JDBC驅動類,數據庫Dialect,數據庫連接池等(對應 hibernate.cfg.xml 文件)。持久化類與數據表的映射關係(*.hbm.xml 文件).
創建 Configuration 的兩種方式
• 屬性文件(src/hibernate.properties):
Configuration cfg = new Configuration();
• Xml文件(src/hibernate.cfg.xml)推薦
Configuration cfg = new Configuration().configure();
Configuration cfg = new Configuration().configure(“目錄”);
>>SessionFactory接口
保存了當前的數據庫配置信息和所有映射關係以及預定義的SQL語句。同時,SessionFactory還負責維護Hibernate的二級緩存,有且只放置一種類型數據庫的相關信息 , 重量級,即創建需要大量時間和資源,因此將創建SessionFactory的工作,放在static塊中,只創建一個,便於重用 , SessionFactory是一個線程安全的,所以可以定義成實例變量,無需加synchronized。
創建方式:
Configuration cfg = new Configuration().configure();
SessionFactory sf = cfg.buildSessionFactory();
>>Session
SessionFactory.openSession()
Session是由SessionFactory獲取而來,它是輕量級,即創建需要少量時間和資源,每次數據庫的操作(CURD)都需要一個Session的綁助,沒有Session就無法與數據庫表操作。
Session 是應用程序與數據庫之間交互操作的一個單線程對象,是 Hibernate 運作的中心,所有持久化對象必須在 session 的管理下纔可以進行持久化操作。此對象的生命週期很短。Session 對象有一個一級緩存,顯式執行 flush 之前,所有的持久層操作的數據都緩存在 session 對象處。相當於 JDBC 中的 Connection
Session常用的API
session.save(對象) //向數據庫插入數據
session.update(對象) //更新數據
session.delete(對象) //刪除數據
session.get(對象的字節碼class文件,序號) //查詢數據
//查詢所有數據信息
String hibernateSQL = " from 需要查詢的類的類名"; 例如: 查詢User類 String hibernateSQL = " from User"; 此處的類名一個要和創建的類名保持一致.
Query query = session.createQuery("hibenate query language語句,不是sql語句")
例: Query query = session.createQuery(hibernateSQL) ;
List<類> list = query.list()
Session是不安全的,不要定義成實例變量,除非加synchronized。
將Session定義成局部變量,即在某個方法內部,就無需加synchronized。
>>Transaction接口(事物)
通過session.getTransaction()取得事務對象,在應用時,除查詢外,其它都需要事務的支持,查詢對事務的要求不限(可選),
開始事務:t.begin()
提交事務:t.commit()
回滾事務:t.rollback()
顯示try..catch...finally...
例:
publicvoid saveCustomer(){
//創建customer對象,並設置屬性值
Customer cus = new Customer();
cus.setName("思思");
cus.setAge(21);
cus.setDes("文靜");
//創建confingration對象
Configuration config = new Configuration();
//加載配置文件,連接驅動
config.configure("cn/web/hibernate/hibernate.cfg.xml");
//創建sessionfactory
SessionFactory sessionfactory = config.buildSessionFactory();
//創建session
Session session = sessionfactory.openSession();
//創建事物
Transaction transaction= session.getTransaction();
try {
//事物開始
transaction.begin();
//保存實體域對象到表中
session.save(cus);
} catch (HibernateException e) {
//錯誤的情況下事物恢復到原有的狀態
transaction.rollback();
}finally{
//事務結束
transaction.commit();
}
session.close();
}