分享自:

    http://blog.csdn.net/jnqqls/article/details/8242520

    在上一篇文章Hibernate
    之 Why?
     中对Hibernate有了一个初步的了解.接下来我们将从How的角度,也就是如何使用Hibernate来进行学习.

    • Hibernate是一个开源框架,而我们在项目中使用框架的时候都要对所使用的框架进行相关的环境搭建,下面的步骤便是.

      • 创建一个Java项目Hibernate_first
      • 创建User
        Library,从Hibernate核心文件中加入依赖包.

        • HIBERNATE_HOME/lib/*.jar
        • HIBERNATE_HOME/hibernate3.jar
        • 加入数据库驱动(此例子中用mysql驱动)

    UserLiberty部分截图

    • 创建核心配置文件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. <hibernate-configuration>
      5. <session-factory>
      6. <!-- 数据库驱动 -->
      7. <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
      8. <!-- 数据库名称地址 -->
      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">root</property>
      14. <!-- 配置数据库适配器.可以直接使用相关数据库的相关特点-->
      15. <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
      16. <!-- 打印sql语句到控制台 -->
      17. <property name="hibernate.show_sql">true</property>
      18. <!-- 对打印的Sql语句进行格式化 -->
      19. <property name="hibernate.format_sql">true</property>
      20. <!-- 对资源进行映射 -->
      21. <mapping resource="com/tgb/hibernate/User.hbm.xml"/>
      22. </session-factory>
      23. </hibernate-configuration>
    • 环境搭建完毕之后,接下来我们将会用面相对象的思想来完成对数据库表的创建.和我们以前的先建表有所不同,Hibernate是将类映射到关系库数据中的表.接下来建立User类.
    1. package com.tgb.hibernate;
    2. import java.util.Date;
    3. /**
    4. *
    5. * @title    创建User类
    6. * @author   jnqqls
    7. * @group    TGB
    8. * @version  1.0
    9. * @datetime 2012-11-30上午10:15:25
    10. * @comments
    11. */
    12. public class User {
    13. //编号
    14. private String id;
    15. //姓名
    16. private String name;
    17. //密码
    18. private String password;
    19. //创建时间
    20. private Date createTime;
    21. //失效时间
    22. private Date expireTime;
    23. public String getId() {
    24. return id;
    25. }
    26. public void setId(String id) {
    27. this.id = id;
    28. }
    29. public String getName() {
    30. return name;
    31. }
    32. public void setName(String name) {
    33. this.name = name;
    34. }
    35. public String getPassword() {
    36. return password;
    37. }
    38. public void setPassword(String password) {
    39. this.password = password;
    40. }
    41. public Date getCreateTime() {
    42. return createTime;
    43. }
    44. public void setCreateTime(Date createTime) {
    45. this.createTime = createTime;
    46. }
    47. public Date getExpireTime() {
    48. return expireTime;
    49. }
    50. public void setExpireTime(Date expireTime) {
    51. this.expireTime = expireTime;
    52. }
    53. }
    • 接下来是Hibernate中核心的地方:建立映射文件User.hbm.xml.如何将一个类映射成数据库中的一个表?它们之间的映射模型如下

      • 映射模型

      • 创建映射文件User.hbm.xml并完成相关映射.
    1. <?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. <!-- class标签表示所要映射的java类,而table属性可以更改它在数据库中表的名字,默认是类名 -->
    7. <class name="com.tgb.hibernate.User" >
    8. <!-- 表的主键,有着不同的生存策略 -->
    9. <id name="id">
    10. <generator class="uuid"></generator>
    11. </id>
    12. <!-- 以下内容是对类的属性进行映射 -->
    13. <property name="name"/>
    14. <property name="password"/>
    15. <property name="createTime"/>
    16. <property name="expireTime"/>
    17. </class>
    18. </hibernate-mapping>
    • 类建好,映射也完成,那么如何将类转化成数据库中的实际表呢?接下来我们将会把User类导入数据库表

      • 为了让Hibernate识别实体类.需要将User.htm.xml加入核心配置文件Hibernate.cfg.xml中.

        • <mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>
      • 编写工具栏ExportDB.java,将我们描述的htm文件生成ddl.也就是hbm2ddl
        1. package com.tgb.hibernate;
        2. import org.hibernate.cfg.Configuration;
        3. import org.hibernate.tool.hbm2ddl.SchemaExport;
        4. /**
        5. *
        6. * @title   将hbm生成ddl 将我们描述的htm文件生成ddl.也就是hbm2ddl
        7. * @author   jnqqls
        8. * @group    TGB
        9. * @version  1.0
        10. * @datetime 2012-11-30上午10:35:54
        11. * @comments
        12. */
        13. public class ExportDB {
        14. /**
        15. * @param args
        16. */
        17. public static void main(String[] args) {
        18. // TODO Auto-generated method stub
        19. //读取配置文件上面的信息
        20. Configuration cfg = new Configuration().configure();
        21. //将配置文件写成ddl.
        22. SchemaExport export = new SchemaExport(cfg);
        23. //将ddl打印大控制台并写入数据库中.
        24. export.create(true, true);
        25. }
        26. }
    • 测试打印数据:

    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).

    log4j:WARN Please initialize the log4j system properly.

    drop table if exists User

    create table User (id varchar(255) not null, name varchar(255), password varchar(255), createTime datetime, expireTime datetime, primary key (id))

    • 查看数据库中的表:

    • 建立客户端Client,添加用户数据到Mysql.

      • 建立client
    1. package com.tgb.hibernate;
    2. import java.util.Date;
    3. import org.hibernate.Session;
    4. import org.hibernate.SessionFactory;
    5. import org.hibernate.cfg.Configuration;
    6. /**
    7. * 客户端程序
    8. * @author   jnqqls
    9. * @group    TGB
    10. * @version  1.0
    11. * @datetime 2012-11-27上午9:31:32
    12. * @comments
    13. */
    14. public class Client {
    15. /**
    16. * @param args
    17. */
    18. public static void main(String[] args) {
    19. // 读取hibernate.cfg.xml文件
    20. Configuration cfg = new Configuration().configure();
    21. // 建立SessionFactory,对应一个数据库的镜像.
    22. SessionFactory factory = cfg.buildSessionFactory();
    23. // 获得session
    24. Session session = null;
    25. try {
    26. // 工厂创建session,并获得.
    27. session = factory.openSession();
    28. // 手动开启事务
    29. session.beginTransaction();
    30. // 创建User实体
    31. User user = new User();
    32. user.setName("jnqqls");
    33. user.setPassword("jnqqls");
    34. user.setCreateTime(new Date());
    35. user.setExpireTime(new Date());
    36. // 保存user对象
    37. session.save(user);
    38. // 提交事务
    39. session.getTransaction().commit();
    40. } catch (Exception e) {
    41. // 这里只是简单打印一下堆栈,用于测试
    42. e.printStackTrace();
    43. //事务回滚.
    44. session.getTransaction().rollback();
    45. } finally {
    46. // session是否为null
    47. if (session != null) {
    48. // session是否打开
    49. if (session.isOpen()) {
    50. // 关闭session
    51. session.close();
    52. }
    53. }
    54. }
    • 执行客户端程序.

      • 在console上打印的内容如下:
    1. Hibernate:
    2. insert
    3. into
    4. User
    5. (name, password, createTime, expireTime, id)
    6. values
    7. (?, ?, ?, ?, ?)
    • 查看数据库

    总结:使用Hibernate可以让我们通过面向对象的思维来操作关系型数据库.并且在此文的实例中也有体现出在上一篇文章所谈到的Hibernate优点,例如原来插入数据的insert语句(console所打印的语句)现在只需要一句session.save(user)变能完成相同的功能.至此本文从Hibernate如何使用的角度介绍完毕,在接下来的文章中会继续对Hibernate中的内容进行学习和分享.

Hibernate 之 How的更多相关文章

  1. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  2. 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用

    问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...

  3. hibernate多对一双向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  4. Hibernate中事务的隔离级别设置

    Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下

  5. Hibernate中事务声明

    Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...

  6. spring applicationContext.xml和hibernate.cfg.xml设置

    applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  7. [原创]关于Hibernate中的级联操作以及懒加载

    Hibernate: 级联操作 一.简单的介绍 cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似 ...

  8. hibernate的基本xml文件配置

    需要导入基本的包hibernate下的bin下的required和同bin下optional里的c3p0包下的所有jar文件,当然要导入mysql的驱动包了.下面需要注意的是hibernate的版本就 ...

  9. Maven搭建SpringMVC+Hibernate项目详解 【转】

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

  10. 1.Hibernate简介

    1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发;           b.大大减少代码量;           c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...

随机推荐

  1. 为何ARM linux会引入Device Tree(转)

    http://www.360doc.com/content/14/0522/20/14530056_380011180.shtml

  2. python-基本运算符(解压缩-必考)

    基本运算符 算术运算符 x =10 y =20 print(x+y) 30 print(x-y) -10 print(x*y) 200 print(x/y) 0.5 print(x%y)#取余 10 ...

  3. Codeforces 5D Follow Traffic Rules

    [题意概述] 某个物体要从A途经B到达C,在通过B的时候速度不能超过vd.  它的加速度为a,最大速度为vm:AB之间距离为d,AC之间距离为L: 问物体最少花多少时间到达C. [题解] 分情况讨论. ...

  4. [Noip2004][Day ?][T?]合并果子(?.cpp)

    题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...

  5. shell for mysql backup in linux

    今天上班只有一台linux系统,就学着在linux上写了个脚本,没啥技术含量 省得每天敲代码备份 没有设置自动备份时间,这里可以参照 http://www.th7.cn/db/mysql/201305 ...

  6. PhotoshopCS6

    download: http://www.playnext.cn/photoshop-cs6.html cracker: http://www.playnext.cn/adobe-cs6-crack. ...

  7. The more, The Better(树形DP)

    Problem Description ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有 ...

  8. php 数据库的增删改查

    <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>&l ...

  9. BZOJ 2763: [JLOI2011]飞行路线 【SPFA】

    Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格.Al ...

  10. 【最小费用最大流】N. April Fools' Problem (medium)

    http://codeforces.com/contest/802/problem/N [题解] 方法一: #include<bits/stdc++.h> using namespace ...