Hibernate簡介
Hibernate寓意:Let Java objects hibernate in the relational database.
Hibernate 是Java應用和關系數據庫之間的橋梁,負責Java對象和關系數據庫之間的映射的ORM中間件。Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java開發人員可以隨心所欲的使用對象編程思維來操縱數據庫。簡單的說就是:
1.封裝了通過JDBC訪問數據庫操作。
2.向上層應用提供訪問面向對象數據訪問的API。
創建Hibernate配置文件
通過一個例子practice 演示如何運用Hibernate來訪問關系數據庫。
Practice 工程的功能:
通過Hibernate保存客戶(customer)信息。
其Hibernate應用結構圖如下:
―――――――――――――――――――――――――――
Practice 應用
Customer Class ; action Class;Business Class
――――――――――――――――――――――――――――
――――――――――――――――――――――――――――
Hibernate xml
對象-關系映射文件 Hibernate ApI
Hibernate 配置文件
――――――――――――――――――――――――――――
――――――――――――――――――――――――――――
關系數據庫(Mysql)
CUSTOMERS 表
――――――――――――――――――――――――――――
創建持久化類
Hibernate 從Hibernate配置文件中讀取和數據庫連接相關的信息。
配置文件有兩種形式:
一種是XML格式的文件:hibernate.cfg.xml
一種是Java屬性文件:hibernate.properties
這個實例中我們將使用hibernate.cfg.xml。
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
true
false
net.sf.hibernate.dialect.MySQLDialect
org.gjt.mm.mysql.Driver
jdbc:mysql://localhost:3306/netstore
root
123456
true
gb2312
插入位置在src目錄下:
創建O/R對象-關系映射文件
創建持久化的類Customer.java
package entity;import java.io.Serializable;
public class Customers implements Serializable {
private Integer id;
private String name;
private int age;
public Customers() {
}
public int getAge() {
return age; }
public void setAge(int age) {
this.age = age;
}
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;
}}
Get/set 方法的命名必須符合JavaBean的規范,否則Hibernate會報出異常,具體請參照相關資料。
關於Serializable接口:
Hibernate 並不要求持久化類必須實現java.io.Serializable接口,但是對於采用分布式結構的Java應用,當Java對象在不同的進程節點之間傳輸時,這個對象必須實現這個接口;如果希望對HttpSession中存放的Java對象進行持久化,那麼這個Java對象必須實現Serializable接口。
關於不帶參數的構造方法:
public Customers() { }
Hibernate要求持久化類必須提供一個不帶參數的默認的構造方法,原因請參考相關資料。
創建Mysql數據庫
數據庫名稱:netstroe
Customer表DDL定義如下:CREATE TABLE `customers` ( `Id` bigint(20) NOT NULL default '0', `name` varchar(15) default NULL, `age` int(11) default NULL, PRIMARY KEY (`Id`)) TYPE=MyISAM;
創建對象-關系映射文件
創建對象-關系映射文件:Customers.hbm.xml
代碼如下:
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
name="entity.Customers"
table="customers">
name="id"
type="java.lang.Integer"
column="id"
>
name="name"
type="java.lang.String"
column="name"
length="15"
/>
name="age"
type="int"
column="age"
length="11"
/>
引入Hibernate所需的jar包
Hibernate2.jar、hibernate-tools.jar
通過Hibernate API 訪問MYSQL數據庫
創建業務邏輯類:useHibernate.java
代碼如下:
package business;
import entity.Customers;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.cfg.Configuration;
public class useHibernate {
public static SessionFactory sessionFactory;
/** 初始化Hibernate,創建SessionFactory實例 */
public void saveCustomers(Customers customers) throws Exception {
Configuration config = null;
config = new Configuration().configure();
// 創建一個SessionFactory 實例
sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
/* 開始一個事務 */
tx = session.beginTransaction();
session.save(customers);
/* 提交事務 */
tx.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
if (tx != null)
tx.rollback();
throw e;
} finally {
session.close();
}
}}
測試Hibernate配置是否成功
創建Junit測試:testhibernate.java
有關Junit請參考相關資料:
package test;
import business.useHibernate;
import entity.Customers;import junit.framework.TestCase;
Customers customers = new Customers();
customers.setId(new Integer(330121));
customers.setAge(24);
customers.setName("huhpreal");
useHibernate usehibernate = new useHibernate();
try {
usehibernate.saveCustomers(customers);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
查看後台打印信息:
(cfg.Environment 403 ) Hibernate 2.0.3
(cfg.Environment 432 ) hibernate.properties not found
(cfg.Environment 452 ) using CGLIB reflection optimizer
(cfg.Environment 462 ) JVM proxy support: true
(cfg.Configuration 703 ) Configuration resource: /hibernate.cfg.xml
(cfg.Configuration 270 ) Mapping resource: hbm/Customers.hbm.xml
(cfg.Binder 178 ) Mapping class: entity.Customers -> customers
(cfg.Configuration 885 ) Configured SessionFactory: null
(cfg.Configuration 492 ) processing one-to-many association mappings
(cfg.Configuration 503 ) processing foreign key constraints
(impl.SessionFactoryImpl 132 ) building session factory
(dialect.Dialect 83 ) Using dialect: net.sf.hibernate.dialect.MySQLDialect
(connection.DriverManagerConnectionProvider 41 ) Hibernate connection pool size: 20
(connection.DriverManagerConnectionProvider 70 ) using driver: org.gjt.mm.mysql.Driver at URL: jdbc:mysql://localhost:3306/netstore
(connection.DriverManagerConnectionProvider 71 ) connection properties: {useUnicode=true, user=root, password=123456, characterEncoding=gb2312}
(impl.SessionFactoryImpl 162 ) Use outer join fetching: false
(impl.SessionFactoryImpl 185 ) Use scrollable result sets: true
(impl.SessionFactoryImpl 186 ) JDBC 2 max batch size: 15
(impl.SessionFactoryImpl 194 ) echoing all SQL to stdout
(impl.SessionFactoryObjectFactory 82 ) no JDNI name configured
(impl.SessionFactoryImpl 269 ) Query language substitutions: {}
Hibernate 配置使用成功
查看數據庫:
插入成功!