持久层设计技术hibernate_leon
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库用户名 数据库用户密码 连接池容量最大数
18
2013-7-16
Hibernate JDBC 属性 (例子)
<property name="connection.url"> jdbc:oracle:thin:@10.10.12.1:1521:edudb </property> <property name="connection.username"> study-205 </property>
6
2013-7-16
总览
7
2013-7-16
轻型体系
应用程序自己提供JDBC连接,并且自行管理事务。 这种方式使用了Hibernate API的一个最小子集。
8
2013-7-16
wenku.baidu.com
全面解决体系
所有的底层JDBC/JTA API都被抽象了, Hibernate会替你照管所有的细节
9
2013-7-16
Try { …. transaction.commit(); } Catch ( Exception e) { transaction.rollback(); }
22
2013-7-16
持久化类( Course Classes)
public class Course { /**每个属性和表的一个字段对应**/ private Integer id; private String name; private Date createtime; /**属性的访问方法**/ public void setId(Integer newid) { id = newid; } public Integer getId() { return id; } public void setName(String name) { this.name=name; } public String getName() { return this.name; } ……
Hibernate 介绍
10
2013-7-16
Hibernate 介绍
11
2013-7-16
常用对象定义
Configuration (org.hibernate.cfg.Configuration) Configuration 类负责管理Hibernate 的配置信息。Hibernate运行时需要获取 一些底层实现的基本信息,其中几个关键属性包括: 1. 2. 3. 4. 5. 数据库URL 数据库用户 数据库用户密码 数据库JDBC驱动类 数据库dialect,用于对特定数据库提供支持,其中包含了针对特定数 据库特性的实现,如Hibernate数据类型到特定数据库数据类型的映射等。 使用Hibernate 必须首先提供这些基础信息以完成初始化工作,为后继操 作做好准备。这些属性在hibernate配置文件 (hibernate.cfg.xml 或 Hibernate.properties)中加以设定。
12
2013-7-16
常用对象定义
SessionFactory (org.hibernate.SessionFactory) 对属于单一数据库的编译过的映射文件的一个线程安全的,不可变的缓 存快照。它是Session的工厂,是ConnectionProvider的客户。可能持有 一个可选的(第二级)数据缓存,可以在进程级别或集群级别保存以在 事物中重用的数据。可能持有事务之间重用的数据的缓存。
常用对象的定义
持久化对象(Persistent Object)及其集合(Collection) 生命期短促的单线程的对象,包含了持久化状态和商业功能。 它们可能是普通的JavaBeans,唯一特别的是他们现在从属于 且仅从属于一个Session。一旦Session被关闭,他们都将从 Session中取消联系,可以在任何程序层自由使用(比如,直 接作为传送到表现层的DTO,数据传输对象)。
4
2013-7-16
ORM模式
5
2013-7-16
Hibernate 介绍
• Hibernate 开源项目 成熟的解决方案 最受欢迎的ORM产品 (15,0000 downloads/month) 可扩展的 API 基于JDBC JBOSS EJB 3.0 所依赖的核心技术
25
2013-7-16
Mapping 文件
Class 属性介绍 • dynamic-update 生成Update SQL时,仅包含发生变动的字段 默认值: false • dynamic-insert 生成Insert SQL时,仅包含非空(null)字段 默认值: false • select-before-update 在执行Update操作之前,先执行一句select语句, 来决定是否执行 默认值:false • where 数据选择条件,如果只需要处理库表中某些特定数据的时候,可通 过此选项设定结果集限定条件。 如用户表中保存了全国所有用户的数据, 而我们的系统只是面向上海用户,则可指定where=”location=‟Shanghai‟"
在实际的软件开发中, 将面对对象的技术和关系型数据库一起使用是相当 麻烦和复杂的. Java types vs. SQL datatypes
3
2013-7-16
Hibernate 介绍
• Why ORM object/relationa mapping 提供了强壮的结构映射关系 大大减轻了日常的数据持久化编程任务 提供强大的事务处理机制
20
2013-7-16
获取 session
Session session = sessions.openSession(conn); Session session = sessions.openSession();
21
2013-7-16
获取 Transaction
transaction = session.beginTransaction();
24
2013-7-16
Mapping 文件
Class
<class name="ClassName" table="tableName" dynamic-update="true|false" dynamic-insert="true|false" select-before-update="true|false" where="arbitrary sql where condition" />
Session (org.hibernate.Session) 单线程,生命期短促的对象,代表应用程序和持久化层之间的一次对话。 封装了一个JDBC连接。也是Transaction的工厂。保存有必需的(第一 级)持久化对象的缓存,用于遍历对象图,或者通过标识符查找对象。 持有持久化对象的缓存。
13
2013-7-16
26
2013-7-16
Mapping 文件
ID <id name="propertyName" type="typename" column="column_name" unsaved-value="any|none|null|id_value" > <generator class=“generatorClass”/>---主键生成方式 </id> Generator: Increment, sequence, native, assigned
org.hibernate.dialect.Oracle9Dialect </property>
19
2013-7-16
获取 SessionFactory
SessionFactory sessions = cfg.buildSessionFactory();
Hibernate并不禁止你的程序实例化多个SessionFactory。 在你使用不止一个数据库的时候,这就有用了。
<property name="connection.password"> Study </property>
<property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver </property>
<property name="dialect">
临时对象(Transient Object)及其集合(Collection) 目前没有从属于一个Session的持久化类的实例。他们可能是 刚刚被程序实例化,还没有来得及被持久化。
14
2013-7-16
常用对象的定义
Transaction org.hibernate.Transaction (可选) 单线程,生命期短促的对象,应用程序用它来 表示一批工作的原子操作。是底层的JDBC,JTA或者 CORBA事务的抽象。一个Session某些情况下可能跨越多 个Transaction 事务。 ConnectionProvider org.hibernate.connection.ConnectionProvider (可选)JDBC连接的工厂和池。从底层的Datasource或 者 DriverManager抽象而来。对应用程序不可见,但可以 被开发者扩展/实现。 TransactionFactory org.hibernate.transaction.TransactionFactory (可选)事务实例的工厂。对应用程序不可见,但可以被 开发者扩展/实现
属性名 hibernate.connection.driver_class hibernate.connection.url hibernate.connection.username hibernate.connection.password hibernate.connection.pool_size
23
持久化类的特征: JavaBean 的规格 没有参数的构造函数 属性的访问方法 尽量使用代理主键
2013-7-16
Mapping 文件
<hibernate-mapping> < class name="com.isoftstone.javasource.course" table="courses“ > < id name="id" column="courseid" type="integer“ unsaved-value="null“ > <generator class="assigned"/> </id> <property name="name" type="string" column="name" /> <property name="createtime" type="java.util.Date" column="CREATE_TIME" /> </class> </hibernate-mapping>
15
2013-7-16
持久化概念
16
2013-7-16
Configuration 配置
可编程配置方式 org.hibernate.cfg.Configuration的一个实例代表了应用程序中所 有的Java类到SQL数据库的映射的集合。Configuration用于构造 一个(不可变的)SessionFactory。这些映射是从一些XML映射文 件中编译得来 1 Configuration cfg = new Configuration() .addFile("Item.hbm.xml") .addFile("Bid.hbm.xml"); 老式的配置方式 不推荐
2
Configuration cfg = new Configuration(); cfg.configure( "/ hibernate.cfg.xml" ); 推荐使用第二种方式
17
2013-7-16
Hibernate JDBC 属性
这些信息存放到 Hibernate.cfg.xml 文件中 用途 Jdbc 驱动类 jdbc URL
Hibernate
2013-7-16
Hibernate 介绍
• • • • • •
什么是 ORM ? 为什么我们要使用 Hibernate ? Hibernate 数据类型 Hibernate 基本语法 Hibernate 数据关联 HQL 语法
2
2013-7-16
Hibernate 介绍
•
结构性混乱