1 简述

  通过使用Hibernate框架,开发者可以使用面向对象的方式来进行数据库访问,从而取代

以前使用JDBC进行数据库访问的方式。通过使用Hibernate框架,web应用可以通过面向

对象的方式来进行数据库的各种访问操作,如插入,更新,删除,查询数据等。

1.1 创建Hibernate配置文件

  hibernate从其配置文件中读取和数据库有关的信息。hibernate的配置文件分为两种形式,

一种是XML格式的配置文件,还有一种是资源文件格式的配置文件。分为XML文件或properties文件。

默认文件名为hibernate.cfg.xml与hibernate.properties,参数既可以配置在cfg.xml文件中,

也可以排至在properties文件中。通常配置文件位于classpath目录下。

  下面来看XML格式的配置文件,其文件名为hibernate.cfg.xml。在该配置文件中配置数据库连接

URL,以及数据库连接驱动,数据库用户名及用户密码。还配置一个属性dialect,该属性用来指定

数据库产品类型。

hibernate.cfg.xml:

 <!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<!-- 数据库连接URL -->
<property name="connection.url">
jdbc:mysql://localhost/javaweb
</property> <!-- 数据库连接驱动 -->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property> <!-- 数据库用户名 -->
<property name="connection.username">root</property> <!-- 数据库用户密码 -->
<property name="connection.password">123456</property> <!-- 数据库方言 -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property> <!-- 指定映射文件 -->
<mapping resource="com/javaweb/hibernate/Product.hbm.xml"/> </session-factory>
</hibernate-configuration>

1.2 创建持久化类

  持久化类是一个POJO类,不用集成和实现任何类或借口。该类中包含与数据库表中

相对应的属性,并包含各个属性所对应的setter和getter方法。以下示例代码中的持久化类

包含了三个属性:id,name及price,分别表示产品ID,产品名称及产品价格。

Product.java

 package com.javaweb.hibernate;
public class Product {
//产品ID
private String id;
//产品名称
private String name;
//产品价格
private double price;
//获得产品ID
public String getId() {
return id;
}
//设置产品ID
public void setId(String id) {
this.id = id;
}
//获得产品名称
public String getName() {
return name;
}
//设置产品名称
public void setName(String name) {
this.name = name;
}
//获得产品价格
public double getPrice() {
return price;
}
//设置产品价格
public void setPrice(double price) {
this.price = price;
}
}

1.3 创建对象关系映射文件

  关系映射文件用来映射持久化类和数据库表,从而将持久化类中的属性和数据库表中的

字段关联起来。其中id元素用来定义主键标识,property元素用来定义其他属性。如果不指定

数据库表中字段,子默认使用持久化类中的属性作为其数据库表字段名称。映射文件的文件名

一般采用持久化类名加上“.hbm.xml”,并保存在持久化类的同目录下。

  以下实例是一个对应关系的映射文件示例,用来映射前面添加的持久化类Product.java

Product.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>
<!-- 每个class对应一个持久化对象,此处对应的是同目录下的Product -->
<class name="com.javaweb.hibernate.Product">
<!-- id元素用来定义主键标识,并指定主键生成策略 -->
<id name="id">
<generator class="assigned"></generator>
</id> <!-- 定义其他属性 -->
<property name="name"></property>
<property name="price"></property>
</class>
</hibernate-mapping>

另外,此处要想是的映射文件起作用,还必须在Hibernate的配置文件hibernate.cfg.xml中

配置该映射文件,具体代码如下图所示:

数据映射文件编写时还需要注意以下几点:

  * 按照XML文件的编写规范,一一对应。

  * 数据映射必须要放置到<hibernate-mapping></hibernate-mapping>之间。

  * 指定所使用到的实体类的存放位置及映射的表名和数据库名,以上内容要在<class></class>属性中指定。

1.4 创建数据库表

  以前开发Web应用,都是先创建数据库表,然后才能通过JDBC来进行操作。现在将

思想转变一下,可以不用创建数据库,而是通过Hibernate来自动创建数据库表,并根据

持久化类的属性名来作为数据库表的字段名。以下示例代码为通过Hibernate创建数据库的实例。

CreateDB.java

 package com.javaweb.hibernate;

 import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport; public class CreateDB { public static void main(String[] args){
//读取配置文件hibernate.cfg.xml
Configuration cfg = new Configuration().configure(); SessionFactory sessionFactory = cfg.buildSessionFactory(); //创建SchemaExport实例
SchemaExport sExport = new SchemaExport(cfg);
//创建数据库表
sExport.create(true, true);
}
}

  以上代码第11行通过Configuration类来读取配置文件hibernate.cfg.xml。

