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();
}
}
}