资源预览内容
第1页 / 共42页
第2页 / 共42页
第3页 / 共42页
第4页 / 共42页
第5页 / 共42页
第6页 / 共42页
第7页 / 共42页
第8页 / 共42页
第9页 / 共42页
第10页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
目录Hibernate简介Hibernate基本配置基本实体类映射高级实体类映射HQL语言实例设计课后作业目录Hibernate简介Hibernate基本配置基本实体类映射高级实体类映射HQL语言实例设计课后作业Hibernate简介Hibernate是一个开放源代码的对象关系映射 (ORM)框架,它对JDBC进行了非常轻量级的对象 封装,使得Java程序员可以随心所欲的使用对象 编程思维来操纵数据库。Hibernate可以应用在任 何使用JDBC的场合,既可以在Java的客户端程序 使用,也可以在Servlet/JSP的Web应用中使用,最 具革命意义的是,Hibernate可以在应用EJB的Java EE架构中取代CMP(Container-Managed Persistence),完成数据持久化的重任。Hibernate简介Hibernate的核心接口一共有5个,分别为:Session 、SessionFactory、Transaction、Query和 Configuration。这5个核心接口在任何开发中都会 用到。通过这些接口,不仅可以对持久化对象进 行存取,还能够进行事务控制。下面对这五个核 心接口分别加以介绍。Hibernate简介Session接口:Session接口负责执行被持久化对象 的CRUD操作(CRUD的任务是完成与数据库的交 流,包含了很多常见的SQL语句。)。但需要注意 的是Session对象是非线程安全的。同时, Hibernate的session不同于JSP应用中的HttpSession 。这里当使用session这个术语时,其实指的是 Hibernate中的session,而以后会将HttpSesion对象 称为用户session。Hibernate简介SessionFactory接口:SessionFactory接口负责初始 化Hibernate。它充当数据存储源的代理,并负责 创建Session对象。这里用到了工厂模式。需要注 意的是SessionFactory并不是轻量级的,因为一般 情况下,一个项目通常只需要一个SessionFactory 就够,当需要操作多个数据库时,可以为每个数 据库指定一个SessionFactory。Hibernate简介Configuration接口:Configuration接口负责配置并 启动Hibernate,创建SessionFactory对象。在 Hibernate的启动的过程中,Configuration类的实例 首先定位映射文档位置、读取配置,然后创建 SessionFactory对象。Hibernate简介Transaction接口:Transaction接口负责事务相关的 操作。它是可选的,开发人员也可以设计编写自 己的底层事务处理代码。Hibernate简介Query和Criteria接口:Query和Criteria接口负责执 行各种数据库查询。它可以使用HQL语言或SQL 语句两种表达方式。目录Hibernate简介Hibernate基本配置基本实体类映射高级实体类映射HQL语言实例设计课后作业Hibernate基本配置使用Java属性文件加编码方式配置使用XML文件配置(hibernate.cfg.xml)配置hibernate.cfg.xml目录Hibernate简介Hibernate基本配置基本实体类映射高级实体类映射HQL语言实例设计课后作业基本实体类映射XML映射文件映射注释映射注释JPA是EJB3规范中负责对象持久化的应用程序编 程接口,它定义一系列的注释。这些注释大体可 分为:类级别注释、方法级别注释、字段级别注 释。给实体类添加适当的注释可以在程序运行时 告诉Hibernate如何将一个实体类保存到数据库中 以及如何将数据以对象的形式从数据库中读取出 来。映射注释目前有两种注释方案可以确定对象与表格之间的 对应关系:一种是注释实体类的属性字段(字段 级别注释),成为字段访问方式(field access mode);另一种是注释实体类的属性访问方法( 方法级别注释),称为属性访问方式(property access mode)。映射注释注释字段映射注释注释getter方法基本映射Entity 映射实体类Id 映射生成主键Table 映射表格Column 映射表格列Transient 定义暂态属性Entity与Table Entity(name=“EntityName“) 必须 ,name 为可选 , 对应数据库中一的个表Table(name=“,catalog=“,schema=“) 可选 , 通常和 Entity 配合使用 , 只能标注在实体的 class 定义处 , 表示实体对应的数据库表的信息 name: 可选 , 表示表的名称 . 默认地 , 表名和实体名称一致 , 只有在不一致的情况下才需要指定表名 catalog: 可选 , 表示 Catalog 名称 , 默认为 Catalog(“). schema: 可选 , 表示 Schema 名称 , 默认为 Schema(“”).id id 必须 id 定义了映射到数据库表的主键的属性 , 一个实体只 能有一个属性被映射为主键 . 置于 getXxxx() 前 .GeneratedValue(strategy=GenerationType,generator=“) 可选 strategy: 表示主键生成策略 , 有 AUTO,INDENTITY,SEQUENCE 和 TABLE 4 种 , 分别表 示让 ORM 框架自动选择 id根据数据库的 Identity 字段生成 , 根据数据库表的 Sequence 字段生成 , 以有根据一个额外的表生成主键 , 默 认为 AUTO generator: 表示主键生成器的名称 , 这个属性通常和 ORM 框架相关 , 例如 ,Hibernate 可以指定 uuid 等主键生成方式 示例 : Id GeneratedValues(strategy=StrategyType.SEQUENCE) public int getPk() return pk; ColumnColumn 可选 Column 描述了数据库表中该字段的详细定义 , 这对于根 据 JPA 注解生成数据库表结构的工具非常有作用 . name: 表示数据库表中该字段的名称 , 默认情形属性名称 一致 nullable: 表示该字段是否允许为 null, 默认为 true unique: 表示该字段是否是唯一标识 , 默认为 false length: 表示该字段的大小 , 仅对 String 类型的字段有效 insertable: 表示在 ORM 框架执行插入操作时 , 该字段是否 应出现 INSETRT 语句中 , 默认为 true Columnupdateable: 表示在 ORM 框架执行更新操作时 , 该字段是否应该出现 在 UPDATE 语句中 , 默认为 true. 对于一经创建就不可以更改的字段 , 该属性非常有用 , 如对于 birthday 字段 . columnDefinition: 表示该字段在数据库中的实际类型 . 通常 ORM 框架 可以根据属性类型自动判断数据库中字段的类型 , 但是对于 Date 类型 仍无法确定数据库中字段类型究竟是 DATE,TIME 还是 TIMESTAMP. 此外 ,String 的默认映射类型为 VARCHAR, 如果要将 String 类型映射 到特定数据库的 BLOB 或 TEXT 字段类型 , 该属性非常有用 . 示例 : Column(name=“BIRTH“,nullable=“false“,columnDefinition=“DATE“) public String getBithday() return birthday; Transient Transient 可选 Transient 表示该属性并非一个到数据库表的字段的映射 ,ORM 框架 将忽略该属性 . 如果一个属性并非数据库表的字段映射 , 就务必将其标示为 Transient, 否则 ,ORM 框架默认其注解为 Basic 示例 : / 根据 birth 计算出 age 属性 Transient public int getAge() return getYear(new Date() - getYear(birth); 目录Hibernate简介Hibernate基本配置基本实体类映射高级实体类映射HQL语言实例设计课后作业高级实体类映射关联类映射映射集合关联类映射ManyToOne 多对一关联(单向或双向)OneToOne 一对一关联(单向或双向)OneToMany 一对多关联(单向或双向)ManyToMany 多对多关联(单向或双向)ManyToOneManyToOne(fetch=FetchType,cascade=CascadeType ) 可选 ManyToOne 表示一个多对一的映射 , 该注解标注的属性通常是数 据库表的外键 optional: 是否允许该字段为 null, 该属性应该根据数据库表的外键约 束来确定 , 默认为 true fetch: 表示抓取策略 , 默认为 FetchType.EAGER cascade: 表示默认的级联操作策略 , 可以指定为 ALL,PERSIST,MERGE,REFRESH 和 REMOVE 中的若干组合 , 默 认为无级联操作 targetEntity: 表示该属性关联的实体类型 . 该属性通常不必指定 ,ORM 框架根据属性类型自动判断 targetEntity. ManyToOne示例 : / 订单 Order 和用户 User 是一个 ManyToOne 的关系 / 在 Order 类中定义 ManyToOne() JoinColumn(name=“USER“) public User getUser() return user; JoinColumn JoinColumn 可选 JoinColumn 和 Column 类似 , 介量描述的不是一个简单字段 , 而一 一个关联字段 , 例如 . 描述一个 ManyToOne 的字段 . name: 该字段的名称 . 由于 JoinColumn 描述的是一个关联字段 , 如 ManyToOne, 则默认的名称由其关联的实体决定 . 例如 , 实体 Order 有一个 user 属性来关联实体 User, 则 Order 的 user 属性为一个外键 , 其默认的名称为实体 User 的名称 + 下划线 + 实体 User 的主键名称 示例 : 见 ManyToOne OneToManyOneToMany(fetch=FetchType,cascade=CascadeType) 可选 OneToMany 描述一个一对多的关联 , 该属性应该为集体类型 , 在数据库中 并没有实际字段 . fetch: 表示抓取策略 , 默认为 FetchType.LAZY, 因为关联的多个对象通常不必 从数据库预先读取到内存 casca
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号