开始看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初探:深入理解Hibernate第一映射》 Hibernate,作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作,将Java对象与数据库表之间的映射关系自动化处理。"Hibernate first"通常指...
《Hibernate 3.3.2:Java对象持久化框架初探》 Hibernate,作为一个流行的开源对象关系映射(ORM)框架,为Java开发者提供了一种简单而强大的方式来管理数据库操作。在Java应用中,Hibernate使得开发人员可以将业务...
《Hibernate3.2初探:源码与工具的深度融合》 Hibernate,作为一款强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。在3.2版本中,它进一步提升了性能,优化了API,并引入了更多实用功能。本文将深入...
同时,Struts2可以与其他开源库如Hibernate、Spring等无缝集成,进一步提升开发效率。 Struts2的插件机制也是其特色之一。通过插件,开发者可以轻松地扩展Struts2的功能,比如Tiles插件用于布局管理,Freemarker或...
《基于Hibernate+Spring+Struts的学生信息管理系统初探》 在Java开发领域,Spring、Hibernate和Struts是经典的“SSH”框架组合,常用于构建企业级应用,如本例中的学生信息管理系统。这个初级版系统展示了如何将这...
6. **数据访问**:Spring对各种持久化技术的支持,如JDBC、ORM框架(Hibernate、MyBatis),以及Spring Data JPA和Spring Data MongoDB等。 7. **Spring Boot**:现代Spring应用的快速启动框架,介绍其特性,如自动...
5. **使用ORM(对象关系映射)**:如Hibernate或Entity Framework,它们可以自动处理SQL语句,降低注入风险。 6. **代码审计和更新**:定期检查代码中可能存在的SQL注入漏洞,并及时修复已知的安全问题。 7. **...
《SSH框架下的学生选课系统初探》 SSH(Struts2、Spring、Hibernate)是Java Web开发中常用的三大框架,它们的组合为构建高效、灵活的企业级应用提供了可能。本篇文章将围绕“学生选课系统”这一主题,探讨如何利用...
在Java中,我们经常使用Mybatis、Hibernate等ORM框架来实现数据访问层。然而,在C#中,我们可以使用反射机制来实现简单的ORM框架。 什么是反射?反射是指程序可以访问、检测和修改它本身状态或行为的一种能力,并能...
**JSF初探.pdf** 可能是一份介绍性的资料,概述了JSF的主要特性和优势,帮助读者快速了解JSF并决定是否深入学习。 **JSF教程.pdf** 这可能是更为全面的JSF教程,涵盖了JSF的各个方面,包括但不限于组件体系结构、...
15. Apache Click框架初探:Click是一个轻量级的Web开发框架,它的易用性和简洁性使得快速构建应用变得可能。 16. Spring AOP详解:AOP(面向切面编程)是Spring的重要特性,用于实现如日志、权限检查等功能的横切...
- **Spring 初探**:Spring的核心在于依赖注入(DI)和面向切面编程(AOP),提供了一个轻量级的容器来管理对象的生命周期和相互依赖关系。 - **Spring 体系**:包括Core Container(核心容器)、Data Access/...
从技术背景方面,Jeecg框架文档介绍了Jeecg框架的技术背景,包括Java语言、Spring框架、 Hibernate框架等技术的应用。此外,文档还介绍了Jeecg框架的平台架构,包括前端、后端、数据库等组件的架构设计。 从平台...
从代理机制初探 AOP 动态代理 <br>AOP 观念与术语 Spring AOP Advices Advices 包括了Aspect 的真正逻辑,由于缝合至Targets的时机不同,Spring 提供了几种不同的 Advices。 Before ...
1. **Spring初探** 在这一章中,我们将从Spring框架的基础出发,介绍其诞生背景和主要目标。我们会讲解Spring如何简化Java应用的开发,以及它提供的依赖注入(Dependency Injection, DI)机制,这是Spring的核心...
在DAO层面,书中涵盖了与数据库交互的各种策略,包括JDBC、Hibernate和MyBatis等ORM工具的集成。 在事务管理方面,读者将学习到Spring提供的声明式和编程式事务管理机制,这使得事务控制变得简单而直观。此外,书中...
《Spring框架初探》 Spring框架是Java企业级应用开发中的重要组成部分,它以其轻量级、模块化和全面的特性赢得了广大开发者喜爱。本文将深入探讨Spring框架的基础知识,帮助初学者理解并掌握这一强大的工具。 首先...