首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

hibernate体会

2013-11-14 
hibernate体验类别功能org.hibernate.SQL在所有SQL DML语句被执行时为它们记录日志org.hibernate.type为所

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

}

}

}

热点排行