體驗Hibernate

Hibernate配置

  • 步驟
  1. Hibernate配置
  2. 創建持久化類
  3. 創建數據庫表
  4. 創建Hibernate映射文件
  5. 使用HibernateAPI對數據庫進行操作
hibernate.cfg.xml

<!DOCTYPEhibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<propertyname="hibernate.connection.url">jdbc:mysql:///hibernate</property>

<propertyname="hibernate.connection.username">root</property>

<propertyname="hibernate.connection.password">123456</property>

 

<propertyname="hbm2ddl.auto">update</property>

<propertyname="show_sql">true</property>

 

<propertyname="hibernate.c3p0.min_size">5</property>

<propertyname="hibernate.c3p0.max_size">20</property>

<propertyname="hibernate.c3p0.timeout">1800</property>

<propertyname="hibernate.c3p0.max_statements">50</property>

<mappingresource="cn/itcast/user/domain/Customer.hbm.xml"/>

<mappingresource="cn/itcast/user/domain/Order.hbm.xml"/>

<mappingresource="cn/itcast/user/domain/Category.hbm.xml"/>

</session-factory>

</hibernate-configuration>

日誌配置

在使用Hibernate開發應用程序時, 應當總是爲org.hibernate.SQL開啓debug級別的日誌記錄,或者開啓hibernate.show_sql屬性。

指定只輸出較爲嚴重的錯誤信息以及Hibemate生成的SQL語句:

log4j.properties

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%5p%c{1}:%L-%m%n

log4j.rootLogger=info,stdout

log4j.logger.net.sf.hibernate=error

log4j.logger.org.hibernate.tool.hbm2ddl=debug

 

  • Hibernate日誌類別

類別

功能

org.hibernate.SQL

在所有SQL DML語句被執行時爲它們記錄日誌

org.hibernate.type

爲所有JDBC參數記錄日誌

org.hibernate.tool.hbm2ddl

在所有SQL DDL語句執行時爲它們記錄日誌

org.hibernate.pretty

在session清洗(flush)時,爲所有與其關聯的實體(最多20個)的狀態記錄日誌

org.hibernate.cache

爲所有二級緩存的活動記錄日誌

org.hibernate.transaction

爲事務相關的活動記錄日誌

org.hibernate.jdbc

爲所有JDBC資源的獲取記錄日誌

org.hibernate.hql.AST

在解析查詢的時候,記錄HQL和SQL的AST分析日誌

org.hibernate.secure

爲JAAS認證請求做日誌

org.hibernate

爲任何Hibernate相關信息做日誌 (信息量較大, 但對查錯非常有幫助)

 

創建持久化類

publicclass Customer {

private Long id;                // ID

private String name;            // 姓名

private String email;            // Email

private String password;        // 密碼

privateintphone;                // 電話

privatebooleanmarrried;        // 是否已婚

private String address;            // 地址

privatechargender;            // 性別

private String description;        // 描述

privatebyte[] image;            // 頭像

private Date birthday;            // 生日

private Timestamp registerTime;    // 註冊時間   

// 省略各Field的getter、setter方法

}

 

創建數據庫表

CREATETABLE CUSTOMERS(

ID BIGINTNOTNULLPRIMARYKEY,

NAMEVARCHAR(15) NOTNULL,

EMAIL VARCHAR(128) NOTNULL,

PASSWORDVARCHAR(8) NOTNULL,

PHONE INT,

ADDRESS VARCHAR(255),

GENDER CHAR(1),

IS_MARRIED BIT,

DESCRIPTION TEXT,

IMAGE BLOB,

BIRTHDAY DATE,

REGISTERED_TIME TIMESTAMP

);

 

Hibernate映射文件

Customer.hbm.xml

<!DOCTYPEhibernate-mapping PUBLIC

    "-//Hibernate/HibernateMapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mappingpackage="cn.itcast.netstore.domain">

<classname="Customer" table="CUSTOMERS">

<idname="id" column="ID" type="long">

<generatorclass="increment" />

</id>

<propertyname="name" column="NAME" type="string" not-null="true" />

<propertyname="email" column="EMAIL" type="string" not-null="true" />

<propertyname="password" column="PASSWORD" type="string" not-null="true" />

<propertyname="phone" column="PHONE" type="integer" />

<propertyname="address" column="ADDRESS" type="string" />

<propertyname="gender" column="GENDER" type="character" />

<propertyname="married" column="IS_MARRIED" type="boolean" />

<propertyname="description" column="DESCRIPTION" type="text" />

<propertyname="image" column="IMAGE" type="binary" />

<propertyname="birthday" column="BIRTHDAY" type="date" />

<propertyname="registerTime" column="REGISTERED_TIME" type="timestamp" />

</class>

</hibernate-mapping>

 

使用HibernateAPI操作

  • Hibernate工具類:

publicfinalclass HibernateUtil {

privatestaticfinal SessionFactory SESSION_FACTORY = buildSessionFactory();

privatestatic SessionFactory buildSessionFactory() {

try {

// 創建Configuration類的對象,並使用configure()方法加載資源

// 默認在classpath路徑下加載名爲hibernate.cfg.xml文件

// 如需自已指定配置文件,提供了configure()方法的一些重載方法

Configuration configuration = newConfiguration().configure();

// 通過Configuration類的對象構建Session工廠實例對象

SessionFactory factory =configuration.buildSessionFactory();

return factory;

} catch (Exception ex) {

System.err.println("Initial SessionFactory creation failed."+ex);

thrownew ExceptionInInitializerError(ex);

}

}

publicstatic SessionFactory getSessionFactory() {

returnSESSION_FACTORY;

}

}

 

  • 模板代碼:

publicclass CustomerDao {

publicvoid add(Customer customer) throws Exception{

Session session = HibernateUtil.getSessionFactory().openSession();

Transaction t = session.getTransaction();

try {

t.begin();

. . .

t.commit();

} catch (Exception e) {

if(t!=null)

t.rollback();

throw e;

} finally {

session.close();

}

}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章