体验Hibernate

来源:互联网 发布:aframe.js obj 编辑:程序博客网 时间:2024/05/21 13:22

Hibernate配置

  • 步骤
  1. Hibernate配置
  2. 创建持久化类
  3. 创建数据库表
  4. 创建Hibernate映射文件
  5. 使用HibernateAPI对数据库进行操作
hibernate.cfg.xml

<!DOCTYPEhibernate-configurationPUBLIC

"-//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 TimestampregisterTime;   // 注册时间   

// 省略各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-mappingPUBLIC

    "-//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 SessionFactorySESSION_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();

}

}

}

原创粉丝点击