代码第16行创建了SchemaExport实例化对象,代码第18行通过调用SchemaExport的

实例化对象的create()方法来创建数据库。

 drop table if exists Product
create table Product (
id varchar(255) not null,
name varchar(255),
price double precision,
primary key (id)
)

在MySql服务器控制台中输入“desc product;”命令,可以看到该表的字段名称及其他信息,

如下图所示:

1.5 插入数据

下面看如何使用Hibernate插入一条数据。首先看以下要完成数据库操作需要那些步骤。

  • 获得Configuration实例
  • 通过Configuration实例调用其buildSessionFactory()方法来获得SessionFactory实例。
  • 通过SessionFactory实例调用openSession()方法来获得Session实例。
  • 通过Session实例beginTransaction()方法开启事务。
  • 通过Session实例调用其方法完成想面向对象方式的数据库操作。
  • 通过Session实例的getTransaction()获得当前事务并关闭。
  • 关闭Session。

以下代码是一个通过Hibernate插入数据的示例。

InsertProduct.java

 package com.javaweb.hibernate;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class InsertProduct { public static void main(String[] args) {
//读取配置文件hibernate.cfg.xml,获得Configuration实例
Configuration cfg = new Configuration().configure(); //创建SessionFactory
SessionFactory factory = cfg.buildSessionFactory(); //创建Session
Session session = factory.openSession(); //开启事务
session.beginTransaction(); //实例化一个Product
Product product = new Product();
product.setId("0511236");
product.setName("冰箱");
product.setPrice(1250.00); //保存数据
session.save(product); //事务提交
session.getTransaction().commit(); //关闭session
if(session.isOpen()) {
session.close();
}
}
}

  运行该java应用程序。在MySQL控制台中输入" select * from product;"命令

可以看到数据成功插入到product表中了。

1.6 删除数据

  删除数据操作和插入数据操作也非常类似,调用Session对象的delete()方法即可完成

数据的删除。

deleteProduct.java

 package com.javaweb.hibernate;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class deleteProduct { public static void main(String[] args) { /**
//读取配置文件hibernate.cfg.xml
Configuration cfg = new Configuration().configure(); //创建SessionFactory
SessionFactory factory = cfg.buildSessionFactory(); //创建Session
Session session = factory.openSession(); //开启事务
session.beginTransaction(); //实例化一个Product
Product product = new Product();
product.setId("0511236");
product.setName("冰箱");
product.setPrice(1888.88); //删除数据
session.delete(product); //事务提交
session.getTransaction().commit(); //关闭session
if(session.isOpen()) {
session.close();
}
*/ //以下操作使用hibernate工具类来进行删除操作! //创建Session
Session session = HibernateUtil.getSession(); //开启事务
session.beginTransaction(); //实例化一个Product
Product product = new Product();
product.setId("0511236");
product.setName("冰箱");
product.setPrice(1888.88); //删除数据
session.delete(product); //事务提交
session.getTransaction().commit(); //关闭session
HibernateUtil.closeSession(session);
}
}

  代码第51行实例化了一个Product对象,并设置其属性。代码57行通过调用session对象的

delete方法删除Product实例化对象。重新运行java应用程序。在MySQL控制台输入"select * from product;"

命令,数据可被被删除。

  同样,可以使用HQL查询语句来实现按ID删除。

deleteProductByid.java

 package com.javaweb.hibernate;

 import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class deleteProductByid { public static void main(String[] args) {
//读取配置文件hibernate.cfg.xml
Configuration cfg = new Configuration().configure(); //创建SessionFactory
SessionFactory factory = cfg.buildSessionFactory(); //创建Session
Session session = factory.openSession(); //开启事务
session.beginTransaction(); // 使用HQL查询
24 String hql = "DELETE Product WHERE id=?";
25 Query q = session.createQuery(hql);
26 q.setString(0, "0511234");
27 q.executeUpdate(); //事务提交
session.getTransaction().commit(); //关闭session
if(session.isOpen()) {
session.close();
}
}
}

  代码24行声明了一个HQL语句,用来删除指定ID的产品。代码第25行共通过Session对象的

createQuery方法来执行该HQL语句。代码第26行通过参数设置id的值为"0511234",代码第27行

