`
mooncui
  • 浏览: 72738 次
社区版块
存档分类
最新评论

Hibernate初探

    博客分类:
  • Java
阅读更多

开始看Hibernate reference,运行hibernate的test中的代码。
Environment是一个非常重要的类。它定义了很多常量,最重要的是hibernate的入口在这里。在Environemt类中有段static 代码:
static {
  //一些常量设置

  //导入hibernate.properties到GLOBAL_PROPERTIES
  InputStream stream = ConfigHelper.getResourceAsStream("/hibernate.properties");
  ... 
    GLOBAL_PROPERTIES.load(stream);
  ...  
    stream.close();
  ...
  //将系统属性放入全局属性GLOBAL_PROPERTIES中  
  try {
   GLOBAL_PROPERTIES.putAll( System.getProperties() );
  }
  catch (SecurityException se) {
   log.warn("could not copy system properties, system properties will be ignored");
  }
  //检查是否有属性废弃了或改名了
  verifyProperties(GLOBAL_PROPERTIES);

  //其他一些设置。。。
  
  //看db driver/JVM? 是否支持产生key的方法
  boolean getGeneratedKeysSupport;
  try {
   Statement.class.getMethod("getGeneratedKeys", null);
   getGeneratedKeysSupport = true;
  }
  catch (NoSuchMethodException nsme) {
   getGeneratedKeysSupport = false;
  }
  JVM_SUPPORTS_GET_GENERATED_KEYS = getGeneratedKeysSupport;
  if (!JVM_SUPPORTS_GET_GENERATED_KEYS) log.info("JVM does not support Statement.getGeneratedKeys()");

  
  //查JDK是否有java.util.LinkedHashSet类
  //Timestamp似乎有点问题
  JVM_HAS_TIMESTAMP_BUG = new Timestamp(123456789).getTime() != 123456789;
  if (JVM_HAS_TIMESTAMP_BUG) log.info("using workaround for JVM bug in java.sql.Timestamp");
  Timestamp t = new Timestamp(0);
  t.setNanos(5 * 1000000);
  JVM_HAS_JDK14_TIMESTAMP = t.getTime() == 5;
  if (JVM_HAS_JDK14_TIMESTAMP) {
   log.info("using JDK 1.4 java.sql.Timestamp handling");
  }
  else {
   log.info("using pre JDK 1.4 java.sql.Timestamp handling");
  }
 }

然后正常的一个流程:
Configuration cfg = new Configuration();
//从配置文件中得到的各种属性设置
cfg.setProperty();
//得到所有mapping文件或mapping类
cfg.addResource(//mapping文件名);
或cfg.addClass(//类名)
//针对每个resource,有个HbmBinder来读xml文件,并产生配置时期模型类,就是在org.hibernate.mapping包中的各个类,
如Any,OneToMany,List,Join等。称为配置时期的模型configuration-time metamodel。
cfg.buildMappings(); //这里对复合查询进行,外键等进行处理

SessionFactory sessionFactory = cfg.buildSessionFactory();
 {//...
  return new SessionFactoryImpl(
    this,
    mapping,
    settings,
    getInitializedEventListeners()
   );
 }

Session s = sessionFactory.openSession(){
//org.hibernate.impl.SessionImpl
return new SessionImpl(
          connection,
          this,
          autoClose,
          timestamp,
          sessionLocalInterceptor == null ? interceptor : sessionLocalInterceptor,
          settings.getDefaultEntityMode(),
          settings.isFlushBeforeCompletionEnabled(),
          settings.isAutoCloseSessionEnabled(),
          settings.getConnectionReleaseMode()
   );
}
Transaction tx = s.beginTransaction();
....
tx.commit();
s.close();

分享到:
评论

相关推荐

    hibernate first

    《Hibernate初探:深入理解Hibernate第一映射》 Hibernate,作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作,将Java对象与数据库表之间的映射关系自动化处理。"Hibernate first"通常指...

    hibernate3.3.2jar包part1

    《Hibernate 3.3.2:Java对象持久化框架初探》 Hibernate,作为一个流行的开源对象关系映射(ORM)框架,为Java开发者提供了一种简单而强大的方式来管理数据库操作。在Java应用中,Hibernate使得开发人员可以将业务...

    hibernate3.2开篇

    《Hibernate3.2初探:源码与工具的深度融合》 Hibernate,作为一款强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。在3.2版本中,它进一步提升了性能,优化了API,并引入了更多实用功能。本文将深入...

    struts2 初探

    同时,Struts2可以与其他开源库如Hibernate、Spring等无缝集成,进一步提升开发效率。 Struts2的插件机制也是其特色之一。通过插件,开发者可以轻松地扩展Struts2的功能,比如Tiles插件用于布局管理,Freemarker或...

    hibernate+spring_struts开发的学生信息管理系统(初级版)

    《基于Hibernate+Spring+Struts的学生信息管理系统初探》 在Java开发领域,Spring、Hibernate和Struts是经典的“SSH”框架组合,常用于构建企业级应用,如本例中的学生信息管理系统。这个初级版系统展示了如何将这...

    pring初探共18页.pdf.zip

    6. **数据访问**:Spring对各种持久化技术的支持,如JDBC、ORM框架(Hibernate、MyBatis),以及Spring Data JPA和Spring Data MongoDB等。 7. **Spring Boot**:现代Spring应用的快速启动框架,介绍其特性,如自动...

    SQL注入初探,实例

    5. **使用ORM(对象关系映射)**:如Hibernate或Entity Framework,它们可以自动处理SQL语句,降低注入风险。 6. **代码审计和更新**:定期检查代码中可能存在的SQL注入漏洞,并及时修复已知的安全问题。 7. **...

    学生选课系统

    《SSH框架下的学生选课系统初探》 SSH(Struts2、Spring、Hibernate)是Java Web开发中常用的三大框架,它们的组合为构建高效、灵活的企业级应用提供了可能。本篇文章将围绕“学生选课系统”这一主题,探讨如何利用...

    C# 通过反射初探ORM框架的实现原理(详解)

    在Java中,我们经常使用Mybatis、Hibernate等ORM框架来实现数据访问层。然而,在C#中,我们可以使用反射机制来实现简单的ORM框架。 什么是反射?反射是指程序可以访问、检测和修改它本身状态或行为的一种能力,并能...

    JSF资料以及深入开发

    **JSF初探.pdf** 可能是一份介绍性的资料,概述了JSF的主要特性和优势,帮助读者快速了解JSF并决定是否深入学习。 **JSF教程.pdf** 这可能是更为全面的JSF教程,涵盖了JSF的各个方面,包括但不限于组件体系结构、...

    javaeye热点阅读

    15. Apache Click框架初探:Click是一个轻量级的Web开发框架,它的易用性和简洁性使得快速构建应用变得可能。 16. Spring AOP详解:AOP(面向切面编程)是Spring的重要特性,用于实现如日志、权限检查等功能的横切...

    java学习之spring2.0

    - **Spring 初探**:Spring的核心在于依赖注入(DI)和面向切面编程(AOP),提供了一个轻量级的容器来管理对象的生命周期和相互依赖关系。 - **Spring 体系**:包括Core Container(核心容器)、Data Access/...

    Jeecg框架文档

    从技术背景方面,Jeecg框架文档介绍了Jeecg框架的技术背景,包括Java语言、Spring框架、 Hibernate框架等技术的应用。此外,文档还介绍了Jeecg框架的平台架构,包括前端、后端、数据库等组件的架构设计。 从平台...

    开源框架 Spring Gossip

    从代理机制初探 AOP 动态代理 <br>AOP 观念与术语 Spring AOP Advices Advices 包括了Aspect 的真正逻辑,由于缝合至Targets的时机不同,Spring 提供了几种不同的 Advices。 Before ...

    spring 课件下载

    1. **Spring初探** 在这一章中,我们将从Spring框架的基础出发,介绍其诞生背景和主要目标。我们会讲解Spring如何简化Java应用的开发,以及它提供的依赖注入(Dependency Injection, DI)机制,这是Spring的核心...

    spring in action 最新

    在DAO层面,书中涵盖了与数据库交互的各种策略,包括JDBC、Hibernate和MyBatis等ORM工具的集成。 在事务管理方面,读者将学习到Spring提供的声明式和编程式事务管理机制,这使得事务控制变得简单而直观。此外,书中...

    2.spring_beginning

    《Spring框架初探》 Spring框架是Java企业级应用开发中的重要组成部分,它以其轻量级、模块化和全面的特性赢得了广大开发者喜爱。本文将深入探讨Spring框架的基础知识,帮助初学者理解并掌握这一强大的工具。 首先...

Global site tag (gtag.js) - Google Analytics