Hibernate开发讲义JPA注解.ppt_第1页
Hibernate开发讲义JPA注解.ppt_第2页
Hibernate开发讲义JPA注解.ppt_第3页
Hibernate开发讲义JPA注解.ppt_第4页
Hibernate开发讲义JPA注解.ppt_第5页
免费预览已结束,剩余37页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录,Hibernate简介 Hibernate基本配置 基本实体类映射 高级实体类映射 HQL语言 实例设计 课后作业,目录,Hibernate简介 Hibernate基本配置 基本实体类映射 高级实体类映射 HQL语言 实例设计 课后作业,Hibernate简介,Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibern

2、ate可以在应用EJB的Java EE架构中取代CMP(Container-Managed Persistence),完成数据持久化的重任。,Hibernate简介,Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。,Hibernate简介,Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了

3、很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。,Hibernate简介,SessionFactory接口:SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个Sessi

4、onFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。,Hibernate简介,Configuration接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。,Hibernate简介,Transaction接口:Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。,Hibernate简介,Query

5、和Criteria接口:Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。,目录,Hibernate简介 Hibernate基本配置 基本实体类映射 高级实体类映射 HQL语言 实例设计 课后作业,Hibernate基本配置,使用Java属性文件加编码方式配置 使用XML文件配置(hibernate.cfg.xml),配置hibernate.cfg.xml,目录,Hibernate简介 Hibernate基本配置 基本实体类映射 高级实体类映射 HQL语言 实例设计 课后作业,基本实体类映射,XML映射文件 映射注释,映射注释,JPA是EJB

6、3规范中负责对象持久化的应用程序编程接口,它定义一系列的注释。这些注释大体可分为:类级别注释、方法级别注释、字段级别注释。给实体类添加适当的注释可以在程序运行时告诉Hibernate如何将一个实体类保存到数据库中以及如何将数据以对象的形式从数据库中读取出来。,映射注释,目前有两种注释方案可以确定对象与表格之间的对应关系:一种是注释实体类的属性字段(字段级别注释),成为字段访问方式(field access mode);另一种是注释实体类的属性访问方法(方法级别注释),称为属性访问方式(property access mode)。,映射注释,注释字段,映射注释,注释getter方法,基本映射,E

7、ntity 映射实体类 Id 映射生成主键 Table 映射表格 Column 映射表格列 Transient 定义暂态属性,Entity与Table,Entity(name=EntityName) 必须 ,name 为可选 , 对应数据库中一的个表 Table(name=,catalog=,schema=) 可选 , 通常和 Entity 配合使用 , 只能标注在实体的 class 定义处 , 表示实体对应的数据库表的信息 name: 可选 , 表示表的名称 . 默认地 , 表名和实体名称一致 , 只有在不一致的情况下才需要指定表名 catalog: 可选 , 表示 Catalog 名称 ,

8、 默认为 Catalog(). schema: 可选 , 表示 Schema 名称 , 默认为 Schema(“”).,id,id 必须 id 定义了映射到数据库表的主键的属性 , 一个实体只能有一个属性被映射为主键 . 置于 getXxxx() 前 . GeneratedValue(strategy=GenerationType,generator=) 可选 strategy: 表示主键生成策略 , 有 AUTO,INDENTITY,SEQUENCE 和 TABLE 4 种 , 分别表示让 ORM 框架自动选择,id,根据数据库的 Identity 字段生成 , 根据数据库表的 Sequen

9、ce 字段生成 , 以有根据一个额外的表生成主键 , 默认为 AUTO generator: 表示主键生成器的名称 , 这个属性通常和 ORM 框架相关 , 例如 ,Hibernate 可以指定 uuid 等主键生成方式 示例 : Id GeneratedValues(strategy=StrategyType.SEQUENCE) public int getPk() return pk; ,Column,Column 可选 Column 描述了数据库表中该字段的详细定义 , 这对于根据 JPA 注解生成数据库表结构的工具非常有作用 . name: 表示数据库表中该字段的名称 , 默认情形属性

10、名称一致 nullable: 表示该字段是否允许为 null, 默认为 true unique: 表示该字段是否是唯一标识 , 默认为 false length: 表示该字段的大小 , 仅对 String 类型的字段有效 insertable: 表示在 ORM 框架执行插入操作时 , 该字段是否应出现 INSETRT 语句中 , 默认为 true,Column,updateable: 表示在 ORM 框架执行更新操作时 , 该字段是否应该出现在 UPDATE 语句中 , 默认为 true. 对于一经创建就不可以更改的字段 , 该属性非常有用 , 如对于 birthday 字段 . column

11、Definition: 表示该字段在数据库中的实际类型 . 通常 ORM 框架可以根据属性类型自动判断数据库中字段的类型 , 但是对于 Date 类型仍无法确定数据库中字段类型究竟是 DATE,TIME 还是 TIMESTAMP. 此外 ,String 的默认映射类型为 VARCHAR, 如果要将 String 类型映射到特定数据库的 BLOB 或 TEXT 字段类型 , 该属性非常有用 . 示例 : Column(name=BIRTH,nullable=false,columnDefinition=DATE) public String getBithday() return birthda

