介绍

数据持久化概念

数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如:文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、xml、二进制流等。

xml:可扩展指标语言。

1、hibernate框架及orm

hibernate:是数据持久化工具,是一个开放源代码的对象关系映射框架。

orm:(obiect/relational/mapping)即对象/关系映射,是一种数据持久化技术。(作用:有了orm程序员就不需要再使用sql语句操作数据库中的表,使用API直接操作javabean对象就可以实现数据的存储、查询、更改和删除等操作)

2、hibernate优点:

(1)hibernate功能强大,是java应用与关系数据库之间的桥梁,较之JDBC方式操作数据库,代码量大大减少,提高了持久化代码开发速度,降低了维护成本。

(2)支持许多面向对象的特性,如组合,继承,多态等,使得 开发人员不必在面向业务领域的对象模型和面向数据库模型之间来回切换,方便开发人员进行领域驱动的面向对象设计与开发。

(3)可移植性好。系统不会绑定在某个特定的关系型数据库上,对于系统更换数据库,通常只需要修改Hibernate 配置文件即可正常运行。

(4) Hibernate 框架开源免费,可以在需要时研究源代码,改写源代码,进行功能的定制,具有可扩展性。

Hibernate 适用于大中型项目。

3、hibernate缺点:

(1)不适合以数据为中心大量使用存储过程的应用。
(2)大规模的批量插入、修改和删除不适合用Hibernate。

Hibernate 不适用于小型项目; 也不适用于关系模型设计不合理、不规范的系统。

Hibernate环境搭建

过程:

1,下载需要的jar包

网址:http://www.hibernate.org

推荐下载:hibernate-distribution-3.3.2.GA-dist.zip  解压后目录结构如图:

在根目录中存放着hibernate3.jar,hibernate的接口和类就在这个jar包中,所以它是必不可少的。

hibernate会使用一些第三方类库,这些类库放在lib\required目录下,如下图

以上具体架包不再详细说明

2.部署jar包具体步骤如下

(1)将下好的hibernate3.jar 包和lib\required 目录下的jar 包及Oracle数据库驱动jar包复制到建好的工程WEB-INF 下的lib 目录中。

(2)通过MyEclipse导入上述的包。在MyEclipse中的工程上游记,选择“Build Path”-->“Configure Build Path”选项,如图所示:

在弹出的窗体中单击“Add JARs”按钮,如下:

在弹出的在弹出的“JAR Selection”窗体中选择lib 下刚刚复制的jar 包,如图所示,单击“OK”按钮。

这时在工程中加入了所选的jar 包,如图所示。

3.创建hibernate配置文件 hibernate.cfg.xml

hibernate 配置文件只要用于配置数据库连接和hibernate运行时所需的各种特性

在工程的src目录下添加hibernate配置文件,如下

默认文件名为hibernate.cfg.xml。该文件需要配置数据库连接信息和hibernate下的参数:

代码如下:

<?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> <!-- Database connection settings -->
<!-- 数据库jdbc驱动 -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDialect</property>
<!-- 数据库URL -->
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1.:1521:orcl</property>
<!-- 数据库用户名 -->
<property name="connection.username">scott</property>
<!-- 数据库密码 -->
<property name="connection.password">123456</property> <!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property> <!-- SQL dialect -->
<!-- 每个数据库都有其对应的Dialect以匹配其平台特性 -->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> <!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property> <!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<!-- 映射文件地址 -->
<mapping resource="src/com/entity/hibernate.hbm.xml"/> </session-factory> </hibernate-configuration>

(1)connection.url:表示数据库URL。jdbc:oracle:thin:@127.10.0.1:1251:orcl,是数据库URL。其中,jdbc:oracle:thin:@是固定写法,127.10.0.1是IP地址,1521是端口号,orcl是数据库实例名。

(2)connection.username:表示数据库用户名

(3)connection.password:表示数据库用户密码

(4)connection.driver_class:表示数据库驱动。oracle.jdbc.driver.OracleDriver 是数据库的驱动类。

