http www sztz org 1 ORM l ORM

  • Slides: 55
Download presentation
http: //www. sz-tz. org 1

http: //www. sz-tz. org 1

ORM 框架原理 l 不使用ORM框架 Java Application JDBC编程,SQL语句,对象封装 Data Base 手动 l 使用ORM框架 配置框架 ORM

ORM 框架原理 l 不使用ORM框架 Java Application JDBC编程,SQL语句,对象封装 Data Base 手动 l 使用ORM框架 配置框架 ORM API Java Application 手动 JDBC编程 SQL语句 对象封装 ORM Framewrok 自动 10 Data Base

ORM 框架品牌 ORM 框架 Hibernate 开源ORM框架 广泛使用 (学习目标) JPA My. Batis 别名i. BATIS, 开源半自动ORM框架

ORM 框架品牌 ORM 框架 Hibernate 开源ORM框架 广泛使用 (学习目标) JPA My. Batis 别名i. BATIS, 开源半自动ORM框架 (知道) 11 Java Persistence API (知道)

其他ORM 框架品牌 Active. JDBC - Java implementation of Active Record pattern, inspired by Ruby

其他ORM 框架品牌 Active. JDBC - Java implementation of Active Record pattern, inspired by Ruby on Rails Cayenne, Apache, open source for Java Kodo, commercial implementation of both Java Data Objects and Java Persistence API Torque, an object-relational mapper for Java Athena Framework, open source Java ORM, native support for multitenancy Saa. S and remoting to Adobe Flex Carbonado, open source framework, backed by Berkeley DB or JDBC Ebean, open source ORM framework Eclipse. Link, Eclipse persistence platform Enterprise Objects Framework, Mac OS X/Java, part of Apple Web. Objects i. BATIS, maintained by ASF, inactive as of 2010 Java Data Objects (JDO) Java Object Oriented Querying (j. OOQ) Data. Nucleus, open source JDO and JPA implementation JPOX, open source JDO 2 reference implementation Open. JPA, Apache, open source, supports JPA API ORMLite, lightweight open source framework supporting JDBC and Android Top. Link by Oracle Quick. DB ORM, open source ORM framework (GNU LGPL) Object. DB 12

Hibernate 发展历史 2010 2001 Hibernate 1. 0 2003 Hibernate 2. 0 随后加入 JBoss 实现JPA

Hibernate 发展历史 2010 2001 Hibernate 1. 0 2003 Hibernate 2. 0 随后加入 JBoss 实现JPA 2. 0规范 2005 Hibernate 3. 0 2011 Hibernate 4. 0 Interceptor multi-tenancy Service. Registry 支持Annotation 14

下载 Hibernate http: //hibernate. org/orm/ 16

下载 Hibernate http: //hibernate. org/orm/ 16

ORM 配置 • XML配置 <hibernate-mapping> <class name="events. Event" table="EVENTS"> <id name="id" column="id"> <generator class="native"/>

ORM 配置 • XML配置 <hibernate-mapping> <class name="events. Event" table="EVENTS"> <id name="id" column="id"> <generator class="native"/> </id> <property name="birthday" type="timestamp"/> <property name="title"/> </class> ORM配置信息, 写在一个XML文件中 </hibernate-mapping> • Annotation配置 @Entity public class Event { private Long id; private String title; private Date date; @Id @Generated. Value public Long get. Id() { return id; } private void set. Id(Long id) {this. id = id; } public Date get. Date() {return date; } public void set. Date(Date date) {this. date = date; } public String get. Title() {return title; } public void set. Title(String title) {this. title = title; } } 20 ORM配置信息, 写在实体类源代码中

Hibernate 配置信息 数据库连接信息 driver, url, username, password Java Application 属性(如: 方言, 显示 sql, 生成表…等)

Hibernate 配置信息 数据库连接信息 driver, url, username, password Java Application 属性(如: 方言, 显示 sql, 生成表…等) Hibernate ORM 配置 以上信息都可以配置在hibernate主配置文件中 29 Data Base

Data. Source 数据源 Data. Source Java application Connection Pool Connection 1 被占用 Connection 1

Data. Source 数据源 Data. Source Java application Connection Pool Connection 1 被占用 Connection 1 Connection 2 被占用 Connection 2 Data Base …… Connection N Data. Source 可被看成是一个创建和维护 Connection 的 厂 30

