`
mazhiyuan
  • 浏览: 64273 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate 学习总结一

阅读更多

引入:
模型不匹配(阻抗不匹配)
java面向对象语言,对象模型,其主要概念有:继承,关联,多态等;数据库是关系模型,其主要概念有:表,主键,外键等。
解决方法:
1.使用JDBC手工转换
2.使用ORM(object relation mapping对象关系映射)框架来解决,主流的ORM框架有Hibernate,TopLink,OJB


技术:
SessionFactoroy 类似于jdbc中的DriverManager,通过sessionFactory获得的session类似于jdbc中获得的数据库连接connection。
在jdbc中事务是自动提交的,每一条语句默认就是一个事务。而在hibernate中,事务是默认关闭的,所以要手动的开启事务Transaction。
 <property name="hibernate.hbm2ddl.auto">create</property>  自动创建数据库表,该属性有四个取值:create-drop(多用于测试,程序启动创建表,运行结束删掉表,在真实的情况下,不应使用),create(在启动前把表删掉),update,validate

注意:在做试验时,有可能未提交事务,表中也插入了数据。可能是跟你使用的数据库有关。你的数据库的存储引擎是MyISAM的话,它不支持事务和外键。当你在程序中未使用过事务时,它同样能够把数据更新到表中。mysql3.23的默认存储引擎就是MyISAM.如果你的数据库存储引擎是InnoDB的话,它支持事务的回滚,外键,行级锁定等。在你的程序中未使用事务的话,他一开始把数据更新到表中,但是没有遇到提交事务的语句,所以就把该操作进行回滚了,所以在表中看不到更新的结果。mysql的较新版本的存储引擎用的都是InnoDB,性能更好。

开发流程:
 由domain object->mapping->db(官方推荐)
 由db开始,用工具生成mapping和domain object(开发中使用较多)
 由映射文件开始。

Domain Object的限制:
1,默认的构造方法(必须的,受内部机制影响,反射需要不带参数的构造方法)
2,有无意义的标识符id(主键)(可选)
3,非final的,对懒加载有影响(可选)

持久化对象(Persistent Object)及其集合(Collection)
生命期短促的单线程的对象,包含了持久化状态和商业功能。它们可能是普通的JavaBeans,唯一特别的是他们现在从属于且仅从属于一个Session。

获得session连接:
(1)使用户自行提供的jdbc连接
 SessionFactory可以使用一个用户自行提供的JDBC连接来打开一个Session。这种设计可以让应用程序来自己管理JDBC连接。应用程序必须小心,不能在同一个连接上打开多个并行的session。

 

java.sql.Connection conn = datasource.getConnection();   
Session sess = sessions.openSession(conn);   
  
// start a new transaction (optional)   
Transaction tx = sess.beginTransaction();  

java.sql.Connection conn = datasource.getConnection();
Session sess = sessions.openSession(conn);

// start a new transaction (optional)
Transaction tx = sess.beginTransaction(); 

 

(2)使用hibernate提供的jdbc连接
可以让SessionFactory替你打开连接。SessionFactory必须事先知道连接的参数,有几种不同的方法设置参数:
1,传递一个java.util.Properties到Configuration.setProperties()方法。
2,在classpath的根目录中提供hibernate.properties文件。
3,通过java -Dproperty=value指定使用系统属性。
4,在hibernate.cfg.xml文件中包含<property>元素。这个文件应该放在你的CLASSPATH的根目录中。 
如果你使用这种方法,打开一个Session是非常简单的:

 

Session sess = sessions.openSession(); // obtain a JDBC connection and   
                                       // instantiate a new Session   
// start a new transaction (optional)   
Transaction tx = sess.beginTransaction();  

Session sess = sessions.openSession(); // obtain a JDBC connection and
                                       // instantiate a new Session
// start a new transaction (optional)
Transaction tx = sess.beginTransaction();  

 系统级别的配置只能通过java -Dproperty=value或者在hibernate.properties文件中配置,而不能通过传递给Configuration的Properties实例来配置。

方言:
如果你不需要使用基于native或者sequence的主键自动生成算法,或者悲观锁定(使用Session.lock() 或 Query.setLockMode())的话,方言就可以不必指定。然而,假若你指定了一个方言,Hibernate会为上面列出的一些属性使用特殊默认值,省得你手工指定它们。

绑定SessionFactory到JNDI
假若你希望把SessionFactory绑定到一个JNDI命名空间,用hibernate.session_factory_name这个属性指定一个名字(比如,java:comp/env/hibernate/SessionFactory)。如果这个属性省略了,SessionFactory不会被绑定到JNDI。(在一个只读的JNDI默认值实现的环境中,这特别有用。比如,Tomcat。)

当把SessionFactory 绑定到JNDI,Hibernate会使用hibernate.jndi.url,hibernate.jndi.class的值来获得一个初始化上下文的实例。如果他们没有指定,就会使用默认的InitialContext。

如果你选择使用JNDI,EJB或者其他工具类就可以通过JNDI查询得到SessionFactory。

 

分享到:
评论

相关推荐

    hibernate学习总结文档

    **Hibernate 框架概述** Hibernate 是一个开源的对象关系映射(ORM)框架,它为 Java 开发者提供了一种在 Java 应用程序中管理关系...通过实践和深入学习,你可以更好地利用 Hibernate 实现高效、可靠的数据库应用。

    Hibernate学习笔记与总结

    **Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...

    J2EE系统之-hibernate学习总结

    ### J2EE系统之-hibernate学习总结 #### 对象持久化理论 - **对象持久化定义**:将对象中的数据转换存储至外部持久性存储设备的过程,如数据库、磁盘等。 - **对象持久化的原因**: - 内存易失性:断电后数据丢失...

    hibernate学习总结

    **hibernate学习总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。在Java世界中,Hibernate 提供了一种在对象模型和关系数据库之间进行转换的机制,使得开发...

    hibernate学习笔记,学习大纲【吐血推荐】

    **Hibernate学习笔记与大纲** Hibernate 是一款开源的Java语言下的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以使用面向对象的方式处理数据,而无需过多关注底层的SQL语句。本笔记将深入...

    Struts+Spring+hibernate学习总结

    【Struts+Spring+Hibernate 学习总结】 SSH(Struts、Spring、Hibernate)是Java Web开发中的一个经典企业级应用架构,它将MVC设计模式应用到Web应用的各个层次,实现了良好的分层和解耦。这篇学习总结旨在帮助读者...

    Hibernate学习笔记特别详细

    《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...

    Hibernate学习心得

    Hibernate是Java开发中的一款强大的对象关系映射(ORM)框架,它为开发者提供了一种在Java应用程序中操作数据库的面向对象方式,极大地简化了数据库操作的复杂性。通过使用Hibernate,开发者可以避免直接编写SQL语句...

    Hibernate 简单 PPT 总结

    这些资料构成了一套完整的Hibernate学习路径,从基础到高级,从配置到实践,对于理解Hibernate的核心机制和提升开发技能都非常有帮助。通过阅读和研究这些内容,开发者可以更熟练地运用Hibernate进行数据库操作,...

    北大青鸟Hibernate学习资料

    【北大青鸟Hibernate学习资料】 Hibernate是一个开源的Java ORM(对象关系映射)框架,它为开发者提供了在Java应用中管理关系数据库数据的便捷方式。本学习资料集合了多个关于Hibernate的重要主题,包括对象关系...

    Hibernate重点总结

    **Hibernate核心知识点详解** Hibernate是一款强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发者可以...阅读提供的"Hibernate.pdf"文档将进一步深入理解这些概念,并提供实际示例帮助学习。

    hibernate 学习笔记总结

    HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发人员以面向对象的方式编写查询,而不是直接使用SQL。这使得查询更加符合Java开发人员的思维习惯,同时也更容易理解和维护。 例如,如果有一个...

Global site tag (gtag.js) - Google Analytics