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

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值