Hibernate官方文档翻译-(第二章,入门)

第二章:使用原生Hibernate API 和hbm.xml映射

(示例代码下载地址http://sourceforge.net/projects/hibernate/files/hibernate4/

2.1. Hibernate configuration 文件
资源文件hibernate.cfg.xml定义了Hibernate的配置信息。
比如说connection.driver_class,connection.url,connection.username 和connection.password等属性元素定义了JDBC连接的信息。由于本套教程利用了H2的“内存间”(in-memory)模式,所以以上这些属性的值都是运行在H2的in-memory模式上的特定的值。connection.pool_size是用来配置在Hibernate内置连接池的连接数。
(重要:Hibernate内置连接池不是专门为生产环境使用的,他缺少了许多生产环境下连接池该有的特性)。
“dialect”属性指定了Hibernate将会转换的目标特定SQL变体(如MySQL的具体语句,Oracle的具体语句等)。
(提示:在大多数情况下,Hibernate能够正确地判断使用哪种dialect,这对于面对多种数据库的应用就非常有用)。

“hbm2ddl.auto”属性让Hibernate能够直接给数据库生成简单元数据纲要(如数据库,数据库表结构等)。
最后,为持久化类添加映射文件到配置中,mapping元素的“resource”属性促使Hibernate尝试定位该映射作为类路径的资源,并且使用java.lang.ClassLoader来搜寻。
2.2. 实体类
本教程的实体类为org.hibernate.tutorial.hbm.Event。
关于实体类的说明:
》Event类使用标准的JavaBean命名规范,为属性生成getter和setter方法,并且所有字段都为private的,尽管这是推荐的设计方法,但却不是必须不可的。
》同样作为JavaBean命名规范的无参构造函数,也是所有持久化类应有的。因为Hibernate需要使用反射机制来为我们创建这些类的对象。构造方法可以使private的,但是包内可见或者全局可见(package或者public可见)是运行时生成代理和非字节码调试高效数据检索的必须。
2.3. 映射文件
本教程的映射文件hbm.xml路径为/org/hibernate/tutorial/hbm/Event.hbm.xml。
Hibernate使用映射的元数据来决定如何加载和存储持久化对象,Hibernate映射文件是为Hibernate提供这些元数据的一种选择。


例:2.1 class 映射元素
<class name="Event" table="EVENTS">

</class>


class 元素的功能:
1.name属性指定了将会作为持久化的实体类名(要结合package属性)。
2.table属性指定了包含该实体数据的数据库表。
有了class属性之后,现在Event类的所有实例化对象就与数据库中EVENTS表中
的行一一对应了。


例:2.2 id 映射元素
<id name="id" column="EVENT_ID">

</id>
Hibernate使用id元素的指定的属性值来唯一的标志表中的每一行。


(重要:id元素不是必须得映射到表中的primary key(主键),但是这事传统的做法。在Hibernate中被映射的表甚至不需要主键。尽管如此,还是强烈建议所有的元数据都定义引用完整性。因此id和主键在Hibernate的文档中都可交换使用)。


ID元素标志了EVENT_ID列作为EVENTS表的主键,同时也标志了类Event的ID字段包含了唯一标志的值。


generator元素嵌套在id元素内部告知Hibernate使用哪种策略来为实体类生成主键。


例:2.3. property 映射属性
<property name="data" type="timestamp" column="EVENT_DATE"/>
<property name="Title"/>


以上两个属性元素声明了Event剩下的两个字段:date和title。date属性包含了column属性,但是title属性没有。如果没有指定column属性,Hibernate使用相同的属性名来作为column(列)名。title刚好可以做到让类字段名和数据库表列名一致,但是由于date是大多数数据库保留的关键字,因此需要为date指定另外的列名。
title元素缺少了type属性,在映射文件中的type属性既不是Java的类型也不是SQL数据库中的类型,而是Hibernate映射类型。Hibernate映射类型是在Java和SQL之间充当翻译官的转换器。如果type 属性没有在映射中被指定,Hibernate会自动尝试使用正确的转换,原理是通过Java反射机制来判断。


某些情况下这种自动的探测可能不会选择到你期望或者需要的默认类型,就像date属性一样,Hibernate无法知道java.util.Date类型应该映射到SQL中的DATE,TIME还是TIMESTAMP类型。在映射文件中完整的日期和时间信息应该映射到timestamp转换器,在Hibernate中是org.hibernate.type.TimestampType类型。


2.4. 示例代码
类org.hibernate.tutorial.hbm.NativeApiIllustrationTest展示了如何使用Hibernate本地的API。
(提示:被教程的所有示例代码都是在JUnit下测试,为了容易,一个方法就是在@before和@after下分别建立和销毁SessionFactory)。
例:2.4. 获得org.hibernate.SessionFactory
protected void setUp() throws Exception {
    // 一个程序中SessionFactory只要建立一次
    sessionFactory = new Configuration()
            .configure() // configures settings from hibernate.cfg.xml
            .buildSessionFactory();
}


工作流程:
1.加载配置文件
最先察觉配置文件的就是org.hibernate.cfg.Configuration类。本教程所有配置细节都在http://hibernate.org/documentation/quickstart/en-US/html/ch02.html#hibernate-gsg-tutorial-basic-config
2.创建org.hibernate.SessionFactory
然后org.hibernate.cfg.Configuration创建org.hibernate.SessionFactory对象,org.hibernate.SessionFactory对象是一个线程安全的对象,在整个应用中只需要实例化一次(单例模式)。
3.SessionFactory创建Session实例。
SessionFactory作为Session实例的一个工厂,可以在示例代码中testBasicUsage方法中看到。
4.Session对象开始工作
一个session对象应该要执行一个单一的工作单元。


例:2.5. 保存实体(持久化实体)
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save( new Event( "Our very first event!", new Date() ) );
session.save( new Event( "A follow up event", new Date() ) );
session.getTransaction().commit();
session.close();




testBasicUsage方法首先创建一些Event对象,使用save方法将之传递给Hibernate管理,Hibernate负责使用INSERT语句将他们插入到数据库。


例:2.6. 获得一系列实体对象
session = sessionFactory.openSession();
session.beginTransaction();
List result = session.createQuery( "from Event" ).list();
for ( Event event : (List<Event>) result ) {
    System.out.println( "Event (" + event.getDate() + ") : " + event.getTitle() );
}
session.getTransaction().commit();
session.close();




testBasicUsage展示了如何使用Hibernate Query Language(HQL:Hibernate查询语言)来加载数据库中所有Event对象的,生成适当的SELECT SQL语句,发送到数据库并且使用返回的结果集填充Event对象。


2.5. 更深入地。。。
实际操作练习:
》重新配置示例代码连接到你自己的数据库
数据中心机房是现代信息技术的核心设施,它承载着企业的重要数据和服务,因此,其基础设计与规划至关重要。在制定这样的方案时,需要考虑的因素繁多,包括但不限于以下几点: 1. **容量规划**:必须根据业务需求预测未来几年的数据处理和存储需求,合理规划机房的规模和设备容量。这涉及到服务器的数量、存储设备的容量以及网络带宽的需求等。 2. **电力供应**:数据中心是能源消耗大户,因此电力供应设计是关键。要考虑不间断电源(UPS)、备用发电机的容量,以及高效节能的电力分配系统,确保电力的稳定供应并降低能耗。 3. **冷却系统**:由于设备密集运行,散热问题不容忽视。合理的空调布局和冷却系统设计可以有效控制机房温度,避免设备过热引发故障。 4. **物理安全**:包括防火、防盗、防震、防潮等措施。需要设计防火分区、安装烟雾探测和自动灭火系统,设置访问控制系统,确保只有授权人员能进入。 5. **网络架构**:规划高速、稳定、冗余的网络架构,考虑使用光纤、以太网等技术,构建层次化网络,保证数据传输的高效性和安全性。 6. **运维管理**:设计易于管理和维护的IT基础设施,例如模块化设计便于扩展,集中监控系统可以实时查看设备状态,及时发现并解决问题。 7. **绿色数据中心**:随着环保意识的提升,绿色数据中心成为趋势。采用节能设备,利用自然冷源,以及优化能源管理策略,实现低能耗和低碳排放。 8. **灾难恢复**:考虑备份和恢复策略,建立异地灾备中心,确保在主数据中心发生故障时,业务能够快速恢复。 9. **法规遵从**:需遵循国家和地区的相关法律法规,如信息安全、数据保护和环境保护等,确保数据中心的合法运营。 10. **扩展性**:设计时应考虑到未来的业务发展和技术进步,保证机房有充足的扩展空间和升级能力。 技术创新在数据中心机房基础设计及规划方案中扮演了重要角色。例如,采用虚拟化技术可以提高硬件资源利用率,软件定义网络(SDN)提供更灵活的网络管理,人工智能和机器学习则有助于优化能源管理和故障预测。 总结来说,一个完整且高效的数据中心机房设计及规划方案,不仅需要满足当前的技术需求和业务目标,还需要具备前瞻性和可持续性,以适应快速变化的IT环境和未来可能的技术革新。同时,也要注重经济效益,平衡投资成本与长期运营成本,实现数据中心的高效、安全和绿色运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值