Hibernate已经学过去大概有半个月了,然后默默的忘掉了……所谓Practice makes perfect. 我尽力重新拾起来。

1.什么是ORM

在介绍Hibernate之前,我们先学习下ORM。

ORM全名是Object/Relation Mapping,即对象/关系数据库映射。ORM是一种规范,顾名思义,它描述了这一类框架的基本特征:完成面向对象编程语言到关系型数据库的映射关系。

对于用类似Java的语言进行应用开发的时候,我们从项目已开始就进行的是面向对象分析、设计和编程,但是当进行持久化数据库访问的时候,我们又必须又用到关系型数据库的访问方式。ORM此时,就拯救程序员于水火,它把关系型数据库包装成面向对象的模型。当我们应用ORM框架时,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象。

应用程序-------CRUD----->持久化对象(ORM工具)<-----相互映射------> 关系数据库

而Hibernate就是比较流行的ORM框架之一。

2.什么是Hibernate

Hibernate是一个面向Java环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构当中,将开发者从繁重的数据持久化任务释放出来(当然,不是百分百)。

Hibernate不仅管理Java类到数据库的映射(包括Java数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法(如HQL),可以大幅度减少开发人员使用SQL和JDBC处理数据的时间。

Tips:POJO:Plain Ordinary Java Objects,普通Java对象,即普通JavaBeans;

PO:Persistent Object,持久化对象。

3. Hibernate的数据库操作

上文中提到ORM中一个重要的工具:PO。PO用来完成持久化操作,即以面向对象的方式操作关系型数据库。Hibernate中的PO完全可以用POJO来做为持久化对象使用。所以Hibernate又被称为低侵入式设计,即Hibernate不要求持久化继承人和父类,或者实现任何接口,这样可以保证代码不被污染。

public class News{
//新闻类的标识属性
private int id;
//新闻标题
private String title;
//新闻内容
private String content; //setters and getters
...
}

这个普通的JavaBean目前还不具备持久化操作的能力,为了使其具备持久化能力,还需要配置News.hbm.xml文件。

<?xml version="1.0" encoding="gb2312"?>
<!-- 指定Hiberante3映射文件的DTD信息 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- hibernate-mapping是映射文件的根元素 -->
<hibernate-mapping>
<!-- 每个class元素对应一个持久化对象 -->
<class name="News" table="news">
<!-- id元素定义持久化类的标识属性 -->
<id name="id">
<!-- 指定主键生成策略 -->
<generator class="identity"/>
</id>
<!-- property元素定义常规属性 -->
<property name="title"/>
<property name="content"/>
</class>
</hibernate-mapping>

主键生成策略详见>>>《Hibernate主键生成策略》

到此,我们可以看到,PO=POJO + XML映射文件。

接下来,要配置hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
<!-- 指定Hibernate配置文件的DTD信息 -->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- hibernate- configuration是连接配置文件的根元素 -->
<hibernate-configuration>
<session-factory>
<!-- 指定数据库方言 -->
<property name="dialect">
org.hibernate.dialect.OracleDialect
</property>
<!-- 指定连接数据库的url,hibernate连接的数据库名 -->
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:orcl
</property>
<!-- 指定连接数据库的用户名 -->
<property name="connection.username">system</property>
<!-- 指定连接数据库的密码 -->
<property name="connection.password">tcpxcrt4f3</property>
<!-- 指定连接数据库所用的驱动 -->
<property name="connection.driver_class">
oracle.jdbc.OracleDriver
</property>
<!-- 数据库实例名称 -->
<property name="myeclipse.connection.profile">orcl</property>
<!-- 罗列所有的映射文件 -->
<mapping resource="com/zf/entity/News.hbm.xml" /> </session-factory> </hibernate-configuration>

最后一步,完成消息插入的代码:

public class NewsManager
{
public static void main(String[] args)
throws Exception
{
//实例化Configuration,
Configuration conf = new Configuration()
//下面方法默认加载hibernate.cfg.xml文件
.configure();
//以Configuration创建SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//创建Session
Session sess = sf.openSession();
//开始事务
Transaction tx = sess.beginTransaction();
//创建消息实例
News news = new News();
//设置消息标题和消息内容
news.setTitle("这里是新闻标题");
news.setContent("这里是新闻的正文。"
+ "欢迎来这里交流http://www.cnblogs.com/zifo");
//保存消息
sess.save(news);
//提交事务
tx.commit();
//关闭Session
sess.close();
sf.close();
}
}

这就完成了一个简单的Hibernate消息插入的例子。

总结起来,为了使Hibernate进行持久化操作,通常有如下步骤:

1)开发持久化类,由POJO和映射文件组成。

2)获取Configuration。

3)获取SessionFactory。

4)获取Session,打开事务。

5)用面向对象的方式操作数据库。

