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. 1. opencv的初体验

    http://guoming.me/opencv-config  这篇文章有讲解opencv的安装与配置 一些常用库 opencv_core249d.lib opencv_imgproc249d.li ...

  2. js执行上下文(由浅入深)

    每一个函数都有自己的执行上下文EC(执行环境 execution context),并且每个执行上下文中都有它自己的变量对象VO(Variable object),用于存储执行上下文中的变量 .函数声 ...

  3. 2014年互联网IT待遇(包括国内民企、外企、金融机构)

    一.民企 1. 百度 13k*14.6,special 14~17k*14.6 开发类 13K*14.6 (2014) 测试类.前端类 12K*14.6 (2014) 2. 腾讯 11.5k*16,s ...

  4. Oracle定义常量和变量

    1.定义变量 变量指的就是可变化的量,程序运行过程中可以随时改变其数据存储结构 标准语法格式:<变量名><数据类型>[(长度):=<初始值>] 示例: declar ...

  5. 外企iOS开发的笔试题

    一组外企iOS开发的笔试题,您能回答出来吗?从群里收集来的. (miki西游@mikixiyou的文档,原文链接: http://mikixiyou.iteye.com/blog/1546376  转 ...

  6. Memcache+Tomcat9集群实现session共享(非jar式配置, 手动编写Memcache客户端)

    Windows上两个tomcat, 虚拟机中ip为192.168.0.30的centos上一个(测试用三台就够了, 为了测试看见端口所以没有使用nginx转发请求) 开始 1.windows上开启两个 ...

  7. Error: Cannot find module 'express'

    安装Express命令如下: npm install -g express 安装成功之后会在C:\Users\[YOUR_USER_NAME]\AppData\Roaming\npm\node_mod ...

  8. [转载+原创]Emgu CV on C# (三) —— Emgu CV on 均衡化

    本文简要描述了均衡化原理及数学实现等理论问题,最终利用emgucv实现图像的灰度均衡. 直方图的均衡化,这是图像增强的常用方法. 一.均衡化原理及数学实现(转载) 均衡化原理及数学实现可重点参看——& ...

  9. 关于拓扑排序(topologicalsort)

    假设我们有一组任务要完成,并且有些任务要在其它任务完成之后才能开始,所以我们必须非常小心这些任务的执行顺序.如果这些任务的执行顺序足够简单的话,我们可以用链表来存储它们,这是一个很好的方案,让我们可以 ...

  10. 不用安装语言包,教你将PS界面语言修改成默认语言(英语)

    地址:http://www.cnblogs.com/Loonger/p/5112020.html 嗯,干脆利落,直接上教程.超简单的方法.(该方法可以随时在你已有语言[非英语]和PS默认语言[英语]之 ...