web备份版本,详见doc版本。

一、背景(部署简单回顾)

我们知道,一个Hibernate快速上手的简单流程是这样。

1引入对应jar包。

中间涉及log4的jar包和配置,略。

2 实体类

 package com.test.entity;
import java.util.Date; /**
* 你可以看到这个类对属性的存取方法(getter and setter method)使用了标准
JavaBean 命名约定,同时把类属性(field)的访问级别设成私有的(private)。这是推荐的
设计,但并不是必须的 */
public class Event {
private Long id;
private String title;
private Date date;
//所有的持久化类(persistent classes)都要求有无参的构造器,因为 Hibernate 必须使用 Java
//反射机制来为你创建对象
public Event() {}
//getter/setter
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}

3实体类映射文件

Event.hbm.xml

 <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.tutorial.domain">
<class name="Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="native" />
</id>
</class>
<property name="date" type="timestamp" column="EVENT_DATE" />
<property name="title" />
</hibernate-mapping>

4配置hibernate.properties或者hibernate.cfg.xml文档

 <?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<!--
具体的配置信息可参见hibernate_home/etc/hibernate.properties相关配置项
如何要移植数据时,只要将下面数据库信息修改就可以了。
-->
<!-- 配置mysql数据库连接串 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3036/hibernate_first</property>
<!-- 配置mysql数据库jdbc驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 配置mysql数据库连接用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 配置mysql数据库连接用户密码 -->
<property name="hibernate.connection.password">root</property>
<!--配置数据库适配器(使用何中数据库)-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 是否显示hibernate的SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 实体类导出至数据库时,如果存在的表处理方式:
hibernate.hbm2ddl.auto :(create-drop、create、update、validate)
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 配置实体类映射文件 位于property之后
映射文件要求为完整路径,目录之前使用/隔开
-->
<mapping resource="com/test/mapping/Event.hbm.xml"/>
</session-factory>
</hibernate-configuration>

5-1启动

方式一使用hibernate工具类将对象模型生成关系模型(hbm to ddl)

(也就是实体类生成数据库中的表)

 import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
/**
* Hibernate工具<br/>
* 将对象模型生成关系模型(将对象生成数据库中的表)
* 把hbm映射文件转换成DDL
* 生成数据表之前要求已经存在数据库
* 注:这个工具类建立好后,以后就不用建立了。以后直接Copy来用。
/
public class ExportDB {
public static void main(String[] args){
/*
* org.hibernate.cfg.Configuration类的作用:
* 读取hibernate配置文件(hibernate.cfg.xml或hiberante.properties)的.
* new Configuration()默认是读取hibernate.properties
* 所以使用new Configuration().configure();来读取hibernate.cfg.xml配置文件
*/
Configuration cfg = new Configuration().configure(); /*
* org.hibernate.tool.hbm2ddl.SchemaExport工具类:
* 需要传入Configuration参数
* 此工具类可以将类导出生成数据库表
*/
SchemaExport export = new SchemaExport(cfg); /*
* 开始导出
* 第一个参数:script 是否打印DDL信息
* 第二个参数:export 是否导出到数据库中生成表
*/
export.create(true, true); }
}

5-2启动

方式二:将引用部署于web容器。根据hibernate.cfg.xml中的配置:

<property name="hibernate.hbm2ddl.auto">create 或者update</property> Hibernate将自动更新表格结构。

6 client常规操作

以下代码来源wtj276

 import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class Client { public static void main(String[] args){ //1读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure(); /*
* 2创建SessionFactory
* 一个数据库对应一个SessionFactory
* SessionFactory是线程安全的。
*/
SessionFactory factory = cfg.buildSessionFactory(); //3创建session
//此处的session并不是web中的session,而是HibernateSession
//session只有在用时,才建立concation,session还管理缓存。
//session用完后,必须关闭。
//session是非线程安全,一般是一个请求一个session.
Session session = null; try { session = factory.openSession(); //5手动开启事务(可以在hibernate.cfg.xml配置文件中配置自动开启事务)
session.beginTransaction(); User user = new User();
user.setName("张三");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
/*
* 6增删改查操作
保存数据等操作,此处的数据是保存对象,这就是hibernate操作对象的好处,
* 我们不用写那么多的JDBC代码,只要利用session操作对象,至于hibernat如何存在对象,这不需要我们去关心它,
* 这些都有hibernate来完成。我们只要将对象创建完后,交给hibernate就可以了。
*/
session.save(user); //7.1提交事务
session.getTransaction().commit(); } catch (Exception e) {
e.printStackTrace();
//7.2异常,回滚事务
session.getTransaction().rollback();
} finally {
if (session != null) {
//8关闭session
session.close();
}
}
}
}

