分享自:

    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. 在cmd 命令中 用cd E:\ 进入不了E盘 问题

    cd 路径 只能在本盘符中切换路径需要切换到e盘 需要cd /d e:\

  2. 前端基础之JavaScript_2

    摘要: window对象 BOM(Browser Object Model) DOM (Document Object Model) 0.引子: JavaScript分为三部分:ECMAScript. ...

  3. luogu3959 宝藏

    状压搜索轻轻松松就过了--考场上代码太丑了T了几个点 #include <iostream> #include <cstring> #include <cstdio> ...

  4. 70.打印所有Spring boot载入的bean【从零开始学Spring Boot】

    [从零开始学习Spirng Boot-常见异常汇总] 问题的提出: 我们在开发过程当中,我们可能会碰到这样的问题:No qualifying bean  就是我们定义的bean无法进行注入,那到底是什 ...

  5. 动手实操(一):如何用七牛云 API 实现相片地图?

    实操玩家: 在苹果手机上,我们只要打开定位服务,拍照后便能在相簿中找到地图,地图上显示着在各地拍摄的相片.网站上这种显示方式也并不少见,例如 Flickr.即将关闭的 Panoramio 等. 作为地 ...

  6. [HNOI2012] 永无乡 题解

    题意: n个点,有加边操作,询问与某一点处于相同的联通块的点中权值第k大的点 思路: 对所有点建立一棵权值线段树,加边就配合并查集进行线段树合并 反思: 动态开点,权值线段树要用sum[g[x=fin ...

  7. 认识Linux文件系统的架构

    本文主要研究一下storm的OpaquePartitionedTridentSpoutExecutor TridentTopology.newStream storm-core-1.2.2-sourc ...

  8. bzoj 2818 GCD 数论 欧拉函数

    bzoj[2818]Gcd Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Samp ...

  9. 【HDOJ6330】Visual Cube(模拟)

    题意: 思路: import java.util.Scanner; public class Main { public static void main(String args[]) { Scann ...

  10. poj1376 bfs,机器人

    开始时候有点怕, 感觉什么也不会,不过静下来思考思考也就想出来了,一个简单的BFS即可,但是由于队列没有重判,一直爆队列(MLE!)下次一定要注意! (bfs第一次到达便最优?) #include&l ...