`
sarin
  • 浏览: 1756883 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
E3b14d1f-4cc5-37dd-b820-b6af951740bc
Spring数据库访问系列...
浏览量:173657
C2083dc5-6474-39e2-993e-263652d27795
Android学习笔记
浏览量:368118
5f40a095-b33c-3e8e-8891-606fcf3b8d27
iBatis开发详解
浏览量:189258
B272a31d-e7bd-3eff-8cc4-c0624ee75fee
Objective-C学习...
浏览量:99838
社区版块
存档分类
最新评论

Hibernate开发环境建立和第一个程序

阅读更多
    Hibernate是一个优秀的开源ORM框架,就是符合Java语言习惯的关系型数据库持久化方案。目前主流数据库还都是关系数据库,也就是二维表结构,而Java语言是面向对象的语言,程序中操纵的是对象,那么刻画对象的一组数据怎样存入数据库?这就是Hibernate要完成的工作-对象数据的持久化。当然,持久化可以是写入文件系统也可以是写入数据库,而大规模数据存取时,程序直接IO的效率和易用性,可维护性显然都不如数据库好,所以使用数据库还是趋势。
    Hibernate的官方网站是http://www.hibernate.org,要使用Hibernate当然要下载开发包,作为学习,只下载核心包core即可。当前版本是3.3.2-GA。
    开发包下documentation中有帮助手册,也有中文的,这个中文只是简单翻译的,但是可以省去我们查找目录的时间了,Hibernate的帮助手册写的还是不错的。
    既然要使用Java语言进行数据库操作,JDBC是必不可少的,Hibernate也是建立在JDBC API之上的,其本质还是JDBC,所以碰到Hibernate无法完成的工作,还应直接使用JDBC,任何东西都不是万能的。知道了本质,那么和数据库交互还需要对应的数据库驱动程序。
    准备好这些东西后,我们就可以着手搭建Hibernate的开发环境了。解压缩Hibernate的开发包,在其根目录下的hibernate3.jar是必须的。打开lib目录,required中是hibernate所依赖的类库,需要全部使用。在bytecode中的cglib也是需要的,不要忘了,关于这些类库的作用这里还是不解释了。准备好后,就可以在Eclipse中搭建开发环境了。

    建立普通的java工程就可以了,单机学习测试就够了。类库如图,版本可不同,这是最少的需求了。Hibernate配置文件hibernate.cfg.xml建议放置到类路径的根目录下,包的结构可以根据自己喜好,这里domain表示领域模型/对象,User.java是持久化类,User.hbm.xml是对象和数据库的映射文件,文件命名最好遵循规范,不要在这创新,这是无意义的。Test.java是测试类,有main方法,HibernateUtil是抽象出的一个简易工具集。
    有了项目工程,下面先从数据库开始一步一步建立我们的第一个应用程序。
    使用Oracle 11g数据库,首先创建一个新的用户hibernate,再创建一个表USERS和序列SEQ_HIBERNATE_USERS作为测试使用,在SQL*PLUS的操作如下:

    创建表和序列的SQL语句如下:
create table USERS(
	ID NUMBER(10) NOT NULL PRIMARY KEY,
	NAME VARCHAR2(20) NOT NULL,
	PHONE VARCHAR2(20),
	DEPARTMENT VARCHAR2(20),
	CITY VARCHAR2(20) NOT NULL,
	HIRE_TIME DATE NOT NULL
);

create sequence SEQ_HIBERNATE_USERS increment by 1 start with 1 nocycle;

    字段名都是见名知意的,这里不做解释了,下面从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>
		<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
		<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
		<property name="hibernate.connection.username">hibernate</property>
		<property name="hibernate.connection.password">hibernate</property>
		<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
		<property name="current_session_context_class">thread</property>
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
		<mapping resource="domain/domain/User.hbm.xml" />
	</session-factory>
</hibernate-configuration>

    XML的根标记是<hibernate-configuration>,其中需要配置session工厂,session工厂是工厂模式的实现,负责生产和数据库交互的session对象,注意这里的session不是web中的HttpSession,可不能搞混了,但都表示一次会话的过程。
    Property中配置的都是数据库连接的驱动名称,URL,用户名,密码,Hibernate使用的数据库方言,这些是必须的属性。其中方言指的是针对不同的数据库产品Hibernate在处理某些操作(如分页)时可以自动生成SQL中相应的关键字。还有可选的属性是current_session_context_class,这是hibernate管理session对象上下文的方式,有thread,jta,manager三种方式。show_sql是否在控制台显示还原的SQL语句,是boolean值,建议在开发阶段使用。format_sql是否格式化显示还原的SQL语句,是boolean值,使用后在控制台将会看到方便阅读的SQL语句,否则就是一行显示了。
    hbm2ddl.auto,这个属性是配置是否使用hibernate在数据库中自动创建表,取值情况如下:create/create-drop在程序开始都自动删除已有表,区别是drop在虚拟机退出后又删除表,而create在退出时不删除;update是根据映射文件更新表,可自动增加和删除;validate是校验,表和映射不一致报异常。习惯手动创建表的就不用使用这个属性了,我也是,手工创建表比较舒服踏实。再更多的属性就参考hibernate的文档就可以了。
    还有一个标记是<mapping>,这个就是配置hibernate的实体关系映射文件的了,这个标记可以配置多个,挨着写就行了,注意包名要写全了。
    下面是创建持久化对象,这个对象的属性包含了数据库中的字段名,他们之间是一一对应的,从而建立映射。
package demo.domain;
public class User implements java.io.Serializable {
	private Integer id;
	private String name;
	private String phone;
	private String department;
	private String city;
	private java.util.Date hireTime;
	public User() {
	}
// 以下省略所有的get和set方法
}

    User.hbm.xml映射文件如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="demo.domain.User" table="USERS">
		<id name="id" column="ID" type="java.lang.Integer" length="10">
			<generator class="sequence">
				<param name="sequence">SEQ_HIBERNATE_USERS</param>
			</generator>
		</id>
		<property name="name" column="NAME" type="java.lang.String"
			length="20" not-null="true" />
		<property name="phone" column="PHONE" type="java.lang.String"
			length="20" />
		<property name="department" column="DEPARTMENT" type="java.lang.String"
			length="20" />
		<property name="city" column="CITY" type="java.lang.String"
			length="20" not-null="true" />
		<property name="hireTime" column="HIRE_TIME" type="java.util.Date"
			not-null="true" />
	</class>
</hibernate-mapping>

    配置文件很灵活,格式可以不按照这样进行,但是基本配置必须要有。
    根标记是<hibernate-mapping>,在其中的<class>标签中是配置持久化类的。name属性包含了类的全名,table是数据库中表的名称,不写table时表名默认就是类名。
<id>标记配置主键,name是持久化类的属性名,column是数据表的字段名,column不写时    默认和name同值。type是属性的类型,这里的基本数据类型都用其包装类表示。Length属性是数据表该字段的长度,在这里标明后也就不用每次去看数据库字典了。<generator>是主键的生成策略,类型有sequence,increment,native等,可以参考hibernate手册。这里使用的是Oracle的序列方式生成主键。
    <property>标签配置的是对象的属性,name是持久化类中的属性名,column是数据表字段名,使用规则同上,type是属性的类型,lenth是长度,not-null是个boolean值,就是是否非空。
    映射文件写好后,Hibernate的配置就完成了,下面就是写程序来测试了。
import java.util.Date;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import demo.domain.User;
public class Test {
	public static void main(String[] args) {
		Configuration config = new Configuration();
		config.configure();// 配置文件名不是hibernate.cfg.xml时将文件名传入
		SessionFactory sessionFactory = config.buildSessionFactory();// 相当于JDBC的注册驱动
		Session session = sessionFactory.openSession();// 相当于JDBC的getConnection
		Transaction tx = session.beginTransaction();// Hibernate操作必须启动事务
		User user = new User();// 创建持久化对象
		user.setName("Sarin");
		user.setPhone("15912345678");
		user.setDepartment("研发部");
		user.setCity("大连");
		user.setHireTime(new Date());
		session.save(user);// 保存对象
		tx.commit();// 持久化到数据库中
	}
}

    执行这个程序,我们在控制台得到如下内容:

    Hibernate执行了两个SQL语句,第一个是取出序列的下一个值,然后想数据库中插入对象。不同的主键生成策略得到的SQL语句是不同的,大家可以自行尝试。
    在数据库中,我们得到一条记录,如下:

    欢迎大家交流,希望对学习者有用。
  • 大小: 20.7 KB
  • 大小: 47 KB
  • 大小: 15.4 KB
  • 大小: 11.4 KB
2
0
分享到:
评论

相关推荐

    hibernate所有开发包

    1. 第一级缓存:每个Session有自己的缓存,即Session级别的缓存,自动管理。 2. 第二级缓存:SessionFactory级别的缓存,可配置第三方缓存插件如EhCache或Infinispan。 3. 查询缓存:对HQL和Criteria查询结果进行...

    搭建Hibernate项目环境步骤

    搭建一个Hibernate项目环境是开发基于Java的ORM(对象关系映射)应用的第一步。下面将详细阐述这个过程中的四个关键步骤: 1. **加载Hibernate类库和依赖库** 在开始构建Hibernate项目时,首先需要引入必要的库。这...

    hibernate人生中第一个使用myEclipse成功及完美程序(适合入门者)

    【标题】:“Hibernate人生中第一个使用MyEclipse成功及完美程序”揭示了初学者如何在MyEclipse集成开发环境中配置并使用Hibernate框架进行数据库操作。这个教程是针对那些希望通过实践来掌握Hibernate技术的新手。 ...

    hibernate中文开发手册

    2. **环境配置**:设置Hibernate开发环境涉及JDK、数据库驱动、Hibernate库的安装与配置,手册会指导读者如何配置`hibernate.cfg.xml`配置文件,包括数据库连接信息、方言设置、缓存策略等。 3. **对象关系映射...

    hibernate3.5 开发手册

    ##### 1.1 第一部分:第一个 Hibernate 应用程序 - **设置**:这部分介绍了如何搭建开发环境,并确保所有必要的库和配置文件都已经正确安装。 - **第一个类**:通过创建一个简单的 Java 类来演示 Hibernate 如何与...

    第1章准备源代码阅读环境与Hibernate的基本配置

    Eclipse是一个流行的Java集成开发环境(IDE),由IBM开发,并于2001年开源。Eclipse的主界面被称为工作台,包含菜单栏、工具栏、编辑器和视图等部分。工作台页面用于放置编辑器和其他视图,是用户与Eclipse交互的...

    hibernate第一章

    总之,"hibernate第一章"将引导你进入ORM的世界,掌握如何在控制台应用程序中使用Hibernate进行数据库操作。通过深入学习,你将能够有效地利用Hibernate提高开发效率,减少数据库操作的复杂性。

    WebWork+Spring+Hibernate整合开发网络书城 第一讲

    在本课程中,我们将深入探讨如何使用WebWork、Spring和Hibernate三大开源框架进行整合开发,构建一个完整的网络书城系统。这些技术都是Java Web开发领域中的核心组件,它们各自负责不同的职责,共同构建出高效、灵活...

    hibernate第三方软件jar包

    Hibernate 是一个广泛使用的Java对象关系映射(ORM)框架,它允许开发者将数据库操作与Java对象进行解耦,简化了数据库驱动的应用程序开发。在这个"hibernate第三方软件jar包"中,包含了对缓存、连接池等关键功能的...

    Hibernate 开发指南

    3. **配置开发环境**:在 Eclipse 或 IntelliJ IDEA 等集成开发环境中设置好项目的类路径,确保包括 Hibernate 和其他依赖库(如 JDBC 驱动程序)。 4. **数据库准备**:设置好数据库环境,创建必要的表结构。可以...

    Hibernate开发指南

    2. **环境配置**:安装和配置Hibernate库是开始开发的第一步。这包括添加必要的依赖项到项目中,设置Hibernate配置文件(hibernate.cfg.xml),以及初始化SessionFactory。 3. **对象关系映射(ORM)**:详细讲解...

    Hibernate学习笔记特别详细

    002---第一个Hibernate示例 创建一个简单的Hibernate应用通常涉及以下步骤:配置Hibernate环境(包括hibernate.cfg.xml文件),创建实体类,编写映射文件,以及编写Session工厂和Session的代码。一个基本的增删查改...

    hibernate_reference使用指南全

    **1.2 第一个 Hibernate 应用** - **1.2.1 第一个类** 创建一个简单的 Java 类 `Person`,用于演示 Hibernate 的基本用法。这个类将包含一些基本属性(如姓名、年龄等)以及相应的 getter 和 setter 方法。此步骤...

    Hibernate+struts实例学习

    - 在整个实例学习中,熟悉MyEclipse等集成开发环境的操作对提高开发效率至关重要。 - 理解Hibernate的日志配置属性,如`show_sql`,在开发调试阶段和生产环境中的应用差异。 以上知识点涵盖了Hibernate与Struts实例...

    Hibernate5.2.11高清版,最新版本

    这是建立对象和数据库间映射的第一步,对于整个应用的数据模型至关重要。 引导(Bootstrap)部分指导开发者如何初始化Hibernate,包括配置SessionFactory和建立与数据库的连接。 模式生成(Schema generation)...

    建立你的第一个Struts2应用程序

    ### 建立第一个Struts2应用程序:深入解析与实践 #### Struts2入门与环境搭建 在构建第一个Struts2应用程序的过程中,我们不仅需要掌握基本的开发流程,还应了解其与Java、Hibernate和Spring等框架的整合方法。...

    Hibernate PDf

    1. **环境搭建**:首先需要配置好JDBC驱动,建立数据库连接,并导入Hibernate相关的jar包。 2. **配置文件**:配置Hibernate的`hibernate.cfg.xml`文件,指定数据库连接信息及其它设置。 3. **实体类设计**:设计...

    Hibernate泛型Dao

    【标题】"Hibernate泛型Dao"是针对Java开发中的数据持久化框架Hibernate的一个高级应用,主要目的是为了提高代码的复用性和简洁性。在传统的Hibernate使用中,针对每个实体类,我们都需要创建一个对应的Dao(Data ...

    hibernate3.2 jar包

    这个核心jar包包含了实现Hibernate功能所需的所有基本类和接口,是开发基于Hibernate的应用程序不可或缺的部分。 首先,我们需要了解Hibernate的基本概念。ORM是一种技术,它允许我们在面向对象的编程环境中直接...

    学习hibernate第一章内容

    2. 第一个Hibernate程序:编写实体类,定义映射文件,实现简单的CRUD操作。 3. 主键生成策略:了解Hibernate的几种主键生成策略,如identity、sequence、increment等。 4. 查询操作:使用HQL进行简单和复杂的查询,...

Global site tag (gtag.js) - Google Analytics