前几个博客讨论SSH2该框架Struts,它代表层,集成封装。和使用WebWork作为核心处理,依赖映射是它的处理核心。在使用时需要Struts.xml配置相应Action和Interceptor够完毕主要的操作,它的操作相对简单,接下来介绍还有一个框架Hibernate,它的使用会相对复杂些。

一、Hibernate概述

Hibernate是冬眠的意思,它是指动物的冬眠,可是本文讨论的Hibernate却与冬眠毫无关系。而是接下来要讨论的SSH2框架中的一员。Hibernate是一个开源的项目,它是一个对象关系模型的框架,而且对JDBC进行了很轻量级的封装,程序猿在开发时能够使用对象编程思维进行开发。

Note:轻量级和重量级的差别,轻量级的框架包较小,并且使用较简单,并且測试easy,开发效率高;重量级框架则包较大,内部封装的业务过程较复杂。測试困难,如Struts。

1、对象关系模型

Hibernate实现了对象--关系模型的映射,在编程时程序猿可以直接使用对象模型对数据库进行操作,它对JDBC进行了轻量级的封装,另外还封装了对数据库操作的SQL语句,使用简单。尽管它有非常多长处,可是使用数据库特性的语句。将非常难调优,如:存储过程等就比較困难。

1.1 Hibernate优缺点

(1)长处

    ①  提高生产力。

②  使开发更加对象化(阻抗不匹配)。

③  可移植性;

④  没有侵入性,支持透明持久化。

     (2)缺点

①  使用数据库特性的语句,将非常难调优;

②  对大批量数据更新存在问题。

③  系统中存在大量的统计查询功能。

二、Hibernate实例

上文对Hibernate做了一些初步的解读,有了理论当然更要有实践,没有使用过Hibernate是不懂得它的便利的,这正如一个喜欢喝酒的人第一次品尝到茅台一样。使用后才干更深刻的理解。

       以下的实例採用了MySQL数据库,在MySQL中创建了一个名为Hibernate_first的数据库,并通过Hibernate的映射文件採用对象化编程的方法创建了一个User表。并向User表中加入信息。



  详细步骤:

(1)创建一个普通的Java Application;

      (2)加入Hibernate的jar包,加入jar包时须要将Hibernate.jar、Hibernate引用的第三方jar包以及Hibernate和mysql连接的jar包一同引入当中;

      (3)加入数据库连接配置文件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">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">ab12</property>
<!-- dialect:方言。封装的底层API。相似于Runtime,将数据库转换为配置中的对应的语言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 设置数据显示对数据库的操作 -->
<property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property>
<mapping resource="com/hibernate/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

(4)建立实体类名称为User.java

package com.hibernate;

import java.util.Date;

public class User {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getExpireTime() {
return expireTime;
}
public void setExpireTime(Date expireTime) {
this.expireTime = expireTime;
}
private String name;
private String password;
private Date createTime;
private Date expireTime;
}

(5)创建User实体类的映射文件User.hbm.xml。完毕实体类的映射,并将该文件增加到Hibernate.cfg.xml文件里。

<?

xml version="1.0"?

>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2014-4-30 15:39:33 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.hibernate.User">
<id name="id">
<generator class="uuid"/>
</id>
<property name="name"/>
<property name="password"/>
<property name="createTime"/>
<property name="expireTime"/>
</class>
</hibernate-mapping>

(6)编写ExportDB.java,将映射文件转化为对应的DDL。

package com.hibernate;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport; /**
* 将hbm生成ddl
* @author zhang
*
*/
public class ExportDB {
public static void main(String[] args){
//首先声明获取配置文件
//默认读取Hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure(); //将读取到的xml文件导出到ddl
SchemaExport export=new SchemaExport(cfg);
export.create(true, true);
}
}

执行ExportDB类就可以完毕数据库表的创建工作,在cmd中查看详细操作后的视图例如以下:

上面的样例仅仅是完毕了连接数据库及在数据库中创建表的操作,创建完表后要向表中加入数据,建立client类Client,向User表中加入新的用户信息。详细代码例如以下:

package com.hibernate;

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){ //读取hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure(); //创建sessionfactory,相当于数据库镜像。sessionfactory由于是镜像所以就一份,最好创建一次
//一般是线程安全的。 SessionFactory factory=cfg.buildSessionFactory(); //取的session
Session session=null; try{
session=factory.openSession();
//开启事务
session.beginTransaction();
User user=new User();
user.setName("张三");
user.setPassword("123");
user.setCreateTime(new Date()); //保存User对象
session.save(user); //提交事务
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();//打印错误信息
//回滚事务
session.getTransaction().rollback();
}finally{
if(session != null){
if(session.isOpen()){
//关闭session
session.close();
}
}
}
}
}

在mysql中查看加入的信息显演示样例如以下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdfeGlueGl1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

上面操作的信息已经写入到数据库中,数据库中的数据在save之后在数据库中生成了相应的行,可是此时还没有真正的保存。而是在数据库中已经有相相应的行数据,当使用session的事务提交完毕后才把数据提交到了数据库中。

在映射的整个过程中它涉及到了对象的状态的转换。我们称之为持久对象生命周期,有关生命周期的内容将会在下篇博客着重讨论。

结语

本文对Hibernate的基本用法进行了简单的介绍。它的这样的映射关系使得对数据库的操作变得非常easy,开发者仅仅须要关系对象模型就可以,而不须要再去编写复杂的关系模型语句,可是Hibernate相同也编写查询语句,她就是HQL,详细用法将会在以后讨论。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

