文档章节

hibernate 环境搭建 简单代码

孤独成性
 孤独成性
发布于 2016/10/19 09:24
字数 1766
阅读 7
收藏 0

    hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的。这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和原理,到最后可能什么也学不会,从实践入手,熟能生巧,思想和原理自然而然领悟。

 

      上篇博文:【SSH进阶之路】Hibernate基本原理,我们介绍了Hibernate的基本概念、Hibernate的核心以及Hibernate的执行原理,可以很好帮助我们认识Hibernate,再看这篇博客之前,请先回顾上篇博文内容。这篇博文,我们从实践角度,动手搭建一个简单的Hibernate实例。

 

一、开发环境

 

         Win8 + jdk1.7 + MyEclipse + Tomcat5.0 + MySQL

      说明:其实Hibernate是非常独立的框架,根本不需要MyEclipse,Eclipse,Tomcat,Log4J等,他们只不过是能满足我们其他的需求,才把他们引进来的。

 

二、下载文件

 

你需要Java SDK、 Hibernate包、和JDBC Driver。
 
1、Hibernate包下载地址:
http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc

2、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
 

三、所需jar包

   

hibernate3.jar                                             Hibernate的核心包

dom4j-1.6.1.jar                                            dom4j读取xml文件包

mysql-connector-Java-3.1.13-bin.jar        MySQL的jdbc驱动包

       Hibernate的作用:让我们以面向对象的方式或思维来考虑怎么向关系型数据库存取数据。它需要与相应的数据库打交道,所以需要相应的jdbc驱动。我们的database用的是MySQL,所以需要引入MySQL的jdbc驱动。

log4j-1.2.11.jar                                           记录日志框架

        由于log4j的记录日志比jdk自带的记录日志功能更加美观,简单,易配置日志级别,便于调试,我们选择使用log4j。

 

必须要引入的jar:

 

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。

 

四、代码展示

 

1、在IDE中创建java项目(比较简单不再演示)

 

2、创建source folder,命名为Hibernate3,在Hibernate下载文件中找到我们所需要的三个配置文件和所有jar包,拷贝所需jar文件,构建依赖包

 

           

3、提供hibernate.cfg.xml文件,完成基本配置

 

4、写代码

 

(1)建立实体类User.java

  

[java] view plain copy

 print?

  1. package com.liang.hibernate;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class User {  
  6.     private String id;  
  7.     private String name;  
  8.     private String password;  
  9.     private Date createTime;  
  10.     private Date expireTime;  
  11.       
  12.     public String getId() {  
  13.         return id;  
  14.     }  
  15.     public void setId(String id) {  
  16.         this.id = id;  
  17.     }  
  18.     public String getName() {  
  19.         return name;  
  20.     }  
  21.     public void setName(String name) {  
  22.         this.name = name;  
  23.     }  
  24.     public String getPassword() {  
  25.         return password;  
  26.     }  
  27.     public void setPassword(String password) {  
  28.         this.password = password;  
  29.     }  
  30.     public Date getCreateTime() {  
  31.         return createTime;  
  32.     }  
  33.     public void setCreateTime(Date createTime) {  
  34.         this.createTime = createTime;  
  35.     }  
  36.     public Date getExpireTime() {  
  37.         return expireTime;  
  38.     }  
  39.     public void setExpireTime(Date expireTime) {  
  40.         this.expireTime = expireTime;  
  41.     }  
  42.   
  43. }  

 

 

 

 

 

 

 

 

 

 

 

(2)提供User.hbm.xml文件,完成实体类映射

 

[html] view plain copy

 print?

  1. <span style="font-size:12px;"><?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping>  
  6.     <!--生成默认为user的数据库表-->  
  7.     <class name="com.liang.hibernate.User">  
  8.         <id name="id">  
  9.             <!-- 算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID -->  
  10.             <generator class="uuid"></generator>  
  11.         </id>  
  12.         <property name="name"></property>  
  13.         <property name="password"></property>  
  14.         <property name="createTime" type="date"></property>  
  15.         <property name="expireTime" type="date"></property>  
  16.     </class>  
  17.       
  18. </hibernate-mapping></span>  

 

 

 

 

 

 

 

 

 

 

 

(3)将User.hbm.xml文件加入到hibernate.cfg.xml文件中

 

