`
Mengfanzhu_9343
  • 浏览: 3094 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Hibernate4实战 之 第一部分:Hibernate入门

阅读更多

第一部分:Hibernate入门
Hibernate是什么  Hibernate是一个轻量级的ORMapping框架 ORMapping原理(ObjectRelational Mapping)

ORMapping基本对应规则:
1:类跟表相对应
2:类的属性跟表的字段相对应
3:类的实例与表中具体的一条记录相对应
4:一个类可以对应多个表,一个表也可以对应对个类
5:DB中的表可以没有主键,但是Object中必须设置主键字段
6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系
7:Object中属性的个数和名称可以和表中定义的字段个数和名称不一样

ORMapping的基本实现方式:
使用JDBC,用SQL来操作数据库,只是看动态生成还是人工写代码来实现。
大家想想,我们实现过ORMapping吗?


Hibernate能干什么:
    Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。
Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过程来实现商业逻辑,Hibernate可能不是最好的解决方案;对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。
    Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。
一个非常简要的Hibernate体系结构的高层概要图
Hibernate运行时体系结构
“最小”的体系结构方案,要求应用程序提供自己的 JDBC 连接并管理自己的事务。这种方案使用了Hibernate API 的最小子集.


“全面解决”的体系结构方案,将应用层从底层的JDBC/JTA API中抽象出来,而让Hibernate来处理这些细节。

SessionFactory (org.hibernate.SessionFactory)
针对单个数据库映射关系经过编译后的内存镜像,是线程安全的(不可变)。 它是生成Session的工厂,本身要用到ConnectionProvider。
Session (org.hibernate.Session)
表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短,隐藏了JDBC连接,也是Transaction的工厂。
Transaction (org.hibernate.Transaction)
应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开。
ConnectionProvider (org.hibernate.connection.ConnectionProvider)
生成JDBC连接的工厂(有连接池的作用)。它通过抽象将应用从底层的Datasource或DriverManager隔离开。仅供开发者扩展/实现用,并不暴露给应用程序使用。
TransactionFactory (org.hibernate.TransactionFactory)
生成Transaction对象实例的工厂。仅供开发者扩展/实现用,并不暴露给应用程序使用。

HelloWorld
要研究怎么做,先得搞清楚需要做什么
根据刚才的学习,做基本的Hibernate应用程序,要完成下面的工作:Object、数据库的表、两种配置文件、客户端程序来调用Hibernate的接口进行操作。
构建环境
最简单的方法:把hibernate-release-4.0.0.Beta4.zip包里面lib/required下的jar包全部添加到工程的library里面,另外还需添加slf4j的实现包slf4j-log4j12-1.5.8.jar和log4j的实现包log4j-1.2.16.jar,还有别忘了把JDBC的驱动jar包也加入到library里面
Object怎么做
1:就是前面学过的vo的写法(规则同样是那四点)
2:要求必须有一个public为空参的构造方法,现在写vo一般不写构造方法,默认就有一个,但是写构造方法的时候要注意写上一个public为空参的构造方法
3:要求提供一个标识属性(identifier)
4:使用非final的类(因为要使用代理来延迟实体的装载)
5:设若构建一个对象:cn.javass.h4.hello.UserModel,有四个属性:uuid,userId,name,age

在数据库中建表
设若构建一个表为tbl_user,字段:uuid,userId,name,age
配置xxx.cfg.xml
1:缺省名称为 hibernate.cfg.xml
2:存放在当前classes的根目录下,开发的时候在src根下就可以了
3:主要有如下四部分配置 :
(1)与DB的连接
(2)可选配置
(3)资源文件注册
(4)二级缓存
4:配置的时候可以到Hibernate发行包里面找个hibernate.cfg.xml的例子,比如可以用“\project\hibernate-documentation\quickstart\tutorials\basic\src\test\resources”下面的hibernate.cfg.xml作例子
5:示例如下:

  
 <?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="connection.username">test</property>  
            <property name="connection.password">test</property>  
      
            <property name="connection.pool_size">2</property>  
            <property name="dialect">org.hibernate.dialect.OracleDialect</property>  
            <property name="show_sql">true</property>  
      
            <mapping resource="cn/javass/h4/hello/UserModel.hbm.xml"/>  
        </session-factory>  
    </hibernate-configuration>  


配置xxx.hbm.xml
1:与被描述的类同名 ,如:UserModel.hbm.xml
2:存放位置与所描述类存放在同一文件夹下
3:主要有如下四部分配置 :
(1)类和表的映射
(2)主键的映射
(3)类的属性和DB中字段的映射
(4)关系的映射
4:配置的时候可以到hibernate发行包里面找个例子,比如可以用“\project\hibernate-core\src\test\java\org\hibernate\test\cid”下面的Customer.hbm.xml作例子
5:示例如下:

    <?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="cn.javass.h4.hello.UserModel" table="tbl_user">  
            <id name="uuid">  
                <generator class="assigned"/>  
            </id>  
            <property name=“userId”></property>  
            <property name=“name”></property>  
            <property name="age"></property>  
        </class>  
    </hibernate-mapping>  


客户端文件:


  
 package cn.javass.h4.hello;  
      
    import org.hibernate.Session;  
    import org.hibernate.SessionFactory;  
    import org.hibernate.Transaction;  
    import org.hibernate.cfg.Configuration;  
      
    public class Client {  
        public static void main(String[] args) {  
            SessionFactory sf = new Configuration().configure().buildSessionFactory();  
            Session s = null;  
            Transaction t = null;  
      
            try{  
                //准备数据  
                UserModel um = new UserModel();  
                um.setUuid("1");  
                um.setUserId("id1");  
                um.setName("name1");  
                um.setAge(1);  
                s = sf.openSession();  
                t = s.beginTransaction();  
                s.save(um);  
                t.commit();  
           }catch(Exception err){  
                t.rollback();  
                err.printStackTrace();  
          }finally{  
                s.close();  
          }  
        }  
    }  




测试:直接在Elipse里面运行Client文件即可,运行结束,你将会看到在console输出:“Hibernate: insert into tbl_user (userId, name, age, uuid) values (?, ?, ?, ?)”,打开数据库的数据表,你会看到一条值已经加入了。

说明:
1:SessionFactory sf = new Configuration().configure().buildSessionFactory();这句话的意思是读取hibernate.cfg.xml,创建Session工厂,是线程安全的。
默认是”hibernate.cfg.xml”,不用写出来,如果文件名不是”hibernate.cfg.xml”,那么需要显示指定,如下:
SessionFactory sf = new Configuration(). configure( “javass.cfg.xml” ).buildSessionFactory();

2:Session是应用程序主要使用的Hibernate接口,约相当于JDBC的Connection+Statement/PreparedStatement的功能,是线程不安全的

3:在Hibernate4里面,已经不推荐使用Configuration类了,而改为使用
ServiceRegistryBuilder和MetadataSources来代替,新的写法大致如下:
ServiceRegistryBuilder builder = new ServiceRegistryBuilder().configure();
builder.applySetting("connection.driver_class", "oracle.jdbc.driver.OracleDriver");
builder.applySetting("connection.url", "jdbc:oracle:thin:@localhost:1521:orcl");
builder.applySetting("connection.username", "ztb");
builder.applySetting("connection.password", "ztb");
builder.applySetting("connection.pool_size", "2");
builder.applySetting("hibernate.dialect", "org.hibernate.dialect.OracleDialect");
builder.applySetting("show_sql", "true");
 
MetadataSources sources = new MetadataSources( builder.buildServiceRegistry() );
sources.addResource("cn/javass/h4/hello/UserModel.hbm.xml");
 
MetadataImpl metadata = (MetadataImpl) sources.buildMetadata();
SessionFactory sf = metadata.getSessionFactoryBuilder().buildSessionFactory();

这种写法,现在还没有实现完全,不太好用,所以官方给出的示例里面还是采用以前的方式,大家先了解一下。
4:这里使用的事务Transaction是Hibernate的Transaction,需要有,不能去掉。

为什么必须有这个Hibernate的事务呢?以HelloWorld为例来看看:

视频配套PPT,视频地址【 Hibernate4实战-独家视频课程】
原创内容 转自请注明【 http://sishuok.com/forum/blogPost/list/2461.html
分享到:
评论

相关推荐

    Hibernate4实战 之 第一部分 Hibernate入门

    Hibernate4实战 之 第一部分 Hibernate入门

    轻量级J2EE企业应用实战:Struts+Spring+Hibernate整合开发

    轻量级J2EE企业应用实战,详细讲述了SSH开发的方方面面,是一本极好的入门书籍。 本书所介绍的内容是作者多年J2EE开发经验的总结,内容涉及三个开源框架:Struts、Hibernate和Spring,还介绍了Tomcat和Jetty两个...

    轻量级 J2EE 企业应用实战:Struts+Spring+Hibernate 整合开发.part1.rar

     本书不仅仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP 2.0的规范、Struts的各种用法、Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的J2EE...

    struts2.0 spring2.0 hibernate3.0整合开发快速入门-3

    本文第一部分,struts和hibernate整合 &lt;br&gt;我写的文档基本也不需要原代码就可以完成的。相信你们。 &lt;br&gt;如果不懂strust2.0请先看struts2.0快速入门 如果不懂spring请先看spring快速入门实战文档 如果不懂...

    轻量级J2EE企业应用实战:Struts+Spring+Hibernate 整合开发.part1

     本书不仅仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP 2.0的规范、Struts的各种用法、Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的...

    Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)

    第1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、...

    J2EE 企业应用实战:Struts+Spring+Hibernate 整合开发

    本书不仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP2.0的规范、 Struts的各种用法、 Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的J2EE...

    轻量级 J2EE 企业应用实战:Struts+Spring+Hibernate 整合开发.part2.rar

     本书不仅仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP 2.0的规范、Struts的各种用法、Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的J2EE...

    轻量级J2EE企业应用实战:Struts+Spring+Hibernate 整合开发.part2

     本书不仅仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP 2.0的规范、Struts的各种用法、Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的...

    轻量级J2EE企业应用实战:Struts+Spring+Hibernate 整合开发.part3

     本书不仅仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP 2.0的规范、Struts的各种用法、Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的...

    轻量级J2EE 企业应用实战 Struts+Spring+Hibernate整合开发

    本书不仅是一本J2EE 入门图书,还详尽而细致地介绍了JSP 各个方面,包括JSP 2.0 的规范、Struts 的各种用法、Hibernate 的详细用法,以及Spring 的基本用法。书中所介绍的轻量级J2EE 应用,是目前 最流行、最规范的...

    Java Web整合开发王者归来(共4部分含源代码)part1

    第1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、...

    Java Web整合开发王者归来(共4部分含源代码)part4

    第1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、...

    Java Web整合开发王者归来(共4部分含源代码)part2

    第1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、...

    Java Web整合开发王者归来(共4部分含源代码)part3

    第1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、...

    《Java Web编程宝典(十年典藏版)》光盘源码

    全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...

    Spring3.x企业应用开发实战(完整版) part1

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    Java Web整合开发王者归来:Java Web.part1

    第1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

Global site tag (gtag.js) - Google Analytics