分享自:

    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. 使用pymysql 操作MySQL数据库

    安装 pip install pymysql 注:连接前要有可使用的账户及有权限.可操作的数据库 先来一个栗子: import pymysql # 连接database conn = pymysql. ...

  2. LeetCode(19) Remove Nth Node From End of List

    题目 Given a linked list, remove the nth node from the end of list and return its head. For example, G ...

  3. python基础——8(装饰器)

    一.nonlocal关键字 def outer(): num = 0 def inner(): # 如果想在被嵌套的函数中修改外部函数变量(名字)的值 nonlocal num # 将 L 与 E(E ...

  4. String字符串的遍历

    StringTest.java /* * 变量字符串(获取字符串中的每一个字符) */ public class StringTest { public static void main(String ...

  5. 【07】QQ群管理公告小结:

    [07]QQ群管理公告小结:   01,请看公告遵守相关规定. 02,群内除QQ自带的缺省表情外(不是QQ的VIP或大图表情),禁止发送大表情,大图片(展示问题的屏幕截图除外),   03,修改群名片 ...

  6. 如何设置目标并发(或者目标RPS)?

    基本概念 首先您需要了解什么是并发用户.TPS 和它们之间的关系. 并发用户:指的是现实系统中同时操作业务的用户,在性能测试工具中一般称为虚拟用户(Virutal User).一般是站在客户侧评估的角 ...

  7. 零、常用的Mysql数据库操作语句大全

    零.用户管理: 1.新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2.更改密码: >SET PASSWORD FOR name=PAS ...

  8. zoj 1295 Reverse Text

    Reverse Text Time Limit: 2 Seconds      Memory Limit: 65536 KB In most languages, text is written fr ...

  9. Laya Tween循环

    Laya Tween循环 @author ixenos 需求:做一个循环的缓动动画 方案: 1)如果只是线性变化,那么直接使用timer或者frameLoop来变化 2)如果需要有非线性变化,那么使用 ...

  10. js面试题总结

    1.typeof和Object.prototype.toString typeof是js里面判断变量类型的一种方法,但这种方法没有Object.prototype.toString准确,前者有6种判断 ...