为了方便跟踪sql语句执行,可以在hibernate.hbm.xml中加入下以代码:

<property name="hibernate.show_sql">true</property>

完成

Hibernate3回顾-1-部署的更多相关文章

  1. Hibernate3回顾-4-事务和并发管理

    4.事务和并发 Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的Transaction实际上是底层的JDBC Tra ...

  2. Hibernate3回顾-3-Session管理

    3.Session管理 仅为个人理解.请指正 3.1背景 由于Configuration的创建耗费系统的资源.所以有必要只将Configuration实例化一次,之后通过SessionFactory获 ...

  3. Hibernate3回顾-6-hibernate缓存(性能优化策略)

    主要来源: http://blog.csdn.net/csh624366188/article/details/7612142  (比较详细) http://www.cnblogs.com/20091 ...

  4. Hibernate3回顾-5-简单介绍Hibernate session对数据的增删改查

    5. Hibernate对数据的增删改查 5.1Hibernate加载数据 两种:get().load() 一. Session.get(Class arg0, Serializable arg1)方 ...

  5. Hibernate3回顾-2-相关概念

    2.几个概念 HIbernate简要的体系结构如下图所示 通过上图能够发现HIbernate需要一个hibernate.properties文件,该文件用于配置Hibernate和数据库连接的信息.还 ...

  6. 理解裸机部署过程ironic

    部署物理机跟部署虚拟机的概念在nova来看是一样,都是nova通过创建虚拟机的方式来触发,只是底层nova-scheduler和nova-compute的驱动不一样.虚拟机的底层驱动采用的libvir ...

  7. [ ceph ] CEPH 部署完整版(CentOS 7 + luminous)

    1. 前言 拜读了 胖哥的(el7+jewel)完整部署 受益匪浅,目前 CEPH 已经更新到 M 版本,配置方面或多或少都有了变动,本博文就做一个 ceph luminous 版本完整的配置安装. ...

  8. 【问题管理】-- Tomcat8部署项目加载静态资源html页面编码错误

    1.问题背景及解决方式 最近在回顾Tomcat部署Web项目,自己简单地从Tomcat的下载安装及配置server.xml文件入手,学习Tomcat的项目部署,在自己使用IDEA创建了一个简单地web ...

  9. ansible批量部署(一)

    自动化运维工具shell脚本/Ansible(无客户端)/Saltstack(master-minion) 回顾服务器部署的流程:买云主机->环境部署->软件部署->配置部署-> ...

随机推荐

  1. vi的用法 【转】

        vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器 ...

  2. android定时更新文件

    static变量在程序退出时不会清空的,除非系统内存不足以运行其他程序,才会清空.给SD卡上的文件过期时间.可以简单的在给文件命名时后面加个创建时间,在下次访问时判断是否需要更新.比如本来文件名是 i ...

  3. jconsole远程查看jvm性能

    Java VisualVM -- JDK自带的强大性能监测工具 这里给出了另一种,可以通过jdk下bin目录下的jconsole.exe来观察java程序内存的使用及变化情况 一般远程调试可以用,性能 ...

  4. 学习使用:before和:after伪元素

    http://www.w3cplus.com/css3/learning-to-use-the-before-and-after-pseudo-elements-in-css.html

  5. spring mvc 重定向传参

    参考链接如下: http://bbs.csdn.net/topics/391034118?page=1 自己的示例程序: 详细页面提交一个修改动作,修改完成后跳转到检索页面,把检索条件重新赋值给检索页 ...

  6. c#部分---又见循环。。

    小时候背的诗,现在竟然这样玩. 又是循环,可见其无处不在的特性.就像“春眠不觉晓,处处蚊子咬.”

  7. VS2013远程调试功能

    我跪了,我真的跪了. 实际证明这是不可行的. [开发机] Win10,64bits,VS2013 [目标机] Winxp VS2013的debug tool不能在xp上安装运行,卒! 如果有win7, ...

  8. [原创]cocos2d-x研习录-第一阶 背景介绍 之 cocos2d家族史

    Cocos2D是一个2D开源游戏引擎,它最早是由Ricardo Quesada(阿根廷人,社区简称Riq)和他的朋友们用Python开发的,用于开发2D游戏和基于2D图形的任何应用.最早引擎的名字源自 ...

  9. 论文阅读之:Is Faster R-CNN Doing Well for Pedestrian Detection?

    Is Faster R-CNN Doing Well for Pedestrian Detection? ECCV 2016   Liliang Zhang & Kaiming He 原文链接 ...

  10. 论文阅读之 DECOLOR: Moving Object Detection by Detecting Contiguous Outliers in the Low-Rank Representation

    DECOLOR: Moving Object Detection by Detecting Contiguous Outliers in the Low-Rank Representation Xia ...