Hibernate配置
- 步驟
- Hibernate配置
- 創建持久化類
- 創建數據庫表
- 創建Hibernate映射文件
- 使用HibernateAPI對數據庫進行操作
<!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();
}
}
}