6)关闭事务,关闭Session。

HibernateReview Day1 - Introduction的更多相关文章

  1. A chatroom for all! Part 1 - Introduction to Node.js(转发)

    项目组用到了 Node.js,发现下面这篇文章不错.转发一下.原文地址:<原文>. ------------------------------------------- A chatro ...

  2. Introduction to graph theory 图论/脑网络基础

    Source: Connected Brain Figure above: Bullmore E, Sporns O. Complex brain networks: graph theoretica ...

  3. NOIp2016 Day1&Day2 解题报告

    Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...

  4. INTRODUCTION TO BIOINFORMATICS

    INTRODUCTION TO BIOINFORMATICS      这套教程源自Youtube,算得上比较完整的生物信息学领域的视频教程,授课内容完整清晰,专题化的讲座形式,细节讲解比国内的京师大 ...

  5. mongoDB index introduction

    索引为mongoDB的查询提供了有效的解决方案,如果没有索引,mongodb必须的扫描文档集中所有记录来match查询条件的记录.然而这些扫描是没有必要,而且每一次操作mongod进程会处理大量的数据 ...

  6. (翻译)《Hands-on Node.js》—— Introduction

    今天开始会和大熊君{{bb}}一起着手翻译node的系列外文书籍,大熊负责翻译<Node.js IN ACTION>一书,而我暂时负责翻译这本<Hands-on Node.js> ...

  7. Introduction of OpenCascade Foundation Classes

    Introduction of OpenCascade Foundation Classes Open CASCADE基础类简介 eryar@163.com 一.简介 1. 基础类概述 Foundat ...

  8. 000.Introduction to ASP.NET Core--【Asp.net core 介绍】

    Introduction to ASP.NET Core Asp.net core 介绍 270 of 282 people found this helpful By Daniel Roth, Ri ...

  9. Introduction to Microsoft Dynamics 365 licensing

    Microsoft Dynamics 365 will be released on November 1. In preparation for that, Scott Guthrie hosted ...

随机推荐

  1. HDOJ 4883 TIANKENG’s restaurant

    称号: TIANKENG's restaurant Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Ja ...

  2. RobotFrameWork(十一)AutoItLibrary测试库在win7(64bit)下安装及简单使用

    最近安装AutoItLibrary,发现在win7 x64下无法安装成功,后来经过定位,发现是3rdPartyTools\AutoIt目录下面AutoItX3.dll的问题.因为AutoItX3.dl ...

  3. [置顶] head first 设计模式之----Observer pattern

    浅谈设计模式之----观察者模式      观察者模式也是我们日常程序编写中碰到比较多的一种设计模式.首先,所谓观察者模式定义就是指:在对象之间定义了一对多的依赖,这样一来,当一个对象的状态发生变化的 ...

  4. struts 2吊牌s:if 、s:iterator注意

    疏忽,也没有相应的总结.实际上JSTL标签Struts2标签混淆.导致一些上述问题的细节.今天我给从下一个总结,同 后不要再犯这种错误. 总喜欢在s:if标签里面使用$,导致各种数据读不出来. str ...

  5. 如何理解java回电话

    同android中间Button的setOnClickListener这个回调案例: Button button = (Button)this.findViewById(R.id.button); b ...

  6. 解决ScrollView中的ListView无法显示全

    问题描述: ListView加入到ScrollView中之后,发现只能显示其中一条,具体原因得看一下源代码.现在先贴一下方案 (转自:http://blog.csdn.net/hitlion2008/ ...

  7. 高度关注!国务院对A股发出强烈信号↓

    高度关注!国务院对A股发出强烈信号↓http://dwz.cn/2qHBd1郎咸平:中国股市存在一大隐疾 使其成为全球市场的一个另类!http://dwz.cn/2qHBVy一不小心,马云又完成了四场 ...

  8. ArcSDE当关系查询ArcMap与REST查询结果不一致问题的解决

    首先描述来形容什么问题: 周边环境:ArcGIS10.x.Oracle 11g R2,这个问题无关与环境 假设用户使用关联查询(比方一个空间数据与一个属性数据进行关联),在ArcGIS for Des ...

  9. HDU 3571 N-dimensional Sphere(高斯消元 数论题)

    这道题算是比较综合的了,要用到扩展欧几里得,乘法二分,高斯消元. 看了题解才做出来orz 基本思路是这样,建一个n*(n-1)的行列式,然后高斯消元. 关键就是在建行列式时会暴long long,所以 ...

  10. [置顶] think in java interview-高级开发人员面试宝典(七)

    上两周研发任务太紧了,所以担搁了一下,我们继续我们的面试之旅. 下面是一个基于图书系统的15道SQL问答,供大家参考 问题描述:本题用到下面三个关系表:CARD     借书卡.   CNO 卡号,N ...