相对微软的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,但是实际开发中,往往是先有表结构,再开始写代码的,所以还是以大多数人习惯的方式为准)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
--先创建表
 
-- 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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里,自动加了一行:

<mapping resource="domain/TmpEmp.hbm.xml"/>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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下的正确写法为:

 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

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;
 
from: http://www.cnblogs.com/yjmyzz/archive/2012/12/26/2834037.html
 

java学习:Hibernate入门的更多相关文章

  1. Java入门-浅析Java学习从入门到精通【转】

    一. JDK (Java Development Kit)  JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库 ...

  2. 真正的Java学习从入门到精通

    http://www.it.com.cn/f/edu/059/6/169189.htm 一. 工具篇JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行 ...

  3. Java学习从入门到精通(2) [转载]

    Java Learning Path(二).书籍篇 学习一门新的知识,不可能指望只看一本,或者两本书就能够完全掌握.需要有一个循序渐进的阅读过程.我推荐Oreilly出版的Java系列书籍. 在这里我 ...

  4. Java ORM Hibernate 入门笔记

    一.下载 官网地址:http://hibernate.org/ Hibernate下有ORM(关系型数据库).OGM(NoSQL数据库).Search(对象全文检索).Validator的工具. OR ...

  5. Java学习从入门到精通(1) [转载]

    Java Learning Path (一).工具篇 一. JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envi ...

  6. java学习-初级入门-面向对象⑥-类与对象-静态static

    这次我们来学习静态(static) 知识点 1.静态方法只能调用静态变量 2.静态变量属于整个Class,会随着发生变化. 案例:定义一个自动增长的学生类. 题目要求: 定义一个学生类,除了姓名.性别 ...

  7. java学习-初级入门-面向对象⑤-类与对象-类与对象的定义和使用3

    这次我们要做一个日期类Date类 主要目的是    1.  熟悉-->构造不同参数的函数  2.善于利用已有的函数!! 题目要求: Date类要求 可设定年月日 可转换为字符串,并可指定分隔符, ...

  8. java学习-初级入门-面向对象②-面向对象概述-面向对象程序设计

    我们在  面向对象①中学习了,结构化程序设计. 今天我们一起学习面向对象程序设计. 学习面向对象程序设计就要了解,在面向对象中重要的知识点. 继承  .  多态   . 抽象  . 接口 我们会在接下 ...

  9. java学习-初级入门-面向对象①-面向对象概述-结构化程序设计

    为了学习面向对象程序设计,今天我们先利用面向对象以前的知识,设计一个学生类. 要求进行结构化程序设计. 学生类: Student 要求:存储学生的基本信息(姓名.性别.学历层次和年级),实现学生信息的 ...

  10. java学习-初级入门-面向对象④-类与对象-类与对象的定义和使用2

    我们继续学习类与对象,上一篇我们定义了  坐标类(Point), 这次我们在Point的基础上,创建一个圆类(Circle). 案例:创建一个圆类 题目要求: 计算圆的周长和面积:求判断两个圆的位置关 ...

随机推荐

  1. 【BZOJ】1006: [HNOI2008]神奇的国度

    http://www.lydsy.com/JudgeOnline/problem.php?id=1006 题意:在一个弦图中找最少染色数.(n<=10000, m<=1000000) #i ...

  2. 【BZOJ】2194: 快速傅立叶之二

    http://www.lydsy.com/JudgeOnline/problem.php?id=2194 题意:求$c[k]=\sum_{k<=i<n} a[i]b[i-k], n< ...

  3. 【Oracle】悲观锁和乐观锁

    悲观锁     如select * for update     悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性.但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样  ...

  4. 【异常】java.lang.LinkageError: loader constraints violated

    [问题背景]      南非客户帐单提醒功能过程中的一个问题,当启动服务器后,后台报java.lang.LinkageError: loader constraints violated when l ...

  5. BZOJ3625: [Codeforces Round #250]小朋友和二叉树

    Description 我们的小朋友很喜欢计算机科学,而且尤其喜欢二叉树.考虑一个含有n个互异正整数的序列c[1],c[2],...,c[n].如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合{ ...

  6. Crystal Reports 2008(水晶报表) 安装

    这篇blog主要是介绍Crystal Reports2008(水晶报表)的安装. 首先我们应该知道Crystal Reports 有什么作用? 从这里Crystal Reports 你可以了解到它的一 ...

  7. Oracle连接超时

    客户机 要想 连接 oracle服务机(装了数据库的机子),只需要在客户机配置一个 本地服务名就行了,不管你用Oracle服务端的配置工具 还是客户端的配置工具,都没有问题. 如果只是客户机连接服务机 ...

  8. css sprites介绍

    一.CSS Sprites简介 通常被意译为“CSS图像拼合”或“CSS贴图定位”.CSS Sprites并不是一门新技术,目前它已经在网页开发中发展得较为成熟,CSS Sprites并不是什么金科玉 ...

  9. 递归merge排序

    package sort; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scan ...

  10. [LintCode] Sort Integers 整数排序

    Given an integer array, sort it in ascending order. Use selection sort, bubble sort, insertion sort ...