(5)dialect:用于配置Hibernate 使用的数据库类型。Hibernate支持几乎所有的主流数据库,包括Oracle,DB2,MS SQL Server和MYSQL等。

org.hibernate.dialect.Oracle10gDialect制定当前数据库类型是oracle.

(6)show_sql: 参数为true,则程序运行时在控制台输出SQL 语句。

(7)format_sql: 参数为true,则程序运行时在控制台输出格式化后的SQL 语句。

(8)mapping:映射文件地址

4,创建持久化类和映射文件(两者之间相互映射)

首先根据一张数据库表创建持久化类,它是指其实例状态需要被Hibernate持久化到数据库中的类,要求持久化类必须具有一个无参的构造方法。

下面我们以现有数据库中的dept表在做示范:

//创建持久化类
package src.com.entity; public class dept {//和数据库表明一致
private int deptno;//类型也和数据库表数据类型一致
private String dname;
private String dpwd;
//进行set/get构造
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getDpwd() {
return dpwd;
}
public void setDpwd(String dpwd) {
this.dpwd = dpwd;
} }

dept持久化类有一个deptno属性,用来唯一标识dept类的每个对象。deptno属性又称id属性。在Hibernate中,这个id属性被称为对象标识符OID。一个dept对象和dept表中的一条对象对应。

创建持久化类后,还需要告诉Hibernate,持久化类dept映射到数据库中哪个表,以及哪个属性对应到数据库的 哪个字段,这些都要在映射文件dept.hbm.xml中配置,接下来演示映射文件的代码:

在Hibernate中,映射文件通常以.hbm.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"> <hibernate-mapping>
<!-- name值是持久化类的地址 table值是数据库表名 -->
<class name="src.com.entity.dept" table="dept">
<!-- id代表的是主键
nanme是持久化类属性的名称
column是数据库表列名 -->
<id name="deptno" column="deptno">
<!-- 主键生成策略 -->
<generator class="assigned"/>
</id>
<property name="dname" column="dname"/>
<property name="dpwd" column="dpwd"/>
</class>
</hibernate-mapping>

hibernate.hbm.xml是dept类到数据库表dept的映射,其中各元素的含义如下:

class:定义一个持久化类的映射信息

  • name:表示持久化类的全限定名
  • table:表示持久化对应的数据库表名
  • schema:表示oracle数据库实例中的用户

id:表示持久化类的OID和表的主键的映射

  • name:表示持久化类属性的名称
  • type:表示持久化属性的类型
  • column:表示持久化属性对应的数据库表字段名称。

grnerator:id元素的子元素,用于指定主键生成策略

  • class:用来指定具体主键生成策略
  • param:用来传递参数。上述中使用的主键生成策略是:assigned,不需要配置param元素

注意,因为持久化类与映射文件两者之间相互映射所以在主配置文件中还需要声明:

<?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>
<!--省略其他配置 -->
<!--映射文件配置,注意配置文件名必须包含其相对classpath的全路径,且是用/分开-->
<mapping resource="src/com/entity/hibernate.hbm.xml"/> </session-factory> </hibernate-configuration>

以上是hibernate的介绍和环境配置。