Data. Source 数据源-2 Hibernate 内建的数据源无法用于产品用途 可以使用 c 3 p 0 数据源进行替换! 步骤如下: 1)加入hibernate-c 3

Data. Source 数据源-2 Hibernate 内建的数据源无法用于产品用途 可以使用 c 3 p 0 数据源进行替换! 步骤如下: 1)加入hibernate-c 3 p 0 -*. jar、c 3 p 0 -*. jar 这两个jar包; 2) <!-- 声明使用 c 3 p 0数据源 (必选)--> <property name="hibernate. connection. provider_class"> org. hibernate. c 3 p 0. internal. C 3 P 0 Connection. Provider </property> <!-- 其他 c 3 p 0 属性(可选)--> <property name="hibernate. c 3 p 0. min_size">5</property> <property name="hibernate. c 3 p 0. max_size">20</property> <property name="hibernate. c 3 p 0. timeout">300</property> <property name="hibernate. c 3 p 0. max_statements">50</property> <property name="hibernate. c 3 p 0. idle_test_period">3000</property> 31

Dialect 方言 SQLServer 方 Oracle 方言 My. SQL 言 方言 Q S My Hibernate

Dialect 方言 SQLServer 方 Oracle 方言 My. SQL 言 方言 Q S My Hibernate ORM L方 言 Oracle 方言 SQ LS 方 erver 言 需要连接哪个数据库,就选择该数据库的方言 32

log 4 j. properties 示例 #define log level and output type. log 4 j.

log 4 j. properties 示例 #define log level and output type. log 4 j. root. Logger=info, console ### direct log messages to stdout ### log 4 j. appender. console=org. apache. log 4 j. Console. Appender log 4 j. appender. console. Target=System. out log 4 j. appender. console. layout=org. apache. log 4 j. Pattern. Layout log 4 j. appender. console. layout. Conversion. Pattern=%d{ABSOLUTE} %5 p %c{1}: %L - %m%n 框架类项目中都会使用 log 4 j,此文件编辑后一 般不再更改. 35

Hibernate API 3. x Configuration Hibernate的主配置信息, 负责解析 hibernate. cfg. xml Session. Factory Session 厂类,

Hibernate API 3. x Configuration Hibernate的主配置信息, 负责解析 hibernate. cfg. xml Session. Factory Session 厂类, 用于创建session Session Transaction Query 基于 HQL 的查询 等同于数据库连接,增加缓存机制 事务控制对象, 用于提交或回滚事务 Criteria 基于约束条件的查询 36

Session. Factory 关系示意图 Configuration Session. Factory Session Transaction 内存空间 Session Transaction 38 Data. Base

Session. Factory 关系示意图 Configuration Session. Factory Session Transaction 内存空间 Session Transaction 38 Data. Base

Hibernate API 4. x Configuration Service. Registry 4. X 服务注册类, 用于注册各项服务 Session. Factory Session

Hibernate API 4. x Configuration Service. Registry 4. X 服务注册类, 用于注册各项服务 Session. Factory Session Transaction Query Criteria 39

Session. Factory 示例代码 v 3. x v 4. x 41

Session. Factory 示例代码 v 3. x v 4. x 41

Session API 43

Session API 43

XML Mapping File 无需在实体类中写 Annotation 注解,改为写XML文件。 文件名:实体类名. hbm. xml,比如: User. hbm. xml 文件路径: 与实体类同路径即可。

XML Mapping File 无需在实体类中写 Annotation 注解,改为写XML文件。 文件名:实体类名. hbm. xml,比如: User. hbm. xml 文件路径: 与实体类同路径即可。 <? xml version="1. 0"? > <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate Mapping DTD 3. 0//EN" "http: //www. hibernate. org/dtd/hibernate-mapping-3. 0. dtd"> <hibernate-mapping package="com. tz. hibernate"> <!-- 1. 将类与表映射 --> <class name="User" table="tbl_user"> <!-- 2. 1 将类的主键属性与表的PK映射 --> <id name="id" column="user_id"> <generator class="identity"/> </id> <!-- 2. 2 将类属性与表字段映射 --> <property name="name" column="user_name" length="50" not-null="true"/> <property name="age" column="user_age"/> </class> </hibernate-mapping> 53

Q&A http: //www. sz-tz. org 55

Q&A http: //www. sz-tz. org 55