一、开发环境

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

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

[html] view plaincopy 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. </hibernate-mapping></span>

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

[html] view plaincopy 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. <hibernate-configuration>
  5. <session-factory>
  6. <!-- 设置数据库驱动 -->
  7. <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  8. <!-- 设置数据库URL -->
  9. <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
  10. <!-- 数据库用户名 -->
  11. <property name="hibernate.connection.username">root</property>
  12. <!-- 数据库密码 -->
  13. <property name="hibernate.connection.password">123456</property>
  14. <!-- 指定对应数据库的方言,hibernate为了更好适配各种关系数据库,针对每种数据库都指定了一个方言dialect -->
  15. <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  16. <!-- 映射文件 -->
  17. <mapping resource="com/liang/hibernate/User.hbm.xml"/>
  18. </session-factory>
  19. </hibernate-configuration>

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

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

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

控制台打印的SQL语句:

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

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

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

内容如下:

[html] view plaincopy 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. ### direct messages to file hibernate.log ###
  7. #log4j.appender.file=org.apache.log4j.FileAppender
  8. #log4j.appender.file.File=hibernate.log
  9. #log4j.appender.file.layout=org.apache.log4j.PatternLayout
  10. #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
  11. ### set log levels - for more verbose logging change 'info' to 'debug' ###
  12. log4j.rootLogger=warn, stdout</span>

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

五、最后

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

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

转载于:https://www.cnblogs.com/afjbk/p/6006787.html

Hibernate入门级实例相关推荐

  1. Struts2和Spring和Hibernate应用实例

    Struts2.Spring和Hibernate应用实例 Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用.作为最成功的Web框架,Struts自然拥有众多的优点 ...

  2. java spring hiberate_Spring+SpringMVC+Hibernate整合实例讲解

    使用Maven构建项目,用pom.xml引入相应jar,配置以下文件 创建spring.xml: xmlns="http://www.springframework.org/schema/b ...

  3. SpringMVC +Hibernate 学习实例

    做了好久经的spring+hibernate 只是用spring管理hibernate,但一直没有研究SpringMVC +Hibetate,所以 最近有时间 准备用springMVC + Sprin ...

  4. Python 学习笔记 -- 继承与多态(入门级实例)

    1 #继承 2 #假设有不同品种的鱼,它们的蛋白质含量都不同,那么我们吃掉这些鱼获得的效果也应该不同 3 #---------------------------------------------- ...

  5. JPA Hibernate应用实例

    1.配置文件:persistence.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <pers ...

  6. myeclipse下hibernate入门实例介绍

    说明:本例采用myeclipse+sqlserver2000  hibernate版本为3.0.  数据库驱动为:jtds-1.0.2. 1.配置myeclipse环境(eclipse-SDK-3.1 ...

  7. java 微服务源码_java 微服务 入门级实例源码(基于SpringCloud)

    [实例简介] 实例中包含三个项目 eurekaServer(服务注册中心),provicer_demo(微服务提供者),caller_demo(微服务调用者),并对 服务器直接返回与调用微服务的性能 ...

  8. hibernate入门实例

    参考 :http://blog.csdn.net/passion_wu128/article/details/50103513 转载于:https://www.cnblogs.com/mingzhan ...

  9. 机器学习入门级实例——针对葡萄酒质量进行建模

    数据背景 本文数据取至于UCI--欧文大学机器学习数据库,是一个免费且十分好用的数据库,在学习机器学习时会接触一个基础的数据集--鸢尾花,就是欧文大学提供的,本文就是在一个名叫葡萄酒品质的数据集的基础 ...

最新文章

  1. IssueVission的命令处理
  2. pythonのSocket
  3. PHP排序算法的复习和总结
  4. nodejs android 推送,利用Nodejs怎么实现一个微信小程序消息推送功能
  5. “约见”面试官系列之常见面试题第三篇说说常用的es6语法(建议收藏)
  6. VC++多线程工作笔记0005---线程间通信
  7. java coroutine类_Coroutines和Rxjava异步编程对比
  8. pvr转png工具_图片如何转换格式?最好用的3个转换工具都在这了
  9. ScreenToGif – 免费开源 GIF 录屏制作软件之王!对比多款主流 GIF 工具我选了它
  10. vue项目PC端移动端适配方案
  11. 玄幻小说收藏(偶尔带点科幻、都市)
  12. 镁光闪存颗粒对照表_最全的内存颗粒编码规则说明,教你看穿内存条到底用的什么颗粒...
  13. 四足机器人——12自由度舵机狗DIY(二)
  14. NLP入门:pyltp的介绍与使用
  15. win10系统重装(无需u盘)(无需下载第三方软件)(绝对纯净版)(全网最简)
  16. pytorch学习(一)数据加载之前的预处理(UCSD数据集)
  17. 计算机组成原理片级逻辑图,计算机组成原理试题(五)
  18. 教资考试中计算机知识常考点,教师资格证笔试:初中美术必背考点汇总(3)...
  19. hibernate学习(4)——实体配置详解
  20. PCI设备的DMA映射操作详解

热门文章

  1. 在vue项目中 如何定义全局变量 全局函数
  2. 【java】浅析JDK中ServiceLoader的源码
  3. 【es】es 分布式一致性原理剖析(三)-Data篇
  4. 【java】java 并发编程 ArrayBlockingQueue
  5. 【Kafka】Kafka SCRAM认证 ERROR [ZooKeeperClient] Auth failed
  6. 【Spring】CGLIB动态代理
  7. Spring Boot 操作 Memcache
  8. 在IDEA中安装使用Antlr
  9. 【SpringMVC】SpringMVC和Spring集成
  10. 反射和多态的实现原理详解以及区别