Hibernate框架技术视频课程——笔记(四)
2018-08-13 20:56
676 查看
视频课程链接:http://edu.51cto.com/course/10747.html
Hibernate支持三种继承映射方式:
每个继承关系只用一张表
每个子类一张表
每个类一张表
系统用户:id username password
管理员: id username password tel
普通用户:id username password addr
一级缓存
二级缓存
查询缓存
作用:
减少访问数据率的频率,提高检索效率
保证数据库中的数据与缓存中的对象同步
clear() 清空缓存
evict(Object o) 从缓存中删除指定的持久化对象
二级缓存需要单独配置缓存插件,常用的二级缓存插件:EHCache、OSCache、JBossCache...
配置二级缓存的步骤:
添加lib\optional\ehcache目录下的jar包
在类路径下创建ehcache.xml文件并配置
在hibernate.cfg.xml文件中开启二级缓存并设置使用的二级缓存的实现类
指定要缓存的对象
查询缓存是基于二级缓存的,必须先配置二级缓存
配置查询缓存的步骤:
在hibernate.cfg.xml文件中开启查询缓存
使用查询缓存
注:只有当执行的hql语句完全相同时才会使用查询缓存
适用场景:
经常使用的查询语句
对查询到的数据很有修改操作
使用Hibernte注解,可以将映射信息写入到Java类中,不再需要xxx.hbm.xml文件,简化开发
JPA和Hibernate的关系:JPA是标准接口,Hibernate是实现,功能更加强大
属性级别注解
映射关系注解
创建一个数据库连接
为项目添加Hibernate支持
使用反向工具根据数据库表自动生成持久化类和映射文件
一、继承映射
1. 简介
1.1 概念
在面向对象中很重要的一个特性就是继承,继承实现了代码的复用,Hibernate也支持继承映射 Hibernate支持三种继承映射方式:
每个继承关系只用一张表
每个子类一张表
每个类一张表
1.2 继承关系
系统有三个角色:系统用户、管理员、普通用户系统用户:id username password
管理员: id username password tel
普通用户:id username password addr
2. 每个继承关系只用一张表
2.1 数据库表
create table t_sysUser( id int primary key auto_increment, username varchar(200), password varchar(200), tel varchar(50), address varchar(200), type int -- 0 manager, 1 member )engine Innodb default charset=utf8;
2.2 配置方式
<!-- 指定如何区分子类 column:指定使用哪个字段来区分 注:根据dtd约束规则,该元素要放到property元素的前面 --> <discriminator column="type"></discriminator> <property name="username"></property> <property name="password"></property> <!-- 每个子类的配置 --> <subclass name="Manager" discriminator-value="0"> <property name="tel"></property> </subclass> <subclass name="Member" discriminator-value="1"> <property name="addr"></property> </subclass>
3. 每个子类一张表
3.1 数据库表
create table t_manager( id int primary key auto_increment, username varchar(200), password varchar(200), tel varchar(50) )engine Innodb default charset=utf8; create table t_member( id int primary key auto_increment, username varchar(200), password varchar(200), addr varchar(200) )engine Innodb default charset=utf8;
3.2 配置方式
<class name="Manager" table="t_manager"> <id name="id" column="id"> <generator class="native"></generator> </id> <property name="username"></property> <property name="password"></property> <property name="tel"></property> </class>
4. 每个类一张表
4.1 数据库表
create table t_sysUSer( id int primary key auto_increment, username varchar(200), password varchar(200) )engine Innodb default charset=utf8; create table t_manager( id int primary key auto_increment, tel varchar(30), user_id int, foreign key(user_id) references t_sysUser(id) )engine Innodb default charset=utf8; create table t_member( id int primary key auto_increment, addr varchar(200), user_id int, foreign key(user_id) references t_sysUser(id) )engine Innodb default charset=utf8;
4.2 配置方式
<!-- 通过外键关联的子类 --> <joined-subclass name="Manager" table="t_manager"> <!-- 关联列,外键列 --> <key column="user_id"></key> <!-- 包含的属性 --> <property name="tel"></property> </joined-subclass> <joined-subclass name="Member" table="t_member"> <!-- 关联列,外键列 --> <key column="user_id"></key> <!-- 包含的属性 --> <property name="addr"></property> </joined-subclass>
二、Hibernate缓存
1. 简介
Hibernate缓存可以为三类:一级缓存
二级缓存
查询缓存
2. 一级缓存
一级缓存就是Session范围内的缓存,也称为Session缓存,Session自带 作用:
减少访问数据率的频率,提高检索效率
保证数据库中的数据与缓存中的对象同步
管理Session的方法:
clear() 清空缓存
evict(Object o) 从缓存中删除指定的持久化对象
3. 二级缓存
二级缓存是SessionFactory范围内的缓存,可以被所有Session所共享 二级缓存需要单独配置缓存插件,常用的二级缓存插件:EHCache、OSCache、JBossCache...
配置二级缓存的步骤:
添加lib\optional\ehcache目录下的jar包
在类路径下创建ehcache.xml文件并配置
在hibernate.cfg.xml文件中开启二级缓存并设置使用的二级缓存的实现类
<!-- 启用二级缓存 --> <property name="cache.use_second_level_cache">true</property> <!-- 设置二级缓存的实现类,即指定使用的插件 --> <property name="cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
指定要缓存的对象
<!-- 指定二级缓存的实体类 --> <class-cache usage="read-write" class="day04.cache.Account"/>
4. 查询缓存
默认二级缓存只针对基于ID的查询有效,如get()、load(),默认对HQL查询无效,因此提供了针对非ID查询的缓存,称为查询缓存 查询缓存是基于二级缓存的,必须先配置二级缓存
配置查询缓存的步骤:
在hibernate.cfg.xml文件中开启查询缓存
<property name="cache.use_query_cache">true</property>
使用查询缓存
String hql="from Account a where a.name like :name"; Query query=session.createQuery(hql).setString("name", "%m%"); query.setCacheable(true); //使用查询缓存 System.out.println(query.list());
注:只有当执行的hql语句完全相同时才会使用查询缓存
适用场景:
经常使用的查询语句
对查询到的数据很有修改操作
三、Hibernate注解
1. 简介
1.1 繁琐的映射文件
传统上Hibernate的配置依赖于xxx.hbm.xml文件,需要在映射文件中指定实体对象和数据库表之间的关系,并且在启动时加载 使用Hibernte注解,可以将映射信息写入到Java类中,不再需要xxx.hbm.xml文件,简化开发
1.2 什么是JPA
Java Persistence API,Java持久化API JPA和Hibernate的关系:JPA是标准接口,Hibernate是实现,功能更加强大
1.3 Hibernate注解分类
类级别注解属性级别注解
映射关系注解
2. 常用注解
2.1 持久化类相关
注解 | 含义和作用 |
---|---|
@Entity | 将一个类声明为持久化类 |
@Table | 为持久化类映射指定的表 |
@Id | 声明持久化类的标识属性 |
@GenerateValue | 主键生成策略 |
@Column | 将属性映射到列 |
@NamedQuery | 配置命名 |
2.2 关联关系相关
注解 | 含义和作用 |
---|---|
@OneToMany | |
@OneToOne | |
@ManyToOne | |
@ManyTo |
3. 基本用法
四、MyEclipse反向工程
步骤:创建一个数据库连接
为项目添加Hibernate支持
使用反向工具根据数据库表自动生成持久化类和映射文件
五、封装GenericDao
相关文章推荐
- Hibernate框架技术视频课程——笔记(一)
- Hibernate框架技术视频课程——笔记(二)
- Hibernate框架技术视频课程——笔记(三)
- 【视频课程】Android底层开发关键技术—Android系统移植与HAL框架开发
- 学习笔记之 O/R 映射技术的王牌Hibernate框架
- 【视频课程】Android底层开发关键技术—Android系统移植与HAL框架开发
- 学习笔记之 O/R 映射技术的王牌Hibernate框架
- Nginx快速入门视频课程——笔记
- 私房库视频学习笔记-小清新BBS系统开发技术归纳 二
- hibernate框架学习笔记8:一对多关系案例
- hibernate框架学习笔记11:Criteria查询详解
- Hibernate学习笔记一 使用idea开发工具搭建框架
- nat技术精解(视频课后笔记)
- Hinton Neural Networks课程笔记2a:三种主要的神经网络框架之前向网络、循环神经网络和对称网络
- Hibernate视频学习笔记(6)一对多关联映射
- 【笔记】Hibernate框架系列 [ 2 ]
- 传智播客Hibernate视频教程学习笔记10 11 12 13
- 传智播客Hibernate视频教程学习笔记14
- 传智播客Hibernate视频教程学习笔记48
- 【慕课笔记】第四章 JAVA中的集合框架(上) 第3节 学生选课—创建学生类和课程类