[html] view plain copy

 print?

  1. <!DOCTYPE hibernate-configuration PUBLIC  
  2.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  3.     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  4.   
  5. <hibernate-configuration>  
  6.     <session-factory>  
  7.         <!-- 设置数据库驱动 -->  
  8.         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
  9.         <!-- 设置数据库URL -->  
  10.         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>  
  11.         <!-- 数据库用户名 -->  
  12.         <property name="hibernate.connection.username">root</property>  
  13.         <!-- 数据库密码 -->  
  14.         <property name="hibernate.connection.password">123456</property>  
  15.         <!-- 指定对应数据库的方言,hibernate为了更好适配各种关系数据库,针对每种数据库都指定了一个方言dialect -->  
  16.         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
  17.           
  18.         <!-- 映射文件 -->  
  19.         <mapping resource="com/liang/hibernate/User.hbm.xml"/>  
  20.     </session-factory>  
  21. </hibernate-configuration>  

 

(4)编写工具类ExportDB.java,将hbm生成ddl,也就是hbm2ddl

 

[java] view plain copy

 print?

  1. package com.liang.hibernate;  
  2.   
  3. import org.hibernate.cfg.Configuration;  
  4. import org.hibernate.tool.hbm2ddl.SchemaExport;  
  5.   
  6. /** 
  7.  * 将hbm生成ddl 
  8.  * @author liang 
  9.  * 
  10.  */  
  11. public class ExportDB{    
  12.     public static void main(String[]args){  
  13.         //默认读取hibernate.cfg.xml文件  
  14.         Configuration cfg = new Configuration().configure();  
  15.         ////生成并输出sql到文件(当前目录)和数据库  
  16.         SchemaExport export = new SchemaExport(cfg);  
  17.         export.create(true, true);  
  18.     }  
  19. }  

 

测试之前,要提前建立数据库hibernate_first,测试如下: 

 

控制台打印的SQL语句:

 

[sql] view plain copy

 print?

  1. drop table if exists User  
  2. create table User (id varchar(255) not null, name varchar(255), password varchar(255), createTime date, expireTime date, primary key (id))  

 

数据库表结构:

           

 

(5)建立客户端类Client,添加用户数据到mySQL

 

[java] view plain copy

 print?

  1. package com.liang.hibernate;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.hibernate.Session;  
  6. import org.hibernate.SessionFactory;  
  7. import org.hibernate.cfg.Configuration;  
  8.   
  9. public class Client {  
  10.     public static void main(String[]args){  
  11.         //读取hibernate.cfg.xml文件  
  12.         Configuration cfg = new Configuration().configure();  
  13.         //建立SessionFactory  
  14.         SessionFactory factory =cfg.buildSessionFactory();  
  15.           
  16.         //取得session  
  17.         Session session = null;  
  18.           
  19.         try{  
  20.             //开启session  
  21.             session = factory.openSession();  
  22.             //开启事务  
  23.             session.beginTransaction();  
  24.               
  25.             User user = new User();  
  26.             user.setName("jiuqiyuliang");  
  27.             user.setPassword("123456");  
  28.             user.setCreateTime(new Date());  
  29.             user.setExpireTime(new Date());  
  30.             //保存User对象  
  31.             session.save(user);  
  32.               
  33.             //提交事务  
  34.             session.getTransaction().commit();  
  35.               
  36.         }catch(Exception e){  
  37.             e.printStackTrace();  
  38.             //回滚事务  
  39.             session.getTransaction().rollback();  
  40.         }finally{  
  41.             if(session != null){  
  42.                 if(session.isOpen()){  
  43.                     //关闭session  
  44.                     session.close();  
  45.                 }  
  46.             }  
  47.         }  
  48.     }  
  49. }  


右键debug运行,测试完成之后,我们查询一下测试结果:

            

 

5、为了在调试过程中能观察到Hibernate的日志输出,最好加入log4j.properties配置文件、在CLASSPATH中新建log4j.properties配置文件或将该配置文件拷贝到src下,便于程序调试。

内容如下:

 

