1、开发环境
Win8 + jdk1.7 + MyEclipse + Tomcat5.0 + MySQLhtml
说明:其实Hibernate是很是独立的框架,根本不须要MyEclipse,Eclipse,Tomcat,Log4J等,他们只不过是能知足咱们其余的需求,才把他们引进来的。java
2、下载文件
你须要Java SDK、 Hibernate包、和JDBC Driver。
一、Hibernate包下载地址:
http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc
二、JDBC Driver根据你的数据库来定,通常database官网都有。Hibernate支持经常使用的数据库,好比 MySQL, Oracle等等。这两个数据库是如今比较经常使用的,都有JDBC Driver:
Oracle JDBC Driver下载地址(下载前必须赞成Oracle协议书)
http://otn.oracle.com/software/htdocs/distlic.html?/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html
MySQL JDBC Driver下载地址
http://dev.mysql.com/downloads/connector/j/3.0.html
mysql
3、所需jar包

hibernate3.jar Hibernate的核心包算法
dom4j-1.6.1.jar dom4j读取xml文件包sql
mysql-connector-Java-3.1.13-bin.jar MySQL的jdbc驱动包数据库
Hibernate的做用:让咱们以面向对象的方式或思惟来考虑怎么向关系型数据库存取数据。它须要与相应的数据库打交道,因此须要相应的jdbc驱动。咱们的database用的是MySQL,因此须要引入MySQL的jdbc驱动。apache
log4j-1.2.11.jar 记录日志框架session
因为log4j的记录日志比jdk自带的记录日志功能更加美观,简单,易配置日志级别,便于调试,咱们选择使用log4j。oracle
必需要引入的jar:app
commons-logging-1.0.4.jar 抽象的日志记录框架
自己并无实现真正的写日志能力(看包结构便可知道)而是结合其它的日志系统如Log4j或者java自己的java.util.logging做为日志输出组件,来实现日志记录的功能。
commons-collections-2.1.1jar 各类集合类和集合工具类的封装
cglib-2.1.3.jar 动态代理,Hibernate用它来实现PO字节码的动态生成
asm.jar cglib须要依赖的jar,ASM字节码库
注:做为初学者不提倡这种作法,只须要将hibernate所要依赖的第三方jar包都引入便可,不然作其余实例时会报NoClassDefFoundError的错误,解决方案:只需将对应jar引入便可。因为这是一个简单实例,仅仅须要引入这些jar。
4、代码展现
一、在IDE中建立java项目(比较简单再也不演示)
二、建立source folder,命名为Hibernate3,在Hibernate下载文件中找到咱们所须要的三个配置文件和全部jar包,拷贝所需jar文件,构建依赖包

三、提供hibernate.cfg.xml文件,完成基本配置
四、写代码
(1)创建实体类User.java
- package com.liang.hibernate;
-
- import java.util.Date;
-
- public class User {
- private String id;
- private String name;
- private String password;
- private Date createTime;
- private Date expireTime;
-
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public Date getCreateTime() {
- return createTime;
- }
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
- public Date getExpireTime() {
- return expireTime;
- }
- public void setExpireTime(Date expireTime) {
- this.expireTime = expireTime;
- }
-
- }
(2)提供User.hbm.xml文件,完成实体类映射
- <span style="font-size:12px;"><?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
-
- <class name="com.liang.hibernate.User">
- <id name="id">
-
- <generator class="uuid"></generator>
- </id>
- <property name="name"></property>
- <property name="password"></property>
- <property name="createTime" type="date"></property>
- <property name="expireTime" type="date"></property>
- </class>
-
- </hibernate-mapping></span>
(3)将User.hbm.xml文件加入到hibernate.cfg.xml文件中
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
-
- <hibernate-configuration>
- <session-factory>
-
- <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
-
- <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
-
- <property name="hibernate.connection.username">root</property>
-
- <property name="hibernate.connection.password">123456</property>
-
- <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
-
-
- <mapping resource="com/liang/hibernate/User.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
(4)编写工具类ExportDB.java,将hbm生成ddl,也就是hbm2ddl
- package com.liang.hibernate;
-
- import org.hibernate.cfg.Configuration;
- import org.hibernate.tool.hbm2ddl.SchemaExport;
-
- public class ExportDB{
- public static void main(String[]args){
-
- Configuration cfg = new Configuration().configure();
-
- SchemaExport export = new SchemaExport(cfg);
- export.create(true, true);
- }
- }
测试以前,要提早创建数据库hibernate_first,测试以下:
控制台打印的SQL语句:
- drop table if exists User
- create table User (id varchar(255) not null, name varchar(255), password varchar(255), createTime date, expireTime date, primary key (id))
数据库表结构:

(5)创建客户端类Client,添加用户数据到mySQL
- package com.liang.hibernate;
-
- import java.util.Date;
-
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.cfg.Configuration;
-
- public class Client {
- public static void main(String[]args){
-
- Configuration cfg = new Configuration().configure();
-
- SessionFactory factory =cfg.buildSessionFactory();
-
-
- Session session = null;
-
- try{
-
- session = factory.openSession();
-
- session.beginTransaction();
-
- User user = new User();
- user.setName("jiuqiyuliang");
- user.setPassword("123456");
- user.setCreateTime(new Date());
- user.setExpireTime(new Date());
-
- session.save(user);
-
-
- session.getTransaction().commit();
-
- }catch(Exception e){
- e.printStackTrace();
-
- session.getTransaction().rollback();
- }finally{
- if(session != null){
- if(session.isOpen()){
-
- session.close();
- }
- }
- }
- }
- }
右键debug运行,测试完成以后,咱们查询一下测试结果:

五、为了在调试过程当中能观察到Hibernate的日志输出,最好加入log4j.properties配置文件、在CLASSPATH中新建log4j.properties配置文件或将该配置文件拷贝到src下,便于程序调试。
内容以下:
- <span style="font-size:12px;">### direct log messages to stdout ###
- 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
-
- ### direct messages to file hibernate.log ###
- #log4j.appender.file=org.apache.log4j.FileAppender
- #log4j.appender.file.File=hibernate.log
- #log4j.appender.file.layout=org.apache.log4j.PatternLayout
- #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
-
- ### set log levels - for more verbose logging change 'info' to 'debug' ###
-
- log4j.rootLogger=warn, stdout</span>
配置完成后,项目结构以下图所示:

5、最后
本身动手丰衣足食,实践出真理,纸上得来终觉浅,绝知此事要躬行。虽然这个实例很是简单,可是咱们踏进了持久层框架的大门。
从上面的简单实例能够看到,咱们只是使用Hibernate对User这一个实体进行了映射,比较简单,可是彻底不符合实际。如何像关系型数据库同样表示多种关联关系,例如:一对一,一对多,多对多等等,咱们还须要深刻。下篇博文,咱们介绍Hibernate的基本映射原理以及关联关系映射。