介绍

数据持久化概念

数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如:文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、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. Java StringBuilder 和 StringBuffer 源码分析

    简介 StringBuilder与StringBuffer是两个常用的操作字符串的类.大家都知道,StringBuilder是线程不安全的,而StringBuffer是线程安全的.前者是JDK1.5加 ...

  2. R语言︱决策树族——随机森林算法

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:有一篇<有监督学习选择深度学习 ...

  3. PHP学习笔记-POST

    $_POST 描述通过http POST方式提交的数据都会封装到$_POST数组中 有些数据的提交必须使用post 比如上传文件 Post get提交 的区别 安全性 数据传输大小 浏览器限制文本大小 ...

  4. e.preventDefault()和e.stopPropagation()以及return false的作用和区别

    前段时间开发中,遇到一个父元素和子元素都有事件时,发现会出现事件冒泡现象,虽然知道ev.stopPropagation()和ev.preventDefault()其中一个是阻止事件冒泡和阻止默认行为, ...

  5. oracle的下载地址以及步骤

    一.下载地址 1.oracle官网:https://www.oracle.com/cn/index.html 2. 点击右上角先选择语音,然后注册一个新账户,如果有oracle直接登录就可以 3.点击 ...

  6. babel-runtime和babel-polyfill两者区别优缺点

    先说两种方式的原理: babel-polyfill 使用场景 Babel 默认只转换新的 JavaScript 语法,而不转换新的 API.例如,Iterator.Generator.Set.Maps ...

  7. window.load 和$(document).ready() 区别

    1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕.2.编写个数不同 w ...

  8. 升级adb注意事项

    最近使用adb devices老提示设备offline,百度试了好多方法都不行,后面才发现是因为没有把adb文件的名称中含有adb的所有文件复制到 c:/windows/system目录,复制完后只记 ...

  9. 【BZOJ4566】找相同字符(后缀自动机)

    [BZOJ4566]找相同字符(后缀自动机) 题面 BZOJ 题解 看到多串处理,\(SA\)就连起来 \(SAM???\) 单串建自动机 然后其他串匹配 对于一个串建完\(SAM\)后 另一个串在\ ...

  10. 【BZOJ1997】Planar(2-sat)

    [BZOJ1997]Planar(2-sat) 题面 BZOJ 题解 很久没做过\(2-sat\)了 今天一见,很果断的就来切 这题不难呀 但是有个玄学问题: 平面图的性质:边数\(m\)的最大值为\ ...