介绍
数据持久化概念
数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如:文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、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包
推荐下载: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的介绍和环境配置。