Hibernate是一个开放源代码的对象关系映射【ORM】框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
下面就如何快速搭建Hibernate环境,完成一个项目进行总结:
1.下载解压文件
官网下载地址:http://hibernate.org/orm/
本地使用hibernate-release-4.3.8.Final.zip
2.创建项目
【本地创建java项目hibernate_01作为示例】
3.导入必须依赖的jar包
【Hibernate依赖的jar包】
hibernate-release-4.3.8.Final/lib/antlr-2.7.7.jar
hibernate-release-4.3.8.Final/lib/dom4j-1.6.1.jar
hibernate-release-4.3.8.Final/lib/hibernate-commons-annotations-4.0.5.Final.jar
hibernate-release-4.3.8.Final/lib/hibernate-core-4.3.8.Final.jar
hibernate-release-4.3.8.Final/lib/hibernate-jpa-2.1-api-1.0.0.Final.jar
hibernate-release-4.3.8.Final/lib/jandex-1.1.0.Final.jar
hibernate-release-4.3.8.Final/lib/javassist-3.18.1-GA.jar
hibernate-release-4.3.8.Final/lib/jboss-logging-3.1.3.GA.jar
hibernate-release-4.3.8.Final/lib/jboss-logging-annotations-1.2.0.Beta1.jar
hibernate-release-4.3.8.Final/lib/jboss-transaction-api_1.2_spec-1.0.0.Final.jar
【mysql数据库连接jar包】
mysql-connector-java-5.1.30-bin.jar】
4.创建测试数据库
CREATE DATABASE hiber;
USERhiber;
5.配置映射文件[Event.hbm.xml]
映射文件主要是用来描述java中的实体类和数据库中的表的对应关系。
映射文件命名规范:ClassName.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--
定义一个class
1.name属性值为class的全名称,同时配置在数据库中映射的表名称table的值
2.如果table和java类名称一致,table属性可省略
-->
<class name="com.lcd.model.Event" table="events" >
<!-- id用来配置实体类的主键,column对应数据库中列名称 -->
<id name="id" column="eid">
<!-- generator主键生成策略,native表示本地化~~由数据库决定 -->
<generator class="native"/>
</id>
<!-- property的name配置实体类的普通属性,type表示属性类型,column表示数据库中对应列名称 -->
<property name="date" type="timestamp" column="EVENT_DATE" />
<!-- 如果属性和数据库中列名称一致,column省略 -->
<property name="title" />
</class>
</hibernate-mapping>
7.创建Hibernate主配置文件【hibernate.cfg.xml】
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!-- 配置sessionfactory -->
<session-factory>
<!-- 连接配置 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hiber</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- jdbc连接池 -->
<property name="connection.pool_size">1</property>
<!-- SQL 方言 :使用mysql5数据库的sql语言规范-->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 显示由hibernate生成的sql语句 -->
<property name="show_sql">true</property>
<!-- 格式化按照标准结构显示sql语句 -->
<property name="format_sql">true</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">
org.hibernate.cache.internal.NoCacheProvider
</property>
<!-- 更新或者创建数据库对象 -->
<property name="hbm2ddl.auto">update</property>
<!-- 包含映射文件 -->
<mapping resource="com/lcd/model/Event.hbm.xml"/>
</session-factory>
</hibernate-configuration>
6.创建实体类【Event.java】
package com.lcd.model;
import java.util.Date;
/**
* 实体类
* @author Administrator
*
*/
public class Event {
private Long id;// 编号
private String title;// 事件主题
private Date date;// 发生时间
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "Event [id=" + id + ", "
+ "title=" + title + ", "
+ "date=" + date + "]";
}
}
测试类【Main.java】
package com.lcd.main;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.lcd.model.Event;
/**
* 测试类
* @author Administrator
*
*/
public class Main {
public static void main(String[] args) {
//1.加载配置文件初始化sessionFactory
SessionFactory factory =
new Configuration().configure().buildSessionFactory();
//2.获取session,保存对象【事务】
Session session = factory.openSession();//打开session
session.beginTransaction();//开启事务
Event e = new Event();
e.setDate(new Date());
e.setTitle("测试Hibernate事件");
session.save(e);//保存对象
//3.关闭session/sessionFactory
session.getTransaction().commit();//提交事务
session.close();
factory.close();
}
}
附:测试方法2——保持以上步骤不变,只替换测试类,如下所示:
增加工具类【HibernateUtils.java】
package com.lcd.utils;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
/**
* HibernateUtils工具类
* @author Administrator
*
*/
public class HibernateUtils {
// 方法回调,通过本类的方法,构建sessionFactory对象
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// 通过hibernate.cfg.xml配置文件,创建一个sessionFactory对象
Configuration cfg = new Configuration().configure();
StandardServiceRegistry serviceRegistry
= new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build();
return cfg.buildSessionFactory(serviceRegistry);
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
/**
* 获取sessionFactry对象
* @return
*/
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
替换测试类【Main2.java】
package com.lcd.main;
import java.util.Date;
import org.hibernate.Session;
import com.lcd.model.Event;
import com.lcd.utils.HibernateUtils;
public class Main2 {
public static void main(String[] args) {
Session session = HibernateUtils.
getSessionFactory().getCurrentSession();
session.beginTransaction();
/*
* session增删改查{CRUD}
*/
Event e = new Event();
//e.setTitle("事件触发");
//e.setDate(new Date());
/*
* 保存
*/
// session.save(e);// 面向对象的保存
/*
* 修改
*/
//e.setTitle("老王去了隔壁");
//e.setId(new Long(1));
//session.update(e);
/*
* 查询get/load
* 1.查询的对象不存在时
* get查询返回null
* load查询抛出异常
* 2. 查询到对象后
* get查询:在查询时直接发送查询SQL进行对象获取
* load查询:在查询的对象第一次使用的时候,发送SQL语句进行对象获取
*/
// e = (Event) session.get(Event.class, new Long(2));
//e = (Event) session.load(Event.class, new Long(1));
//System.err.println(e);
/*
* 删除
* 删除带有id主键值的对象
*/
e.setId(new Long(1));
session.delete(e);
session.getTransaction().commit();
}
}
以上就是一个Hibernate框架搭建的基本流程,Hibernate通过配置文件简化了原有java开发中常用的映射类Mapper,它通过配置文件自动创建对应的数据库关系,大大提高了开发效率。