[html] view plain copy

 print?

  1. <span style="font-size:12px;">### direct log messages to stdout ###  
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  3. log4j.appender.stdout.Target=System.out  
  4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  5. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n  
  6.   
  7. ### direct messages to file hibernate.log ###  
  8. #log4j.appender.file=org.apache.log4j.FileAppender  
  9. #log4j.appender.file.File=hibernate.log  
  10. #log4j.appender.file.layout=org.apache.log4j.PatternLayout  
  11. #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n  
  12.   
  13. ### set log levels - for more verbose logging change 'info' to 'debug' ###  
  14.   
  15. log4j.rootLogger=warn, stdout</span>  

 

配置完成后,项目结构如下图所示:

 

          


 

五、最后

 

      自己动手丰衣足食,实践出真理,纸上得来终觉浅,绝知此事要躬行。虽然这个实例非常简单,但是我们踏进了持久层框架的大门。

 

      从上面的简单实例可以看到,我们只是使用Hibernate对User这一个实体进行了映射,比较简单,但是完全不符合实际。如何像关系型数据库一样表示多种关联关系,例如:一对一,一对多,多对多等等,我们还需要深入。下篇博文,我们介绍Hibernate的基本映射原理以及关联关系映射。

© 著作权归作者所有

孤独成性
粉丝 5
博文 69
码字总数 127493
作品 0
海淀
程序员
私信 提问
新手上路之Hibernate:第一个Hibernate例子

一、Hibernate概述 (一)什么是Hibernate? hibernate核心内容是ORM(关系对象模型)。可以将对象自动的生成数据库中的信息,使得开发更加的面向对象。这样作为程序员就可以使用面向对象的思...

Airship
2016/12/12
0
0
Hibernate框架(一)——总体介绍

作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷。利用Hibernate框架我们就可以不再编写重复的JDBC代...

凡尘里的一根葱
2015/11/10
0
0
hibernate学习笔记02-- eclipse 下 hibernate+mysql 的实现。

hibernate 环境的配置步骤: 加入 hibernate 所需的 jar 包,并将这些 jar 添加到 project 中,如图: hibernate.cfg.xml 的建立。hibernate 的 hibernate.cfg.xml 配置文件默认在 project/...

风中海岸
2015/08/29
0
0
Hibernate初体验及简单错误排除

Hibernate是什么,有多少好处,想必查找这类博文的都知道,所以就不多说了。下面是我对Hibernate简单使用的一个小小的总结。与君(主要是刚入门的)共勉吧! 创建的顺序 创建Hibernate的配置...

郭璞
2016/05/19
0
0
Hibernate学习1--SpringMVC+Hibernate集成环境搭建

除了刚毕业那会用了几个月的hibernate好像好久都没有碰过了,正好最近在整理以前的学习笔记就把这块知识系统的学习一下,特别是hibernate和ibatis的对比应该对我现在做的东西有很大的帮助。 ...

王小明123
2014/04/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Commons-lang3提供的StopWatch执行时间监视器

Commons-lang3提供的StopWatch执行时间监视器, spring也提供了同样功能的工具 前言 我们如果要统计一段代码的执行时间:我们的办法是 public static void main(String[] args) {      ...

独钓渔
18分钟前
0
0
Kernel 块设备驱动框架

1,总体架构: 块设备驱动框架是Linux设备最重要的框架之一,涉及内核的vfs,设备驱动模型等模块,是内核中异常复杂的一个框架。我们先看一下块设备设计的主要框架结构,先从总体上对块设备有...

yepanl
47分钟前
2
0
iOS开发之EventKit框架的应用

iOS开发之EventKit框架的应用 一、关于系统日历和提醒事宜 iOS系统自带的Calendar应用非常强大,用户可以在其中添加日程事件,并且其提供了接口供其他应用进行调用,可以向日历中进行事件的读...

珲少
51分钟前
2
0
jni接口NewStringUTF崩溃

转载 原文 https://blog.csdn.net/churuxu/article/details/49999575 ndk开发中,将c/c++的UTF8编码的字符串转换成java字符串,使用了NewStringUTF接口。 当字符串中包含emoji字符时,在有些...

shzwork
昨天
3
0
北斗三号IGSO-2卫星发射成功!

6月25日,中国航天科技集团官方公众号宣布,北斗三号IGSO-2卫星发射成功! 航天科技集团表示,6月25日2点09分,我国在西昌卫星发射中心用长征三号乙运载火箭成功将北斗三号第2颗倾斜地球同步...

linuxCool
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部