分享自:

    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. hadoop格式化出错,提示IO异常

    配置好hadoop之后,在进行格式化的时候出现异常,原因是由于在core-site.xml 配置文件中写的路径格式不对. 不需要加 file:/ 或者 file:// 直接写绝对路径就行. <c ...

  2. 大数据学习——HADOOP集群搭建

    4.1 HADOOP集群搭建 4.1.1集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起 HDFS集群: 负责海量数据的存储,集群中的角色主 ...

  3. 服务器端架构及实战 — C#分享

    简介 此文是我2008年读研究生期间做的C#项目技术分享,给计算机专业学生的一些经验分享. 当时工作2年后读研. 计算机基础了解及介绍 了解计算机的核心课程和大家的理解 二进制的历史和原理 数字逻辑及 ...

  4. The 16th Zhejiang University Programming Contest-

    Handshakes Time Limit: 2 Seconds      Memory Limit: 65536 KB Last week, n students participated in t ...

  5. python多线程--线程同步

    如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步. 使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire ...

  6. HackerRank# Wet Shark and Two Subsequences

    原题地址 对于给定的两个约束条件,可以通过联立方程组直接解出子序列A的和和子序列B的和,即sum(A) = (r + s) / 2,sum(B) = (r - s) / 2,假设|A|=|B|=n 所 ...

  7. 【dfs+理解题意+构造】【待重做】codeforces E. Ice cream coloring

    http://codeforces.com/contest/805/problem/E [题意] 染色数是很好确定,最少染色数是max(si)(最小为1,即使所有的si都为0,这样是单节点树形成的森林 ...

  8. 库操作&表操作

    系统数据库 ps:系统数据库: mysql 授权库,主要存储系统用户的 权限信息 test MySQL数据库系统自动创建的 测试数据库 ination_schema 虚拟库,不占用磁盘空间,存储的是数 ...

  9. wordpress优化:Gravatar头像被墙及解决方案

    网站缓存现象: 打开网站是左下角出现0.gravatar.com.1.gravatar.com或2.gravatar.com字样,网站一直处于缓存状态,迟迟未能打开.很多人都会缺乏耐心地等待一个网页的 ...

  10. 洛谷—— P1785 漂亮的绝杀

    https://www.luogu.org/problem/show?pid=1785 题目背景 话说absi2011的企鹅在和斗神塔第60层的Boss战斗 不好,这局要输了,企鹅还剩4血了Boss还 ...