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.jarcglib需要依赖的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
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> <!--生成默认为user的数据库表--> <class name="com.liang.hibernate.User"> <id name="id"> <!-- 算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID --> <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> <!-- 设置数据库URL --> <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> <!-- 指定对应数据库的方言,hibernate为了更好适配各种关系数据库,针对每种数据库都指定了一个方言dialect --> <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; /** * 将hbm生成ddl * @author liang * */ public class ExportDB{ public static void main(String[]args){ //默认读取hibernate.cfg.xml文件 Configuration cfg = new Configuration().configure(); ////生成并输出sql到文件(当前目录)和数据库 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){ //读取hibernate.cfg.xml文件 Configuration cfg = new Configuration().configure(); //建立SessionFactory SessionFactory factory =cfg.buildSessionFactory(); //取得session Session session = null; try{ //开启session session = factory.openSession(); //开启事务 session.beginTransaction(); User user = new User(); user.setName("jiuqiyuliang"); user.setPassword("123456"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //保存User对象 session.save(user); //提交事务 session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); //回滚事务 session.getTransaction().rollback(); }finally{ if(session != null){ if(session.isOpen()){ //关闭session session.close(); } } } } }
右键debug运行,测试完成之后,我们查询一下测试结果:
5、为了在调试过程中能观察到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>
配置完成后,项目结构如下图所示:
五、最后
自己动手丰衣足食,实践出真理,纸上得来终觉浅,绝知此事要躬行。虽然这个实例非常简单,但是我们踏进了持久层框架的大门。
从上面的简单实例可以看到,我们只是使用Hibernate对User这一个实体进行了映射,比较简单,但是完全不符合实际。如何像关系型数据库一样表示多种关联关系,例如:一对一,一对多,多对多等等,我们还需要深入。下篇博文,我们介绍Hibernate的基本映射原理以及关联关系映射。
相关推荐
本文将详细介绍如何在MyEclipse 8.5环境下搭建基于Struts2.1、Spring3.0以及Hibernate3.3的SSH框架,并通过图解的方式引导读者完成整个搭建过程。 #### 二、创建 Web 项目 首先,需要在MyEclipse 8.5中创建一个新...
SSH(Struts2、Hibernate、Spring)是一个经典的Java Web开发框架组合,用于构建高效、可维护的Web应用程序。在这个Maven项目中,这三个框架与Maven构建工具一起使用,以实现更好的依赖管理和项目构建流程。下面将详细...
SSH是Java开发中的一种经典架构组合,代表Spring、Struts和Hibernate这三个开源框架的结合。在本项目"SSH - SpringMVC4 + Spring4 + Hibernate4 + c3p0 + Mysql.zip"中,开发者使用了SpringMVC4作为表现层,Spring4...
基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh...
标题中的"structs++hibernate+Spring++++ssh"提到了四个重要的Java开发框架和技术:Struts、Hibernate、Spring和SSH。这些技术都是Java企业级应用程序开发中的关键组件,尤其在传统的MVC(模型-视图-控制器)架构中...
Struts、Spring、Hibernate(SSH)是Java Web开发中三个非常重要的开源框架,它们分别用于MVC模式的实现、依赖注入和持久化管理。SSH整合是将这三个框架结合在一起,以构建更高效、可维护性更强的企业级应用。本文...
以下将详细介绍如何搭建SSH开发环境。 首先,确保你有以下开发工具和库: 1. **MyEclipse 5.5**:这是一个集成开发环境(IDE),提供了方便的Java和Web项目开发支持。 2. **JDK 1.6**:Java Development Kit,是...
SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,用于构建高效、模块化且可维护的企业级应用程序。SSH框架的结合使用可以极大地提高开发效率,简化开发流程,并提供良好的数据持久化、业务逻辑...
总的来说,SSH2框架搭建实例是一个学习和理解Java Web开发的好素材。通过实践这个项目,开发者可以深入理解如何整合三大框架,以及如何利用它们来实现常见的业务功能。同时,这也是提升数据库操作、MVC设计模式和...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。...通过学习和实践这个SSH整合实例,初学者可以对Java Web开发有更深入的理解,为后续的进阶学习打下坚实基础。
在本项目中,我们主要探讨如何使用Maven4MyEclipse搭建一个集成Struts2.3.4、Hibernate4.2.0和Spring3.1.2的SSH2(Struts2、Spring、Hibernate)项目,并结合ExtJS进行前端开发。这是一个经典的Java企业级应用架构,...
SSH资源环境搭建,ssh开发配置教程,以供参考; 开发环境:MyEclipse6.0+Tomcat5.0+SQLServer2000 配置环境:Struts2+Spring2+Hibernate3.1
总结起来,"spring+hibernate+struts2+freemarker SSH2 新闻发布系统"是一个基础的Java Web项目,展示了SSH2框架组合在实际开发中的应用。开发者可以通过学习这个小例子,理解如何整合这些技术来构建更复杂的Web应用...
Eclipse 是一个功能强大且功能丰富的集成开发环境(IDE), SSH 架构(Struts + Spring + Hibernate)是 Java Web 开发中常用的架构模式。下面将详细介绍如何使用 Eclipse 搭建 SSH 架构。 一、搭建 SSH 开发环境 ...
其中项目里面的配置文件或是代码每行都有注释,网上这种整合实例很少,就奉献出来大家一起学习吧,在整合过程中遇到一个很奇怪的问题,就是spring的事务我配置成@Transactional(readOnly = true)只读事务,但是还...
SSH火车订票系统是一款基于Java Web技术开发的项目,它采用了经典的SSH(Spring、Struts2、Hibernate)框架,结合MySQL数据库,实现了在线火车票预订的功能。SSH框架是Java领域中广泛使用的MVC(Model-View-...
SSHjar包是Java开发中的一个经典组合,代表了Spring、Struts2和Hibernate这三个开源框架的集成。这个组合被广泛用于构建企业级的Web应用程序,因为它提供了强大的模型-视图-控制器(MVC)架构、持久层管理和依赖注入...
对应博文 eclipse环境搭建ssh(Struts2+Spring2.5+Hibernate3)框架小谈(上) eclipse环境搭建ssh(Struts2+Spring2.5+Hibernate3)框架小谈(下)
【SSH 框架整合详解】 SSH 是 Spring、SpringMVC 和 Hibernate 这三个流行的 Java 开发框架的组合,它们在企业级...在 "eip-ssh" 项目中,这些技术共同构成了一个完整的开发框架,为开发者提供了一个良好的开发环境。