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包下载地址:

sort_by=date&sort=desc" target="_blank" style="font-size:18px">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文件,构建依赖包

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaml1cWl5dWxpYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

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

4、写代码

(1)建立实体类User.java

  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文件。完毕实体类映射

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

(3)将User.hbm.xml文件增加到hibernate.cfg.xml文件里

  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

  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语句:

  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))

数据库表结构:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaml1cWl5dWxpYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

(5)建立client类Client,加入用户数据到mySQL

  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下。便于程序调试。

内容例如以下:

  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>

配置完毕后。项目结构例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaml1cWl5dWxpYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

五、最后

自己动手丰衣足食,实践出真理。纸上得来终觉浅,绝知此事要躬行。尽管这个实例很easy,可是我们踏进了持久层框架的大门。

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

【SSH进阶之路】Hibernate搭建开发环境+简单实例(二)的更多相关文章

  1. (Hibernate进阶)Hibernate搭建开发环境+简单实例(二)

    hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和 ...

  2. 【SSH进阶之路】Struts基本原理 + 实现简单登录(二)

    上面博文,主要简单的介绍了一下SSH的基本概念,比較宏观,作为刚開始学习的人可以有一个总体上的认识,个人觉得对学习有非常好的辅助功能.它不不过一个"瞭望塔".更是检验是否真正掌握全 ...

  3. 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)

    [SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,採用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...

  4. 【SSH进阶之路】Hibernate基本映射(三)

    [SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心.採用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...

  5. 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)

    [SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,採用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...

  6. 【SSH进阶之路】Hibernate系列——总结篇(九)

    这篇博文是Hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通. 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我 ...

  7. SSH进阶之路

    [SSH进阶之路]Hibernate基本原理(一)       在开始学Hibernate之前,一直就有人说:Hibernate并不难,无非是对JDBC进一步封装.一句不难,难道是真的不难还是眼高手低 ...

  8. 【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一)

    [SSH进阶之路]Struts + Spring + Hibernate 进阶开端(一) 标签: hibernatespringstrutsssh开源框架 2014-08-29 07:56 9229人 ...

  9. Hibernate(一)——采用Hibernate框架开发环境搭建

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员充分使用对象编程思维来操作数据库.HIbernate的移植性很好,它可以应用于任何JDB ...

随机推荐

  1. AWT编程时,Button按钮上的中文编程□□□

    今天学到AWT编程时,照着书上的代码打,代码如下: import java.awt.*; public class PanelTest{    public static void main(Stri ...

  2. Beta冲刺提交-星期五

    Beta冲刺提交-星期五 这个作业属于哪个课程 软件工程 这个作业要求在哪里 <作业要求的链接> 团队名称 唱跳RAP编程 这个作业的目标 1.进行每日例会,每个成员汇报自己今天完成    ...

  3. CREATE SEQUENCE - 创建一个新的序列发生器

    SYNOPSIS CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalu ...

  4. autorun - 自动装载/卸载CDROMs并在装载后执行/path/to/cdrom/autorun

    总览 autorun [-lmqv?V] [-a EXEC] [-c CDPLAYER] [-e STRING] [-i MILLISEC] [-n STRING] [-t STRING] [--au ...

  5. C#中练级orcle数据查询

    直接贴代码哈哈哈, public DataTable getInfo(int flag) { OracleConnection conn = null; DataSet ds = new DataSe ...

  6. Mac OS X 中安装 brew

    不想被误导?直接看官方文档:   http://mxcl.github.com/homebrew/    先安装Git,打开一个shell cd /usr/local sudo mkdir homeb ...

  7. WebService 服务开发

    开发 WebService 服务首先需要根据接口的要求编写相关的 wsdl 文件.编写 wsdl 文件需要先对 XML 语法.XML Schema 语法以及 SOAP 语法有一些简单了解. 假设需要提 ...

  8. Handler和内部类的正确用法

    PS:本文摘抄自<Android高级进阶>,仅供学习使用 Android代码中涉及线程间通信的地方经常会使用Handler,典型的代码结构如下. public class HandlerA ...

  9. 【Jsp,Servlet初学总结】 含 cookie和session的使用

    一.Jsp 1. 指令: <%@ page language="java" import="java.*" contextType="text/ ...

  10. 初学微信小程序 TodoList

    微信小程序的学习 微信小程序的开始尝试 TodoList 微信开发者工具生成 目录如下: . |-- app.js |-- app.json |-- app.wxss |-- pages | |-- ...