12、y; ,Transient,Transient 可选 Transient 表示该属性并非一个到数据库表的字段的映射 ,ORM 框架将忽略该属性 . 如果一个属性并非数据库表的字段映射 , 就务必将其标示为 Transient, 否则 ,ORM 框架默认其注解为 Basic 示例 : / 根据 birth 计算出 age 属性 Transient public int getAge() return getYear(new Date() - getYear(birth); ,目录,Hibernate简介 Hibernate基本配置 基本实体类映射 高级实体类映射 HQL语言 实例设计 课后作业,

13、高级实体类映射,关联类映射 映射集合,关联类映射,ManyToOne 多对一关联(单向或双向) OneToOne 一对一关联(单向或双向) OneToMany 一对多关联(单向或双向) ManyToMany 多对多关联(单向或双向),ManyToOne,ManyToOne(fetch=FetchType,cascade=CascadeType ) 可选 ManyToOne 表示一个多对一的映射 , 该注解标注的属性通常是数据库表的外键 optional: 是否允许该字段为 null, 该属性应该根据数据库表的外键约束来确定 , 默认为 true fetch: 表示抓取策略 , 默认为 Fetc

14、hType.EAGER cascade: 表示默认的级联操作策略 , 可以指定为 ALL,PERSIST,MERGE,REFRESH 和 REMOVE 中的若干组合 , 默认为无级联操作 targetEntity: 表示该属性关联的实体类型 . 该属性通常不必指定 ,ORM 框架根据属性类型自动判断 targetEntity.,ManyToOne,示例 : / 订单 Order 和用户 User 是一个 ManyToOne 的关系 / 在 Order 类中定义 ManyToOne() JoinColumn(name=USER) public User getUser() return user

15、; ,JoinColumn,JoinColumn 可选 JoinColumn 和 Column 类似 , 介量描述的不是一个简单字段 , 而一一个关联字段 , 例如 . 描述一个 ManyToOne 的字段 . name: 该字段的名称 . 由于 JoinColumn 描述的是一个关联字段 , 如 ManyToOne, 则默认的名称由其关联的实体决定 . 例如 , 实体 Order 有一个 user 属性来关联实体 User, 则 Order 的 user 属性为一个外键 , 其默认的名称为实体 User 的名称 + 下划线 + 实体 User 的主键名称 示例 : 见 ManyToOne,O

16、neToMany,OneToMany(fetch=FetchType,cascade=CascadeType) 可选 OneToMany 描述一个一对多的关联 , 该属性应该为集体类型 , 在数据库中并没有实际字段 . fetch: 表示抓取策略 , 默认为 FetchType.LAZY, 因为关联的多个对象通常不必从数据库预先读取到内存 cascade: 表示级联操作策略 , 对于 OneToMany 类型的关联非常重要 , 通常该实体更新或删除时 , 其关联的实体也应当被更新或删除 例如 : 实体 User 和 Order 是 OneToMany 的关系 , 则实体 User 被删除时 ,

17、 其关联的实体 Order 也应该被全部删除 示例 : OneToMany(cascade=CascadeType.ALL) public List getOrders() return orders; ,OneToOne,OneToOne(fetch=FetchType,cascade=CascadeType) 可选 OneToOne 描述一个一对一的关联 fetch: 表示抓取策略 , 默认为 FetchType.LAZY cascade: 表示级联操作策略 示例 : OneToOne(fetch=FetchType.LAZY) public Blog getBlog() return b

18、log; , ManyToMany,ManyToMany 可选 ManyToMany 描述一个多对多的关联 . 多对多关联上是两个一对多关联 , 但是在 ManyToMany 描述中 , 中间表是由 ORM 框架自动处理 targetEntity: 表示多对多关联的另一个实体类的全名 , 例如 :package.Book.class mappedBy: 表示多对多关联的另一个实体类的对应集合属性名称 示例 : User 实体表示用户 ,Book 实体表示书籍 , 为了描述用户收藏的书籍 , 可以在 User 和 Book 之间建立 ManyToMany 关联,映射集合,Collection 集

19、合类中最基本的接口,JDK没有直接实现Collection接口的类。 Set Collection的扩展子接口,增加了限制,集合内不允许存在两个一样的对象,是无序的。 List Collection的扩展子接口,为集合添加了序列信息。List集合类将对象以某种用户定义的顺序保存起来。 Map 一个单独的集合接口,以“键值”(key to value)的方式保存对象。,目录,Hibernate简介 Hibernate基本配置 基本实体类映射 高级实体类映射 HQL语言 实例设计 课后作业,HQL语言,参考Hibernate3.2官方中文参考手册 参考Hibernate 3.3.2.GA参考文档,目录,Hibernate简介 H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论