Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java学习:Hibernate入门

java学习:Hibernate入门

作者头像
菩提树下的杨过
发布于 2018-01-23 09:26:23
发布于 2018-01-23 09:26:23
85300
代码可运行
举报
运行总次数:0
代码可运行

相对微软的linq-to-sql或EF框架而言,"Hibernate对于eclipse的集成开发“ 新手并不容易掌握,下面是新手上路的步骤:

一、准备工作:

1、先下载eclipse (官网 http://eclipse.org/) 注:如本机已经安装了eclipse,可跳过

2、下载Hibernate 最新版本(目前已经到了4.X版本) (官网 http://hibernate.org/ )

3、根据你的db使用情况,下载对应的jdbc驱动包(本文使用的是oracle,本机安装完oracle client后就能找到)

4、下载commons-logging.jar包(Hibernate内部记录日志用的是它)  (官网 http://commons.apache.org/logging/

5、数据库里先创建一个测试表TMP_EMP (虽然Hibernate推荐 先设计DomainModel->再持久化到db,但是实际开发中,往往是先有表结构,再开始写代码的,所以还是以大多数人习惯的方式为准)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--先创建表

-- Create table
create table TMP_EMP
(
  ID       NUMBER(10) not null,
  NAME     VARCHAR2(50),
  BIRTHDAY DATE,
  SEX      CHAR(1),
  SALARY   NUMBER(8,2)
);
-- Add comments to the columns 
comment on column TMP_EMP.ID
  is '主键ID';
comment on column TMP_EMP.NAME
  is '姓名';
comment on column TMP_EMP.BIRTHDAY
  is '日期';
comment on column TMP_EMP.SEX
  is '性别(F女,M男)';
comment on column TMP_EMP.SALARY
  is ' 工资';
-- Create/Recreate primary, unique and foreign key constraints 
alter table TMP_EMP
  add constraint PK_TMP_EMP_ID primary key (ID);


-- 创建Sequence序列
create sequence SQ_TMP_EMP
minvalue 1
maxvalue 9999999999999999999999999
start with 201
increment by 1
cache 200;

6、安装Hibernate Tools 插件(理论上讲,这一步可以不用,但是没这个插件,就只能纯手动编写各种hibernate配置xml了)

启用eclipse后,如果File->New 能找到Hibernate的相关选项,说明你的机器已经安装好了Hibernate Tools,可跳过本步骤

否则,Help->Eclipse Marketplace

Find栏输入Hibernate,就能联网找到相关的下载地址:

二、创建一个常规的java project,命名为HelloHibernate

创建过程中,注意导入所需的jar包,这些jar包可分为三大类:Hibernate解压目录中lib\required下的jar包、jdbc数据库驱动包、common-logging.jar日志工具包

三、创建Hibernate配置文件(hibernate.cfg.xml)

如果之前没有配置过其它db连接,可以点击Get Values from Connection,创建一个连接

设置相关的参数,如果没问题的话,可以点击Test Connection测试下参数是否正常

把这个连接,命名myConn后保存,这时再点击"Get Values from Connection",在弹出的对话框里,就能看到刚才创建的连接myConn

其实这一系列操作,无非就是为了让ide帮我们生成下面这份xml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="hibernate.connection.password">密码</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@//服务器IP:1521/orcltest</property>
        <property name="hibernate.connection.username">用户名</property>
        <property name="hibernate.default_schema">默认Schema</property>
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
    </session-factory>
</hibernate-configuration>

里面记录了数据库连接的一些关键信息,所以hibernate运行时,就能根据这些信息,知道如何去连接db,以及如何生成sql.

弄好这一步后,还可以在Hibernate Configurations面板里验证一下db连接是否正常,参考下图:Window->Show View->Other  

输入hiber,应该就能自动过滤出想要的记录,选中Hibernate Configurations

然后在eclipse里,就能找到这个面板,展开Database,如果一切顺利,应该能自动列出相应的表名

四、创建反向工程配置文件(hibernate.reveng.xml),自动根据表结构,生成实体类

ORM中:通常一个表对应的就是一个类,如果所有类都要手动编写代码,要累死人的,幸好hibernate tools提供了"根据db表结构反向生成实体类"的功能

参考下图,创建一个 Hibernate Reverse Engineering File

参考下图,点击Refresh,先把所有表列出来,这里出于演示,我们只把测试表TMP_EMP包含进来(即只处理这一张表)

完成之后,可以看到还有其它很多选择,点击"Tables & Columns"

把TMP_EMP给Add进来

类似的,这些图形化的操作,其实就是要生成一段xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" >

<hibernate-reverse-engineering>
	<table-filter match-name="TMP_EMP" />
	<table name="TMP_EMP">
		<column name="ID"></column>
		<column name="NAME"></column>
		<column name="BIRTHDAY"></column>
		<column name="SEX"></column>
		<column name="SALARY"></column>
	</table>
</hibernate-reverse-engineering>

该xml的内容,相当于db表结构的元数据,有了它,hibernate就能知道:每张表(及表里的每个字段)如何生成java中的类(及类的成员)

下面就让这些配置run起来,参考下图:(这个很坑,貌似在菜单里找不到,只能在工具栏里点击,而且还隐藏一个下拉菜单里)

注:如果工具栏里没有显示这个按钮,可以 window -> Customize Perspective,切换到Command Groups Availablity标签页,把Hibernate Code Generation给勾选上

这时,会弹出Hibernate的代码生成配置界面,比较重要的是:代码生成的输出目录(output directory),以及选择刚才创建的 reveng.xml(不选这个,hibernate就不知道要生成哪些表,以及生成的规则)

在Exporters面板里,通常我们只需要生成Domain Code(即:实体类),勾中

有时,生成java类后,eclipse不会自动刷新文件结构,建议下面这个也勾上

最后点击Run,顺利的话,就能看到新生成的java类

五、生成hibernate映射配置文件

刚才创建的反向工程配置文件,在运行时其实没多大作用,它只是用来告诉hiernate如何根据表结构生成java实体类,对于已经存在的java类(比如纯手写的),运行时,hibernate如何知道它对应于db中哪张表呢?答案还是配置文件,参考下图,创建Hibernate XML Mapping file(即hbm文件)

选择实体类所对应的包(或某个具体的类)

一路Next,直到完成,这样我们就得到了文件:TmpEmp.hbm.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Dec 26, 2012 1:44:52 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="domain.TmpEmp" table="TMP_EMP">
        <id name="id" type="long">
            <column name="ID" />
            <generator class="assigned" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
        <property name="birthday" type="java.util.Date">
            <column name="BIRTHDAY" />
        </property>
        <property name="sex" type="java.lang.Character">
            <column name="SEX" />
        </property>
        <property name="salary" type="java.math.BigDecimal">
            <column name="SALARY" />
        </property>
    </class>
</hibernate-mapping>

这面就记录了每个java类与表之间的映射关系,最后一步配置相关的操作:

生成hbm文件后,hibernate如何知道去读这个文件呢?我们总得给hibernate一些提示吧,双击hibernate.cfg.xml文件,找到Mappings节点,如下图:

点击add,把刚才创建的TmpEmp.hbm.xml给添加进来

保存之后,你会发现,其实无非就是在hibernate.cfg.xml里,自动加了一行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <mapping resource="domain/TmpEmp.hbm.xml"/>

最后来玩一把:创建一个带main方法的类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package app;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import domain.TmpEmp;
import java.util.List;

public class Hello {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Session ss = getSession();
		List result = ss.createQuery("from TmpEmp").list();
		for (TmpEmp t : (List<TmpEmp>) result) {
			System.out.println("Id:" + t.getId() + ",Name:" + t.getName());
		}
		ss.close();
	}

	static SessionFactory sessionFactory;

	static Session getSession() {
		if (sessionFactory == null) {
			sessionFactory = new Configuration().configure().buildSessionFactory();
		}

		return sessionFactory.openSession();
	}

}

这里只演示了最简单的查询,顺利的话,Console面板里,就应该有结果了(如下图)

注:Hibernate升级到4以后,原来的buildSessionFactory()方法在eclipse里会提示“过时”,最新4.3版hibernate下的正确写法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1     private static SessionFactory factory;
 2 
 3     public static SessionFactory getFactory() {
 4         Configuration configuration = new Configuration().configure();
 5         StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
 6                 .applySettings(configuration.getProperties());
 7         StandardServiceRegistryImpl registry = (StandardServiceRegistryImpl) builder
 8                 .build();
 9         factory = configuration.buildSessionFactory(registry);
10 
11         return factory;
12 
13     }
14 
15     public static Session getSession() {
16         return factory.openSession();
17     }

使用上述代码前,先import下面这几个package

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 import org.hibernate.Session;
2 import org.hibernate.SessionFactory;
3 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
4 import org.hibernate.boot.registry.internal.StandardServiceRegistryImpl;
5 import org.hibernate.cfg.Configuration;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-12-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java学习之Hibernate框架使用
以我看来Hibernate的使用频率其实还是比较可观的,但都说Hibernate比较笨重,这里来学习一波,做个 简单记录。
全栈程序员站长
2022/07/13
3320
Hibternate框架笔记
Hibernate框架 配置 配置文件: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration
二十三年蝉
2018/02/28
1.9K0
Hibternate框架笔记
Hibernate初级入门
private String userName;<—————>t_userName(这个我们要通过映射文件来创建)
全栈程序员站长
2022/06/30
4490
Java ORM Hibernate 入门笔记
一、下载 官网地址:http://hibernate.org/ Hibernate下有ORM(关系型数据库)、OGM(NoSQL数据库)、Search(对象全文检索)、Validator的工具。 ORM 5.2下载地址为:http://hibernate.org/orm/releases/5.2/ 使用时,将Hibernate Lib下的required Jar包引入即可,其他高级功能可继续引用相关包。 二、工具 Hibernate通过XML将对象映射到数据库表,可以通过Hibernate Tools自动生
用户1637609
2018/04/12
1.1K0
Java ORM Hibernate 入门笔记
java之hibernate之helloworld
2.增加一个lib文件夹,并把 hibernate必须的jar包 和 数据库驱动包 一起复制进去
Vincent-yuan
2019/09/11
3850
java之hibernate之helloworld
Hibernate学习笔记 搭建开发环境
前面已经介绍了Hibernate的一点知识,现在我们来一步一步开发Hibernate程序来学习。在这里我使用IDEA作为开发工具,Gradle作为项目构建工具。当然在实际中不一定必须使用这两个工具,我们可以选择自己习惯使用的工具。只要正确的添加了Hibernate相关类以及数据库驱动,我们就能正确的运行Hibernate程序了。
乐百川
2022/05/05
3260
Hibernate学习笔记 搭建开发环境
Hibernate学习---基本介绍+作用+配置
从今天开始重新学习(以前学的太匆忙)Hibernate,这篇文章主要就一下几点进行讲解和说明: Hibernate的基本介绍 Hibernate的作用 Hibernate基本配置 Hibernate的基本介绍: Hibernate最开始的作者是Gavin King,是澳大利亚人,在工作中因为不满EJB的种种不足,而自行花费两年的时间开发出最原始的Hibernate,后来被Jboss收购了Gavin King所在的公司(最主要是看上了Hibernate),后来的Jboss被红帽收购,所以现在Hibernate
MindMrWang
2018/04/16
1.7K0
Hibernate学习---基本介绍+作用+配置
SSH系列:(3)Hibernate
(1)引入jar包 (2)配置 (3)测试 1、引入jar包 引入mysql jar包mysql-connector-java-5.1.38-bin.jar 引入c3p0 jar包c3p0-0.9.1.2.jar 引入hibernate相关jar包 (hibernate-distribution-3.6.0.Final)antlr-2.7.6.jarcommons-collections-3.1.jardom4j-1.6.1.jarhibernate3.jarhibernate-jpa-2.0-api-
py3study
2020/01/15
3190
maven构建hibernate入门使用(1)
3:hibernate需要怎么去存储和加载持久化类的对象,这时我们要搞一个映射文件(该文件和实体类放在同一目录下面)
用户5166556
2019/04/16
1.5K1
Hibernate基础知识
CBeann
2023/12/25
1370
hibernate笔记(一)
原始的jdbc操作, Connection/Statement/ResultSet
HUC思梦
2020/09/03
8410
学习笔记]快速开发Hibernate
樊欢 java及开源项目爱好者。     Email :heydaymail@hotmail.com     Blog :http://heyay.blogone.net     2005-6-13 引言     关于学习Hibernate的意义,咱不用多说。 下载并安装插件     Hibernate3      下载:http://hibernate.sourceforge.net     JBossIDE1.5M1      下载:http://sourceforge.net/projects/jbo
张善友
2018/01/29
7280
学习笔记]快速开发Hibernate
java之spring之spring整合hibernate
4.在src下,编写 hibernate.cfg.xml ,并且在cn.vincent.vo下编写vo类的映射文件 User.hbm.xml
Vincent-yuan
2019/09/11
7040
java之spring之spring整合hibernate
简单的Hibernate入门简介
其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持。然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西,比如: Tomcat, Eclipse, Log4J,Struts, XDoclet, 甚至JBoss。这容易让人产生Hibernate复杂难懂的误解,特别是打击了初学者的积极性。 在这篇文章将不涉及Eclipse, log4j, Struts, Tomcat, XDoclet,和JBoss。本文的目的是演示
庞小明
2018/03/09
8100
java之hibernate之crud
这篇文章主要讲解:   1>.对Hibernate使用的一些简单封装; ·  2>.在单元测试中,使用Hibernate的封装的工具进行增删改查的测试 1.目录结构展示 2.代码展示 2.0 配置文件
Vincent-yuan
2019/09/11
4000
java之hibernate之crud
使用hibernate基本步骤
Pom.xml 中导入需要使用的jar包(可以直接百度maven repository查找你需要的jar包)
微醺
2019/01/17
6770
新秀学习Hibernate——一个简单的例子
为了可以使用Hibernate高速上手,我们先解说一个简单的Hibernate应用实例hibernate_first。
全栈程序员站长
2022/07/06
2250
新秀学习Hibernate——一个简单的例子
Hibernate第一个程序
文章目录 1. Hibernate第一个程序 1.1. 创建一个Maven项目 1.2. 创建一个实体类(JavaBean) 1.3. 创建这个实体类Student的映射文件 1.4. 核心配置文件(hibernate.cfg.xml) 1.5. 工具类(HibernateUtil) 1.6. 测试类 1.7. 总结 Hibernate第一个程序 创建一个Maven项目 <dependencies> <!-- hibernate核心jar包 --> <dependency> <groupId>o
爱撒谎的男孩
2019/12/31
4750
初识Hibernate之环境搭建
本文介绍了Hibernate框架的基本使用,包括实体类、映射文件、Session和Transaction的概念以及简单的增删改查操作。同时,也介绍了如何搭建Hibernate的运行环境,包括配置文件、创建SessionFactory对象和开启事务等步骤。通过本文的学习,可以了解到Hibernate的基本使用,并能够完成简单的数据库操作。
Single
2018/01/04
8380
初识Hibernate之环境搭建
【框架】[Hibernate]构架知识点详解入门与测试实例
Hibernate是一个开放源码的、非常优秀、成熟的O/R Mapping框架。它提供了强大、高性能的Java对象和关系数据的持久化和查询功能。
谙忆
2021/01/21
4510
【框架】[Hibernate]构架知识点详解入门与测试实例
相关推荐
Java学习之Hibernate框架使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验