持久化框架Hibernate 开发实例(二)

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:

 1 <!DOCTYPE hibernate-configuration PUBLIC
 2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 3     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 4
 5 <hibernate-configuration>
 6 <session-factory>
 7     <!-- 数据库连接URL -->
 8     <property name="connection.url">
 9         jdbc:mysql://localhost/javaweb
10     </property>
11
12     <!-- 数据库连接驱动 -->
13     <property name="connection.driver_class">
14         com.mysql.jdbc.Driver
15     </property>
16
17     <!-- 数据库用户名 -->
18     <property name="connection.username">root</property>
19
20     <!-- 数据库用户密码 -->
21     <property name="connection.password">123456</property>
22
23     <!-- 数据库方言 -->
24     <property name="dialect">
25         org.hibernate.dialect.MySQLDialect
26     </property>
27
28     <!-- 指定映射文件 -->
29     <mapping resource="com/javaweb/hibernate/Product.hbm.xml"/>
30
31 </session-factory>
32 </hibernate-configuration>

1.2 创建持久化类

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

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

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

Product.java

 1 package com.javaweb.hibernate;
 2 public class Product {
 3     //产品ID
 4     private String id;
 5     //产品名称
 6     private String name;
 7     //产品价格
 8     private double price;
 9     //获得产品ID
10     public String getId() {
11         return id;
12     }
13     //设置产品ID
14     public void setId(String id) {
15         this.id = id;
16     }
17     //获得产品名称
18     public String getName() {
19         return name;
20     }
21     //设置产品名称
22     public void setName(String name) {
23         this.name = name;
24     }
25     //获得产品价格
26     public double getPrice() {
27         return price;
28     }
29     //设置产品价格
30     public void setPrice(double price) {
31         this.price = price;
32     }
33 }

1.3 创建对象关系映射文件

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

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

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

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

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

Product.hbm.xml

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6     <!-- 每个class对应一个持久化对象,此处对应的是同目录下的Product -->
 7     <class name="com.javaweb.hibernate.Product">
 8         <!-- id元素用来定义主键标识,并指定主键生成策略 -->
 9         <id name="id">
10             <generator class="assigned"></generator>
11         </id>
12
13         <!-- 定义其他属性 -->
14         <property name="name"></property>
15         <property name="price"></property>
16     </class>
17 </hibernate-mapping>

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

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

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

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

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

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

1.4 创建数据库表

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

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

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

CreateDB.java

 1 package com.javaweb.hibernate;
 2
 3 import org.hibernate.SessionFactory;
 4 import org.hibernate.cfg.Configuration;
 5 import org.hibernate.tool.hbm2ddl.SchemaExport;
 6
 7 public class CreateDB {
 8
 9     public static void main(String[] args){
10         //读取配置文件hibernate.cfg.xml
11         Configuration cfg = new Configuration().configure();
12
13         SessionFactory sessionFactory = cfg.buildSessionFactory();
14
15         //创建SchemaExport实例
16         SchemaExport sExport = new SchemaExport(cfg);
17         //创建数据库表
18         sExport.create(true, true);
19     }
20 }

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

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

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

1 drop table if exists Product
2 create table Product (
3 id varchar(255) not null,
4 name varchar(255),
5 price double precision,
6 primary key (id)
7 )

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

如下图所示:

1.5 插入数据

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

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

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

InsertProduct.java

 1 package com.javaweb.hibernate;
 2
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.cfg.Configuration;
 6
 7 public class InsertProduct {
 8
 9     public static void main(String[] args) {
10         //读取配置文件hibernate.cfg.xml,获得Configuration实例
11         Configuration cfg = new Configuration().configure();
12
13         //创建SessionFactory
14         SessionFactory factory = cfg.buildSessionFactory();
15
16         //创建Session
17         Session session = factory.openSession();
18
19         //开启事务
20         session.beginTransaction();
21
22         //实例化一个Product
23         Product product = new Product();
24         product.setId("0511236");
25         product.setName("冰箱");
26         product.setPrice(1250.00);
27
28         //保存数据
29         session.save(product);
30
31         //事务提交
32         session.getTransaction().commit();
33
34         //关闭session
35         if(session.isOpen()) {
36             session.close();
37         }
38     }
39 }

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

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