Hibernate 介绍及其 环境搭建的更多相关文章

  1. Hibernate 系列 02 - Hibernate介绍及其环境搭建

    引导目录: Hibernate 系列教程 目录 昨晚喝多了,下午刚清醒,继续搞Hibernate.走起. 觉得还行的话,记得点赞哈,给我这个渣渣点学习的动力.有错误的话也请指出,省的我在错误上走了不归 ...

  2. hibernate介绍及环境搭建

    1.前言 hibernate与mybatis的位置一样,都是属于DAO层的框架,代替我们原来的JDBC操作数据库,属于ORM(object relationg mapping. 对象关系映射)框架.O ...

  3. 最新版ssh hibernate spring struts2环境搭建

    最新版ssh hibernate spring struts2环境搭建 最新版spring Framework下载地址:spring4.0.0RELEASE环境搭建 http://repo.sprin ...

  4. Python介绍及环境搭建

    摘自http://www.cnblogs.com/sanzangTst/p/7278337.html Python零基础学习系列之二--Python介绍及环境搭建   1-1.Python简介: Py ...

  5. Django 01 django基本介绍及环境搭建

    Django 01 django基本介绍及环境搭建 #http服务器 #用来接收用户请求,并将请求转发给web应用框架进行处理 #Web应用框架 #处理完请求后在发送给http服务器,http服务器在 ...

  6. [springboot 开发单体web shop] 1. 前言介绍和环境搭建

    前言介绍和环境搭建 简述 springboot 本身是为了做服务化用的,我们为什么要反其道使用它来开发一份单体web应用呢? 在我们现实的开发工作中,还有大量的业务系统使用的是单体应用,特别是对于中小 ...

  7. App自动化测试-1.App自动化介绍和环境搭建

    App自动化测试-1.App自动化介绍和环境搭建 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-b ...

  8. Maven介绍及环境搭建

    Maven介绍及环境搭建 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建.报告和文档的软件项目管理工具. 下载Maven boot:类加载器框架,Maven使用它加在自 ...

  9. Maven快速入门(一)Maven介绍及环境搭建

    做开发的程序员都知道,在系统开发需要各自各样的框架.工具.其中有一种工具不管你是初级程序员还是高级程序员都必须熟练掌握的,那就是项目管理工具(maven.ant.gradle).接下来就总结Maven ...

随机推荐

  1. AFDX总线协议规范

    AFDX总线协议规范 1.概述 2. AFDX简介 3.AFDX的在数据传输性能的改进 3.1 AFDX以太网帧格式 3.2 AFDX以太网冗余备份 3.3 虚拟连接 3.4 数据交换处理 4.航空计 ...

  2. NetBeans导入项目jar路径错误解决办法

    NetBeans导入项目jar路径错误解决办法 1.NetBeans中导入项目jar路径出错,单击项目右键,选择"属性",找到"库" 2.找到错误jar,全部勾 ...

  3. 下载jQuery EasyUI出现网络问题

    下载jQuery EasyUI出现网络问题 1.具体错误如下 错误 137 (net::ERR_NAME_RESOLUTION_FAILED):未知错误 2.错误原因 由于DNS配置出现问题,导致该网 ...

  4. freemarker自定义标签(三)-nested指令

    freemarker自定义标签 1.nested指令 是可选的,可以在<#macro>和</#macro>之间使用在任何位置和任意次数 2.示例说明 <#macro ta ...

  5. java.sql.SQLException:Column Index out of range,0<1

    1.错误描述 java.sql.SQLException:Column Index out of range,0<1 2.错误原因 try { Class.forName("com.m ...

  6. dojo中表格行隐藏出错

    1.错误描述 TypeError:role._by_idx[e.rowIndex].hide is not a function           (54 out of range 3) 2.错误原 ...

  7. hibernate学习(四)hibernate的一级缓存&快照

    缓存:提高效率 硬件的 CPU缓存   硬盘缓存   内存 软件的  io流缓存 hibernate  的一级缓存   也是为了操作数据库的效率. 证明一级缓存在  : Person p=sessio ...

  8. Query 插件为什么要return this.each()

    jQuery.fn.test2= function(){ this.css("background","#ff0");//这里面的this为jquery对象,而 ...

  9. HALCON学习-资料

    HALCON学习网: http://www.ihalcon.com/ 学习资料推荐博客: http://k594081130.blog.163.com/blog/static/218359013201 ...

  10. 《C#图解教程》 总览

    初识本书是在知乎,许多网友推荐它作为 C# 入门书籍. 本书的最大特点是插图丰富,许多复杂的概念,一副插图就解释得通透明了. 本书另外一个隐藏特性是作者有着 C/C++ 经验,书中经常提到它们与 C# ...