hibernate讲义(传智播客)
传智播客hibernate教程
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
基本概念和CURD
Java代码 代码 1.初始化代码 只做一次 初始化代码(只做一次 初始化代码 只做一次)
Configuration cfg = new Configuration(); cfg.configure(“config.cfg.xml”); 也可以通过cfg.setProperty设置属性。 SessionFactory sessionFactory = cfg.buildSessionFactory();
Criteria
Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式: Criteria crit = session.createCriteria(DomainClass.class); 简单属性条件如:criteria.add(Restrictions.eq(propertyName, value)), criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
关联映射
多对一(Employee - Department) 一对多(Department-Employee) 一对一(room - door) 多对多(teacher - student) 组件映射(User-Name) 集合映射(set, list, map, bag) inverse和cascade(Employee – Department)
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Hibernate总结培训讲学
H i b e r n a t e总结Hibernate总结HIBERNATE总结 (2)一、HIBERNATE框架及ORM (3)1.1H IBERNATE的定义: (3)1.2ORM的定义: (3)1.3H IBERNATE框架的优点: (3)1.4H IBERNATE 框架的缺点: (4)1.5H IBERNATE 中J AVA 对象的三种状态 (4)2.3三种状态转换的详解 (6)二、HQL实用技术 (7)2.1编写HQL语句 (7)2.2执行HQL语句 (8)2.3在HQL查询语句中绑定参数 (8)三、HIBERNATE关联映射 (10)3.1多对一映射关联(MANY-TO-ONE) (10)3.2一对多映射关联(ONE-TO-MANY) (10)3.3一对一映射关联 (11)3.4多对多关联(MANY-TO-MANY) (12)四、HIBERNATE缓存机制 (13)4.1缓存的概念: (13)4.2H IBERNATE缓存分类: (13)4.3一级缓存详解 (14)4.4二级缓存详解 (14)一、Hibernate框架及ORM1.1 Hibernate的定义:Hibernate是数据持久化工具,是一个开放源代码的对象关系映射框架。
Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供面向对象的数据访问API。
1.2 ORM的定义:ORM全称“Object/Relation Mapping”即对象关系映射,是一种数据持久化技术。
它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过JavaBean 对象去操作数据库表中的数据。
(此图暂时省略)1.3 Hibernate框架的优点:➢Hibernate 功能强大,是Java应用与关系数据库之间的桥梁,较之JDBC操作数据库,代码量大大减少,提高了持久化代码的开发速度,降低了维护成本。
➢Hibernate 支持许多面向对象的特性,如组合、继承。
hibernate完美培训教程课件
hibernate完美培训教程
11
Hibernate核心接口
hibernate完美培训教程
12
Configuration
➢ 概述:Configuration 类负责管理Hibernate 的配置信息。它包括
hibernate.connection.url jdbc:mysql://localhost/hibernate
ername root
hibernate.connection.password ➢ 数据库连接池的配置-DBCP(App Server连接池首选)
如果是集合类型的属性,它的类型必须定义为集合的接口。例如: List、Set。
提供一个标识属性(identifier property)。如果没有该属性,一些 功能不起作用,比如:级联更新(Cascaded updates) Session.saveOrUpdate()。
hibernate完美培训教程
目录
一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳实践
hibernate完美培训教程
1
一、持久化层-O/R Mapping
primary key (name)
1:n/n:1 n:m
外键 关联表
)
继承
单表继承、具体表继承、
类表继承
hibernate完美培训教程
3
对象—关系数据库的不匹配范式
传智播客Hibernate课件
北京传智播客教育
—高级软件人才实作培训专家 ! Hibernate入门
9.通过id查询客户信息
北京传智播客教育
—高级软件人才实作培训专家 ! Hibernate入门
10. 查询所有的客户信息
北京传智播客教育
—高级软件人才实作培训专家 ! Hibernate入门
}
北京传智播客教育
—高级软件人才实作培训专家 ! Hibernate入门
3 创建对象-关系映射文件 Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射. 在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句 映射文件的扩展名为 .hbm.xml 这里Customer.hbm.xml文件
date
timestamp
BIRTHDAY
REGISTERED_TI ME
DATE
TIMESTAMP
汉语(java)
英语(hibernate)
北京传智播客教育
日语(sql)
—高级软件人才实作培训专家 ! Hibernate入门
北京传智播客教育
2 创建表和对应的javaBean文件(持久化类)
create table customer ( id int primary key, name varchar(12), age int, des text ) public class Customer { private private private private Integer id; String name; Integer age; String des;
char
boolean ng.String byte[]
character
传智播客Hibernate
—高级软件人才实作培训专家! Java对象持久化概述
软件模型
• 域模型:在软件的分析阶段创建概念模型,在
软件设计阶段创建域模型。 组成部分: 1.具有状态和行为的域对象。 2.域对象之间的关联。
北京传智播客教育
—高级软件人才实作培训专家! Java对象持久化概述
Hibernate API Hibernate配置文件
对象关系型映射
关系数据库
Customers表
北京传智播客教育
—高级软件人才实作培训专家! Hibernate入门
创建配置文件
hibernate.dialect=net.sf.hibernate.dialect.OracleDialect hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver hibernate.connection.url=jdbc:oracle:thin:peopres/peopres@127.0.0.1: 1521:oracle9 ername=peopres hibernate.connection.password=peopres hibernate.show_sql=true
北京传智播客教育
—高级软件人才实作培训专家! Hibernate入门
Hibernate初始化
•
访问Session接口
save() update() delete() load() find()
北京传智播客教育
—高级软件人才实作培训专家! Hibernate入门
—高级软件人才实作培训专家! Java对象持久化概述
应用程序的分层体系结构
Hibernate教程讲师用-23页精选文档
Hibernate教程前言1、 java对象持久化技术1.1 、hibernate是什么1.2、软件模型1.2.1、概念模型1.2.2、关系数据模型1.2.3、域模型1.2.4、域对象1.2.5、域对象之间的关系1.2.6、域对象的持久化概念提示:1.3、数据库访问模式1.3.1、ORM模式1.3.2、主动域对象模式1.3.3、JDO模式1.3.4、CMP模式一、数据源层-O/R Mapping主要介绍三层架构,如何分层?(逻辑上的分层,二个原则)数据层技术的选择:直接使用1.1、SQL/JDBC:优点:很多开发者熟悉关系数据库管理系统,理解SQL,也知道如何使用表和外键进行工作。
此外,他们可以始终使用众所周知并广泛使用的DAO设计模式对业务逻辑隐藏复杂的JDBC代码和不可移植的SQL。
缺点:为域中的每个类手工编写持续性代码的工作是非常可观的,特别是需要支持多种SQL方言时。
这项工作通常会消耗很大一部分的开发努力。
此外,当需求改变时,一个手工编码的解决方案总是需要更多的注意和维护努力。
1.2、序列化:Java有一个内建的持久化机制:序列化提供了将对象图(应用状态)写到字节流中的能力,然后它可能被持久化到文件或数据库中。
持久化也被Java的远程方法调用(RMI)使用来为复杂对象传递值语义。
持久化的另一种用法是在机器集群中跨节点复制应用状态。
缺点:很不幸,一个相互连接的对象图在序列化之后只能被当作一个整体访问,如果不反序列化整个流就不可能从流中取出任何数据。
这样,结果字节流肯定会被认为不适合进行任意的检索或聚合。
甚至不可能独立地访问或更新一个单独的对象或子图。
非常明显,因为当前特定的技术,序列化不适合于作为高并发性的Web和企业应用的持久化机制。
在特定的环境中它被作为桌面应用的适当的持久化机制。
1.3EJB entity beansEJB1.1实体Bean在实践中彻底地失败了。
EJB规范的设计缺陷阻碍了Bean管理的持续性(BMP)实体Bean有效地执行。
传智播客-jpa与hibernate(3)-继承映射-那一抹云-CSDN博客
传智播客-jpa与hibernate(3)-继承映射-那一抹云-CSDN博客传智播客-jpa与hibernate(3)-继承映射收藏Hibernate支持三种基本的继承映射策略:每个类分层结构一张表(table per class hierarchy),每个子类一张表(table per subclass),每个具体类一张表(table per concrete class),此外,Hibernate还支持第四种稍有不同的多态映射策略--隐式多态(implicit polymorphism) 。
这里只介绍前三种,最后一种请参阅相关文档。
代码示例为注解方式,配置方式请参阅文档。
每个类分层结构一张表(table per class hierarchy)也称单表策略,就是一棵继承树映射为一张表,或者说将一棵继承树里所有类的信息不重复地放到一张表里。
因为所有的父子类都在一张表里体现,所以还需要一个额外的字段以区分每条记录代表的具体的类别。
举例来说,有父类Employee(雇员),子类HE(钟点工),同级子类SE(正式员工);HE和SE的区别在于薪资,HE以时效计,字段为rate,SE以月薪计,字段为salary;还有一个字段etype作为具体类别信息的区分标识。
很明显,rate和salary是互斥的。
所以这两个字段应当允许为空,而且实际操作的时候必然会有一个字段列的冗余。
etype对于每个类别信息自身而言,也可以视为是一个冗余字段。
所以这个策略一般在父类的属性字段占总字段的权重大的时候较为适用。
示例代码:@Entity@Table(name="jpa_inherit_single_ess")@Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name="etype",discriminatorType=D iscriminatorType.STRING)@DiscriminatorValue(value="ee")public class Employee {...}@Entity@DiscriminatorValue(value="he")public class HE extends Employee {...}@Entity@DiscriminatorValue(value="se")public class SE extends Employee {...}NOTE: 查询的时候不是用entityManager.find(XXX.class, serialable)。
Hibernate-课件
自动透明映射:对象关系型数据库中表 不丢失数据库内的关联性,增加面向对象技术的继
承性和多态性 对关系数据库结构的简单改动不影响面向对象代码
部分
Web Technology
Hibernate Outline(1/2)
基于ORM的框架 基于关系数据库的面向对象数据持久层设计 提供Java类到数据库中表的映射 提供数据查询(HQL)和恢复机制
public void setId(String s) { id = s; } public void setLevel(int l) { level = l; } public void setSumAmount(double d) { sumAmount = d; } }
Web Technology
解耦合与持久层
什么是解耦合(Decoupling) 解耦合实例 DAO模式介绍 什么是持久层(Persistence Layer)
Web Technology
DAO模式介绍(1/2)
DAO (Data Access Object) = D+A+O - Data 实际数据库中的数据 - Accessor 实现数据访问与业务逻辑分离 - Domain Object 实现业务数据的对象化封装
stmt_promotion.executeQuery(); double ratio = 1; if(rset_promotion.next()) ratio = rset_promotion.getDouble(1); //计算最终支付金额 amount *= ratio;
Web Technology
解耦合实例——业务逻辑与DB访问未分离(5/6)
(全)最经典的hibernate教程从入门到精通PPT资料
小结
• 是一个主流的持久化框架 复杂的查询操作稍后介绍
<mapping resource="com/aptech/jb/entity/User.
• 在JDBC基础上进行分装 将程序数据在瞬时状态和持久状态之间转换的机制
<mapping resource="com/aptech/jb/entity/User. 通过映射文件保存映射信息
properties:Hibernate属性文件/Hibernate配置文件
用JDBC 持久数据
DB
Hiberante应用程序的结构
(1〕Application:运用 (2〕Persistent Object:持久化对象 〔3〕hibernate.properties:Hibernate 属性文件/Hibernate配置文件 (4〕XML Mapping:Hibernate映射文 件 (5〕Database:数据库
• 只需要少量代码就可以完成持久化工作 User user = (User)session.
datasource">java:/comp/env/pubs</property> <property name="session_factory_name">hibernate</property>
配置Hibernate关联自动加载区县对应的街道 (4〕XML Mapping:Hibernate映射文件
JDBC与Hibernate的比较
相同点: 两者都是JAVA的数据库操作中间件。 两者对于数据库进行直接操作的对象都不是
线程安全的,都需要及时关闭。 两者都可以对数据库的更新操作进行显式的
Hibernate讲义(1)
Hibernate讲义(1)--Hibernate入门Hibernate是一种强大高效的持久层查询服务器,它对JDBC进行了轻量级的封装,并以面向对象的思维方式,解决数据库的操作问题。
在基于MVC设计模式的Java Web应用中,Hibrenate可以作为应用的数据访问层。
1.1.1持久层与ORM数据持久化一般指将内存中的数据或对象存储到可长期保存的某种介质上,以使其比存活时间比创建该对象的进程时间要长。
在对数据或对象持久化后,可以重新获取并能保证在没有对其进行任何改动的情况下,与持久化之前的一样。
一般持久化的实现通过各种关系数据库来完成。
持久层就是专门负责持久化工作的逻辑层,由它统一与数据库层打交道。
持久层在数据存储器中负责存储或获取数据的一组类和组件,持久层必须包括一个业务领域实体的模型,在持久层中封装对数据库访问的细节,向业务逻辑公开接口。
对象-关系映射(Object/Relation Mapping,ORM)是随着面向对象的软件发方法发展而产生的,是为了解决面向对象与关系数据库存在的互不匹配现象而产生的技术。
对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。
ORM通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
本质上就是将数据表映射为对象类,从一种形式转换到另外一种形式。
1.1.2Hibernate3 简介Hibernate是非常优秀、成熟的O/R Mapping框架,它提供了强大、高性能的Java对象和关系数据的持久化和查询功能。
Hibernate作为持久层的一项实现技术,运用DAO(Data Access Object)设计模式来实现对象和关系数据库之间的映射,对JDBC进行了轻量级的对象封装,在Java应用和关系数据库之间建立桥梁,Java程序员可以完全使用面向对象的编程思维来操作关系数据库。
Hibernate为Java 程序员提供了面向对象的API和接口来操纵数据库,从而避免了在业务逻辑中嵌入大量的JDBC访问和事物控制代码。
hibernate课件
HiberHibernate框架简化了java应用程序与数据库交互的开发。
Hibernate是一个开源,轻量级的ORM(对象关系映射)工具。
对象--持久化(持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等--持久化是将程序数据在持久状态和瞬时状态间转换的机制)理解Hibernate:1、对JDBC的进一步封装 2、三层架构:表示层,业务层,持久层(持久层框架) 3、开源的对象关系映射框架(关系数据库到对象的映射)核心:1、Configuration接口:负责配置并启动Hibernate(实例是一个启动期对象,SessionFactory建立后被丢弃)--加载主配置文件2、Sessionfactory接口:初始化Hibernate--创建session3、Session接口:持久化对象的crud(数据库操作)4、Transaction接口:负责事务5、Query,Criteria:执行数据库查询优/劣:1、对象化的思维操作数据库2、Hibernate做了持久层的封装,代码具有复用性(移植性)3、没有入侵性(轻量级)4、提供了session缓存和二级缓存,对于不需要进行复杂查询的系统,性能有提升1、使用数据库特性语句,调优难2、不适合复杂sql查询3、不适合大量的聚焦操作(存储过程)--大批量数据更新4、系统存在大量攻击查询教程:Hibernate 架构Hibernatjar包xml:1、创建持久化类——2、创建持久化类的映射文件*.hbm.xml——3、创建配置文件hibernate.cfg.xml<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.yiibai.mypackage.Employee"table="emp1000"><id name="id"><generator class="assigned"></generator></id><property name="firstName"></property><property name="lastName"></property></class></hibernate-mapping><?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost:3306/test</property><property name="ername">root</property><property name="connection.password">123456</property><propertyname="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property><property name="show_sql">true</property><mapping resource="employee.hbm.xml"/></session-factory></hibernate-configuration>//创建索引或存储对象//creating configuration objectConfiguration cfg=new Configuration();cfg.configure("hibernate.cfg.xml");//populates the data of the configuration file//creating seession factory objectSessionFactory factory=cfg.buildSessionFactory();//creating session objectSession session=factory.openSession();//creating transaction objectTransaction t=session.beginTransaction();Hibernate注释:Hibernate注释基于JPA 2规范,并支持所有功能,所有JPA注释都在javax.persistence.*包中定义.优点:不需要创建映射(*.hbm.xml)文件直接创建对象关联。
Hibernate讲义(3)
Hibernate讲义3-----Hibernate 3检索简介HQL(Hibernate Query Language)供了非常强大的查询功能,是完全面向对象的查询语句,具备继承、多态和关联等特性。
QBC(Query By Criteria)是Hibernate提供的一个查询接口,这种方式把查询条件封装为一个Criteria对象。
SQL(Native SQL Query)是直接使用本地数据库(如Oracle)的SQL语言进行查询。
在MS SQL Server中创建数据库hibdb,并在其中创建用户表Userinfo,Userinfo表的数据结构如图6-1所示。
图6-1 数据表Userinfo的数据结构其中的用户信息如图6-2所示。
图6-2 数据表Userinfo的数据在工程hibernate3中创建包chap6.hibernate,创建与数据表Userinfo对应的持久化类User.java,其中包括属性的定义及属性相应的set和get方法,类的主要代码如下:package chap6.hibernate;//User类public class User {private int id; //用户标识符private String username; //用户名private String userpass; //用户密码private int age; //用户年龄private String email; //用户邮箱private String telephone; //用户联系电话……省略属性相应的set和get方法。
}1.1HQL实用技术HQL查询依赖于Query类,每个Query实例对应于一个查询对象,使用HQL查询一般按以下步骤进行:⑴获取Hibernate Session对象;⑵编写HQL语句;⑶以HQL语句为参数,调用Session的createQuery方法创建查询对象;⑷若HQL语句包含参数,则调用Query的setXXX方法为参数赋值;⑸调用Query对象的list等方法遍历查询结果。
传智播客佟刚hibernate检索策略和检索方式
• 关系数据库数据
Prepared by TongGang
类级别的检索策略
• 类级别可选的检索策略包括立即检索和延迟检索, 默认为延迟 检索
– 立即检索: 立即加载检索方法指定的对象 – 延迟检索: 延迟加载检索方法指定的对象
• 类级别的检索策略可以通过 <class> 元素的 lazy 属性进行设置 • 如果程序加载一个对象的目的是为了访问它的属性, 可以采取 立即检索. 如果程序加载一个持久化对象的目的是仅仅为了获 得它的引用, 可以采用延迟检索
• 在映射文件中定义命名查询语句
– Hibernate 允许在映射文件中定义字符串形式的查询语句. – <query> 元素用于定义一个 HQL 查询语句, 它和 <class> 元素并列.
– 在程序中通过 Session 的 getNameQuery() 方法获取查询语句对应的 Query 对象.
Prepared by TongGang
HQL 检索方式
• 绑定参数:
– Hibernate 的参数绑定机制依赖于 JDBC API 中的 PreparedStatement 的预定义 SQL 语句功能. – HQL 的参数绑定由两种形式:
• 按参数名字绑定: 在 HQL 查询语句中定义命名参数, 命名参数以 “:” 开 头. • 按参数位置绑定: 在 HQL 查询语句中用 “?” 来定义参数位置
Prepared by TongGang
多对一和一对一关联的检索策略
• Query 的 list 方法会忽略映射文件配置的迫切左外连接检索 策略, 而采用延迟检索策略 • 如果在关联级别使用了延迟加载或立即加载检索策略, 可以设 定批量检索的大小, 以帮助提高延迟检索或立即检索的运行性 能. • Hibernate 允许在应用程序中覆盖映射文件中设定的检索策略.
Hibernate讲义(2)
Hibernate 讲义二--Hibernate 配置在第一个Hibernate3程序中,已经使用过了Hibernate的配置文件hibernate.cfg.xml,在其中设置了一些重要的信息,如连接数据库时使用的驱动程序、用户名和密码等信息。
在配置阶段,还可以对数据库进行优化,设置中文编码方式等,用户可以根据需要修改配置信息,提高程序的灵活性。
Hibernate同时支持XML格式和properties格式的配置文件,如果Hibernate配置文件为XML格式,文件名一般默认为“hibernate.cfg.xml”;如果为properties格式,则默认为“hibernate.properties”。
xml配置文件提供了更易读的结构和更强的配置能力,可以直接对映射文件加以配置,而在properties文件中则无法配置,必须通过代码中的Hard Coding加载相应的映射文件。
Hibernate 初始化期间会自动在CLASSPA TH 中寻找这个文件,并读取其中的配置信息,为后期数据库操作做好准备。
配置文件可保存在当前项目或应用的CLASSPATH路径下,对于Web 应用而言,配置文件应放置在服务器的\WEB-INF\classes 目录下。
下面以数据库MS SQL Server为例,分别介绍这两种配置文件。
⑴ hibernate.cfg.xml配置文件这是推荐使用的一种配置Hibernate的方法,因为XML格式的配置文件具有结构性强、易读和配置灵活等特点,而且用hibernate.cfg.xml可以直接配置映射文件。
一个典型的hibernate.cfg.xml配置文件如下:<!--标准的XML文件起始行,version表示XML的版本,encoding表示XML文件的编码方式--><?xml version="1.0" encoding="utf-8"?><!--声明解析XMl文件的DTD文档位置--><!DOCTYPE hibernate-configurationPUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""/hibernate-configuration-2.0.dtd"><!--Hibernate配置文件的开始--><hibernate-configuration><!-- SessionFactory配置开始,SessionFactory负责保存Hibernate的配置信息以及对Session 的操作--><session-factory><!--设置数据库的连接URL --><property name="hibernate.connection.url">jdbc:microsoft:sqlserver://localhost:1433;Database=hibdb</property><!--配置数据库的JDBC驱动--><property name="hibernate.connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property><!—配置连接数据库的用户名--><property name="ername"> sa </property><!—配置连接数据库的用户密码--><property name="hibernate.connection.password"> 123 </property><!--dialect,数据库方言,每个数据库管理系统都有其对应的Dialet以匹配其平台特性--> <property name="dialect">org.hibernate.dialect.SQLServerDialect</property><!-- 是否将运行期生成的SQL输出到日志以供调试--><property name="hibernate.show_sql"> true </property><!-- 是否使用数据库外连接--><property name="e_outer_join"> true </property><!-- 映射文件配置,注意配置文件名必须包含其相对于根的全路径--><mapping resource="chap5/hibernate/UserInfo.hbm.xml"/></session-factory></hibernate-configuration>这个配置文件对Hibernate常用的选项作了配置,在程序的编写过程中,经常需要修改这个配置文件,如使用<mapping></mapping>节点加入对象关系映射文件,更换其他厂商的数据库产品等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
关联映射
一对多(Department一对多(Department-Employee) <set name=”employees”> <key column=”depart_id”/> <one-to-many class=”Employee”/> </set>
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
基本概念和CURD
Domain Object限制 1.默认的构造方法(必须的)。 2有无意义的标示符id(主键)(可选) 3非final的,对懒加载有影响(可选) Domain Java Object(User)
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 基本功能练习
实现UserDao 实现UserDao public interface UserDao { public void saveUser(User user); public User findUserById(int id); public User findUserByName(String name); public void updateUser(User user); public void remove(User user); }
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
安装配置
下载地址,本教程使用3.2.5。 将下载目录/hibernate3.jar和/lib下的hibernate运行时必须的包 加入classpath中: antlr.jar,cglib.jar,asm.jar,commons-collections.jar,commonslogging.jar,jta.jar,dom4j.jar
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
基本概念和CURD
Java代码 代码 1.初始化代码 只做一次 初始化代码(只做一次 初始化代码 只做一次)
Configuration cfg = new Configuration(); cfg.configure(“config.cfg.xml”); 也可以通过cfg.setProperty设置属性。 SessionFactory sessionFactory = cfg.buildSessionFactory();
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
关联映射
多对一(Employee 多对一(Employee - Department) 映射文件<many-to-one name=”depart” column=”depart_id”/> ER图
1.hbm.xml <?xml version="1.0"?> <hibernate-mapping package=“cn.itcast.domain"> <class name="User" table="user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <property name="birthday”/> </class> </hibernate-mapping> 主键生成器,参考文档P65 5.1.4 2.详细信息见参考文档 详细信息见参考文档P62 详细信息见参考文档
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
讲师: 讲师:李勇
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
主要内容
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
引入 安装配置 基本概念和CURD HQL和Criteria 关联映射 继承映射 集合映射 懒加载 缓存 事务 其他 Hibernate不适合的场景 与JPA的集成(annotation方式)
Criteria
Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式: Criteria crit = session.createCriteria(DomainClass.class); 简单属性条件如:criteria.add(Restrictions.eq(propertyName, value)), criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 对象状态
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家! HQL和Criteria
HQL(Hibernate Query Language)
面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类 和属性其他部分不区分大小写);HQL中查的是对象而不是和表,并且支持多态; HQL主要通过Query来操作,Query的创建方式: Query q = session.createQuery(hql); from Person from User user where =:name from User user where =:name and user.birthday < :birthday
public class User { private int id; private String name; private Date birthDay; //getter setter… }
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
基本概念和CURD
14.
最佳实践
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
引入
模型不匹配(阻抗不匹配) Java面向对象语言,对象模型,其主要概念有:继承、关联、 多态等;数据库是关系模型,其主要概念有:表、主键、外键 等。 解决办法 1使用JDBC手工转换。 2使用ORM(Object Relation Mapping对象关系映射)框架来解 决,主流的ORM框架有Hibernate、TopLink、OJB。
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 对象状态
瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM 垃圾回收器回收,一般是new出来且与session没有关联的对象。 持久(persistent):数据库中有数据与之对应,当前与session有关联, 并且相关联的session没有关闭,事务没有提交;持久对象状态发生 持久对象状态发生 改变,在事务提交时会影响到数据库(hibernate能检测到 。 能检测到)。 改变,在事务提交时会影响到数据库 能检测到 脱管(detached):数据库中有数据与之对应,但当前没有session与之 关联;托管对象状态发生改变,hibernate不能检测到。
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 基本概念和CURD
Session的几个主要方法 1.save,persist保存数据,persist在事务外不会产生insert语句。 2.delete,删除对象 3.update,更新对象,如果数据库中没有记录,会出现异常。 4.get,根据ID查,会立刻访问数据库。 5.Load,根据ID查,(返回的是代理,不会立即访问数据库)。 6.saveOrUpdate,merge(根据ID和version的值来确定是save或 update),调用merge你的对象还是托管的。 7.lock(把对象变成持久对象,但不会同步对象的状态)。
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
关联映射
一对一(Person 一对一(Person - IdCard) 1)基于主键的one-to-one(person的映射文件)
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
关联映射
多对一(Employee - Department) 一对多(Department-Employee) 一对一(room - door) 多对多(teacher - student) 组件映射(User-Name) 集合映射(set, list, map, bag) inverse和cascade(Employee – Department)
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
安装配置
配置文件hibernate.cfg.xml和hibernate.properties,XML和 properties两种,这两个文件的作用一样,提供一个即可,推荐 XML格式,下载目录/etc下是示例配置文件。 可以在配置文件指定: 数据库的URL、用户名、密码、JDBC驱动类、方言等。 启动时Hibernate会在CLASSPATH里找这个配置文件。 映射文件(hbm.xml,对象模型和关系模型的映射)。在/eg目录下有 完整的hibernate示例。 快速开始小例子
2.模板代码 模板代码
Session session = null;Transaction tx = null; try{ session = sessionFactory.openSession(); tx = session.beginTransaction(); //…你的代码save,delete,update,get… mit(); }catch(Exception e){ if(tx !=null)tx.rollback();throw e; }finally{ if(session != null)session.close(); } 北京传智播软件人才实作培训专家! 高级软件人才实作培训专家!