时间: 2024-08-28 00:21:59

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

Hibernate开发实例

Hibernate开发实例 1. 创建HibernateDemo项目(也可以是其他名称) (1)在Eclipse中,单击Eclipse菜单中的[File]选择[New]选项,选择创建[DynamicWebProject](动态Web项目): (2)Project name我们填写为HibernateDemo(也可以是其他名称): (3)单击[Finish],我们的项目便创建完成了. 2. 在Eclipse中部署Hibernate开发包和MySQL驱动包 在这里我们做的是简单项目,所以需要的开发包

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

前言: 本文为自己学习Spring记录所用, 文章内容包括Spring的概述已经简单开发, 主要涉及IOC相关知识, 希望能够对新入门Spring的同学有帮助, 也希望大家一起讨论相关的知识. 一. Spring概述 1.1,什么是Spring:Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来.它是

ext 6.0开发实例二

由于Ext JS 6将原来的Ext JS和Sencha Touch合并为一个框架,因而在使用CMD来创建应用程序前,需要考虑清楚你是要创建一个通用应用程序,还是仅仅只是针对桌面或移动设备的应用程序. 要做这样的考量,是因为通用应用程序和比较单一的应用程序在开发上会有些小麻烦.这些小麻烦主要是因为Ext JS的自动加载机制造成的,有时候会很困扰人. Ext JS的自动加载机制是根据类名来划分目录兵加载脚本的,例如SimpelCMS.view.Main,如果没有自定义过SimpelCMS的路径指向,

ecmall挂件开发实例二(转)

下述例子讲述了快速增加挂件的方法,但对系统中的代码未做更改,基本参照image_ad挂件的方法. 第 一步: 了解首页模板结构 首页文 件结构 include hearder.html 包含的头文件,其中包含top logo区域 <div class=”keyword”>…</div> 搜索栏区域 <div class=”content”>…</div> 第一个是内容区 域,包含左,右区域,右区域又划分为中和右区块 <div class=”ad_ban

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

RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(MVC版) 第1部分 概述 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,为企业或个人在.NET环境下快速开发系统提供了强大的支持,开发人员不需要开发系统的基础功能和公共模块,框架自身提供了强大的函数库和开发包,开发人员只须集中精力专注于业务部分的开发,因此大大提高开发效率和节约开发成本.框架采用目前最主流的C#语言开发完成,支持多种数据库类型,支持WinForm与Web.使用RD

【持久化框架】Mybatis与Hibernate的详细对比

前言 Mybatis与Hibernate对比 简介 开发速度 数据库移植性 缓存机制对比 两者对比总结 一句话总结 前言 这篇博文我们重点分析一下Mybatis与Hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Mybatis简介与原理 [持久化框架]SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载 Hibernate [SSH进阶之路]Hibernate基本原理(一)

Hibernate实例二

Hibernate实例二 一.测试openSession方法和getCurrentSession方法 hebernate中可以通过上述两种方法获取session对象以对数据库进行操作,下面的代码以及注解是对两种方法的辨析 SessionTest.java 1 import java.sql.Connection; 2 import java.sql.SQLException; 3 import java.util.Date; 4 5 import org.hibernate.Session; 6

Hibernate对象持久化框架

JDBC:(Java Data Base Connectivity)java数据库连接 java.sql包提供JDBC API,可通过它编写訪问数据库的程序代码.当中经常使用的接口和类包含以下内容: DriverManager:驱动程序管理器,负责创建数据库连接 Connection:代表数据库连接 Statement:负责运行SQL语句 PreparedStatement:负责运行SQL语句,具有提前定义SQL语句的功能 ResultSet:代表SQL查询语句的查询结果集 Hibernate(

iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

这里接着前文<iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)>,主要是干货环节,列举了如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 三. 常用方法的封装 虽然 PhotoKit 的功能强大很多,但基于兼容 iOS 8.0 以下版本的考虑,暂时可能仍无法抛弃 ALAssetLibrary,这时候一个比较好的方案是基于 ALAssetLibrary 和 PhotoKit 封装出一系列模拟系统 Asset 类的自定义类,然后在其中封装好兼容 A