【SSH2(理论+实践)】--Hibernate步步(一个)的更多相关文章

  1. 【SSH2(理论+实践)】--图说Struts2的执行

        前几篇文章讨论了有关Struts2的核心机制及一些基础,但同一时候也遗留下了非常多问题.这些问题主要是针对Struts2的一些使用技巧的,该篇文章将会针对Struts2的使用技巧进行讨论, ...

  2. [Java并发编程(四)] Java volatile 的理论实践

    [Java并发编程(四)] Java volatile 的理论实践 摘要 Java 语言中的 volatile 变量可以被看作是一种 "程度较轻的 synchronized":与 ...

  3. Innovus教程 - Flow系列 - MMMC分析环境的配置概述(理论+实践+命令)

    本文转自:自己的微信公众号<集成电路设计及EDA教程> <Innovus教程 - Flow系列 - MMMC分析环境的配置概述(理论+实践+命令)>   轻轻走过,悄悄看过,无 ...

  4. PT教程 - 应用系列 - ECO修复Timing(理论+实践+脚本分享)

    ​本文转自:自己的微信公众号<集成电路设计及EDA教程> <PT教程 - 应用系列 - ECO修复Timing(理论+实践+脚本分享)> 这篇推文讲一下数字IC设计中的post ...

  5. ICC教程 - Flow系列 - 概念系列 - ECO (理论+实践+脚本分享)

    本文转自:自己的微信公众号<集成电路设计及EDA教程> <ICC教程 - Flow系列 - 概念系列 - ECO (理论+实践+脚本分享)> 这篇推文讲一下数字IC设计中的po ...

  6. Hibernate的一个简单应用例子

    Hibernate是一个开源的ORM框架,顾名思义,它的核心思想即ORM(Object Relational Mapping,对象关系映射),可以通过对象来操作数据库中的信息,据说开发者一开始是不太熟 ...

  7. 【hibernate】1、Hibernate的一个注解 @Transient

    @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic ...

  8. 关于Hibernate的一个简单小程序

    本人根据视频学习了一下三大框架中比较简单的一个Hibernate,并简单完成了一个运用Hibernate的小程序 Hibernate是一个简化web程序Dao层的一个框架,应用他,可以完全脱离sql语 ...

  9. [转帖]从入门到实践:创作一个自己的 Helm Chart

    从入门到实践:创作一个自己的 Helm Chart https://www.cnblogs.com/alisystemsoftware/p/11436469.html 自己已经搭建好了 helm 和t ...

随机推荐

  1. windows phone (17) ManipulationDelta事件

    原文:windows phone (17) ManipulationDelta事件 ManipulationDelta事件会是在触摸位置发生变化是引发,比如可以根据用户在触摸屏中移动的位置,图片发生相 ...

  2. windows phone 页面导航(6)

    原文:windows phone 页面导航(6) 页面导航的例子我们使用的是两个页面,从第一个页面(MainPage)导航到第二个页面(SecondPage),然后可以从第二个页面导航到第一个页面 , ...

  3. Angularjs 基于karma和jasmine的单元测试

    目录: 1. 单元测试的配置 2. 实例文件目录解释 3. 测试controller     3.1 测试controller中变量值是否正确     3.2 模拟http请求返回值,测试$http服 ...

  4. 【安德鲁斯】基于脚本的数据库&quot;增量更新&quot;,如果不改变,每次更新java代码、!

    思维: 1.当然,它是基于SQLiteOpenHelper.onCreate(第一个呼叫建立).onUpdate(当所谓的升级计划) 2.用"脚本"(脚本制作详细方法问度娘)做数据 ...

  5. 为什么android你用的越多,速度较慢的手机

    依据第三方的调研数据显示,有 77% 的 Android 手机用户承认自己曾遭遇过手机变慢的影响,百度搜索"Android+ 卡慢",也有超过 460 万条结果. 在业内.Andr ...

  6. NTP方式保证以时间戳同步可靠性

    数据库同步的方式有设置标志位同步方式.以时间戳同步的方式,对于一对一的同步这两种方式都满足,可是对于一对多的同步,则仅仅能选择时间戳的同步方式了.可是已时间戳同步的方式的一个问题是怎样可靠的保证数据能 ...

  7. C# 几种方法来复制的阵列

    突然接触到,所以就写一下共享. 首先说明一下,数组是引用类型的,所以注意不要在复制时复制了地址而没有复制数值! 事实上在复制数组的时候.一定要用new在堆中开辟一块新的空间专门用于存放数组.这样才是有 ...

  8. 【Android笔记】MediaPlayer基本用法

    Android MediaPlayer基本使用方式 使用MediaPlayer播放音频或者视频的最简单样例: JAVA代码部分: public class MediaPlayerStudy exten ...

  9. js匀速运动停止条件

    匀速运动,怎么让它到达指定位置时停止呢? 原理: 1,物体和目标的差值距离小于等于速度时,即停止 2,接着让物体移动位置等于目标位置 示例:匀速运动停止 html部分 <input type=& ...

  10. js淡入淡出

    示例: js淡入淡出 原理:更改css不透明数值 知识点: css不透明 filter:alpha(opacity:30); opacity:0.3;} 小技巧: 小于临界值,做加速 大于临界值,做减 ...