HibernateReview Day1 - Introduction
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的更多相关文章
- A chatroom for all! Part 1 - Introduction to Node.js(转发)
项目组用到了 Node.js,发现下面这篇文章不错.转发一下.原文地址:<原文>. ------------------------------------------- A chatro ...
- Introduction to graph theory 图论/脑网络基础
Source: Connected Brain Figure above: Bullmore E, Sporns O. Complex brain networks: graph theoretica ...
- NOIp2016 Day1&Day2 解题报告
Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...
- INTRODUCTION TO BIOINFORMATICS
INTRODUCTION TO BIOINFORMATICS 这套教程源自Youtube,算得上比较完整的生物信息学领域的视频教程,授课内容完整清晰,专题化的讲座形式,细节讲解比国内的京师大 ...
- mongoDB index introduction
索引为mongoDB的查询提供了有效的解决方案,如果没有索引,mongodb必须的扫描文档集中所有记录来match查询条件的记录.然而这些扫描是没有必要,而且每一次操作mongod进程会处理大量的数据 ...
- (翻译)《Hands-on Node.js》—— Introduction
今天开始会和大熊君{{bb}}一起着手翻译node的系列外文书籍,大熊负责翻译<Node.js IN ACTION>一书,而我暂时负责翻译这本<Hands-on Node.js> ...
- Introduction of OpenCascade Foundation Classes
Introduction of OpenCascade Foundation Classes Open CASCADE基础类简介 eryar@163.com 一.简介 1. 基础类概述 Foundat ...
- 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 ...
- Introduction to Microsoft Dynamics 365 licensing
Microsoft Dynamics 365 will be released on November 1. In preparation for that, Scott Guthrie hosted ...
随机推荐
- c++中编译器的作用
编译器的部分工作是寻找程序代码中的错误.编译器不能查出程序的意义是否正确. 但它能够查出程序形式上的错误.以下是编译器能查出的最普遍的一些错误: (1)语法错误.程序猿犯了c++语言中的语法错误. ( ...
- python中的中文编码
我现在编写python代码,有一些内容需要用中文编写,例如注释,一些其它的东西 默认python是不支持中文的,包括两个方面不支持,一是文件编码默认是ansi的,二是虚拟机运行解析脚本时也是非utf的 ...
- Swift - 文本标签(UILabel)的用法
1,标签的创建 1 2 3 4 5 6 7 8 9 10 import UIKit class ViewController: UIViewController { override func ...
- My Emacs For Common Lisp
My Emacs For Common Lisp My Emacs For Common Lisp
- linux串口编程总结
串口本身.标准和硬件 † 串口是计算机上的串行通讯的物理接口.计算机历史上,串口以前被广泛用于连接计算机和终端设备和各种外部设备.尽管以太网接口和USB接口也是以一个串行流进行数据传送的.可是串口连接 ...
- JavaScript面向对象编程(10)高速构建继承关系之对象拷贝
前面的样例我们是通过构造器创建对象.而且希望该对象继承来自另外一个构造器的对象 我们也能够直接面向一个对象来达成继承的目的.使用下属步骤: 1.拷贝一个对象 2.给新对象加入属性 /** * 通过拷贝 ...
- KMP算法及KMP算法的应用(POJ2406)
///KMP算法#include<bits/stdc++.h> using namespace std; ]; void makeNext(const char P[],int next[ ...
- [C++]引用浅析
Date:2013-12-22 Summary: 引用数据类型的一些概念记录(沟通中提到引用必须结合语境才能知道说的是引用变量还是“引用”这一行为,再次提到引用指的一般是引用变量) Contents: ...
- Transparency Tutorial with C# - Part 2
Download Compositing Mode demo project - 24 Kb Download Compositing Mode source - 26 Kb Download Com ...
- AeroGear.js 1.2.0 发布,手机Web应用脚手架 - 开源中国社区
AeroGear.js 1.2.0 发布,手机Web应用脚手架 - 开源中国社区 AeroGear.js 1.2.0 发布,手机Web应用脚手架