通过调用Quert对象的executeUpdate方法来指定删除操作。

    《未完待续》

持久化框架Hibernate 开发实例(二)的更多相关文章

  1. 持久化框架Hibernate 开发实例(一)

    1 Hibernate简介 Hibernate框架是一个非常流行的持久化框架,其中在web开发中占据了非常重要的地位, Hibernate作为Web应用的底层,实现了对数据库操作的封装.HIberna ...

  2. RDIFramework.NET -.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(WebForm版)

    RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(WebForm版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之 ...

  3. RDIFramework.NET-.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(MVC版)

    RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(MVC版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之产品管理 ...

  4. NDK 开发实例二(添加 Eigen库)

    上一篇,我已经阐述了如何创建一个简单的NDK实例: NDK 开发实例一(Android.mk环境配置下) 在上一篇的基础上,我们来添加Eigen库,然后做一个简单实例. Eigen是一个高层次的C + ...

  5. [Spring框架]Spring开发实例: XML+注解.

    前言: 本文为自己学习Spring记录所用, 文章内容包括Spring的概述已经简单开发, 主要涉及IOC相关知识, 希望能够对新入门Spring的同学有帮助, 也希望大家一起讨论相关的知识. 一. ...

  6. Hibernate开发之二 映射主键-

    <class name="cn.itcast.e_hbm_id.User" table="user">            <!-- 映射主 ...

  7. 基于Golang的游戏服务器框架cellnet开发日记(二)

    看官们肯定还有大部分不是很熟悉Actor模型. 我这里基于Erlang, Skynet等语言和框架库来实战型解释下Actor模型.  Actor概念 Actor模型和OO类似, 都是符合人的思维模式进 ...

  8. Spring Boot 使用IntelliJ IDEA创建一个web开发实例(二)

    1. 创建一个Controller类 package com.example.demo; import org.springframework.web.bind.annotation.RequestM ...

  9. ecmall挂件开发实例二(转)

    下述例子讲述了快速增加挂件的方法,但对系统中的代码未做更改,基本参照image_ad挂件的方法. 第 一步: 了解首页模板结构 首页文 件结构 include hearder.html 包含的头文件, ...

随机推荐

  1. Basic Vlan Configure

    Basic Vlan CLI Configure Switch>en Switch#conf t Enter configuration commands, one per line.  End ...

  2. Basic Vlan Concepts

    1.  Vlan Benefit ·To reduce CPU overhead on each device by reducing the number of devices that recei ...

  3. [转]null和""以及==与equals的区别

    String str1 = null; str引用为空 String str2 = ""; str引用为空串 直接点就是null没有分配内存空间,而""分配了内 ...

  4. C# 命名参数【转】

    命名参数(Named Arguments)就是说在调用函数时可以通过指定参数名称的方式来调用参数.它最大的好处就是方便调用参数时按调用者的需要来排列顺序,而不必死守函数声明时的顺序(相对于“位置参数” ...

  5. CrossDomain.xml的作用及其简单用法

    使用crossdomain.xml让Flash可以跨域传输数据 本文来自http://www.mzwu.com/article.asp?id=975 一.概述 位于www.mzwu.com域中的SWF ...

  6. ERROR 1005 (HY000): Can't create table'matrix.system_log' (errno: 150)

    CREATE TABLE `user` (`id` bigint(32) NOT NULL AUTO_INCREMENT ,`name` varchar(32) CHARACTER SET utf8 ...

  7. SVN四部曲之SVN简单使用教程入门

    1.        签出源代码到本机 在本机创建文件夹StartKit,右键点击Checkout,弹出如下图的窗体: 2.        2 在上图中URL of Repository:下的文本框中输 ...

  8. 【HTML5】websocket 初识

    什么是WebSocket API? WebSocket API是下一代客户端-服务器的异步通信方法.该通信取代了单个的TCP套接字,使用ws或wss协议,可用于任意的客户端和服务器程序.WebSock ...

  9. Entity Framework Power Tools安装和使用

    Entity Framework Power Tools是一个由EntityFramework开发小组提供的工具,它可以从现有数据库生成Fluent款式的Code First代码. 大致来说,这个工具 ...

  10. ubuntu 14.04 安装 Quartus II 13.1 过程

    神奇的linux! 第一步去官网注册然后下载对应的linux版本,包括软件和设备文件两部分,软件也就是quartus II nios ide,modelsim-altera这些,设备就是具体alter ...