hibernate小结

本次学习hibernate,学习较快。

一.hibernate框架入门

1.hibernate简介:
应用程序分层结构:表示层 业务层 持久层(hibernate,jdbc) 数据层
阻抗不匹配:类() 数据库 才是面向对象思想
O/RMapping:对象/关系映射,对象数据保存到关系数据库,关系数据库表读入对 象
hebernate简介:
2.hibernate开发环境搭建
jar下载,jar介绍,hibernate.cfg.xml的使用 :核心配置文件,配置数据库,注册对象关系映射文件
3.hibernate应用开发步骤
设计持久化实体类:
setter getter
公共无参构造方法
(OID)属性
属性集合类型的话,必须定义为接口:List Set Map
实现Serializable接口
创建对应xml:xxx.hbm.xml并注册
准备好数据库表:手动建数据库,自动建表
hibernate api 持久化操作: Session类主要用来执行实体的持久化操作:save() update() delete() get() session.load(ClassName.class,id)
创建SessionFactory实例
开启事务
利用Session实例进行持久化操作
提交事务
关闭Session
4.hibernate核心接口和工作机制
Configuration类:负责管理Hibernate的配置信息作并根据配置信息启动Hibernate, 属性文件,XML文件.
SessionFactory接口:SessionFactory实例对应一个数据存储源
Session接口:持久化管理器,Hibernate的一级缓存,通过SessionFactory打开
Transaction接口:Hibernate数据库事务接口
Query和Criteria接口:查询接口,

二.Hibernate基本配置及操作

1.Hibernate核心配置文件
hibernate.cfg.xml文件的配置:数据库方言,数据库连接,数据库连接池,加载对象关系映射文件,其它.
Hibernate中对象关系映射文件:oid生成器:native
2.Session缓存和持久化生命周期
Session缓存原理:一级缓存,执行一些操作,便把对象加入第一级缓存。清理缓存时,根据缓存中对象的状态变化来同步更新数据库
Session缓存的应用:减少访问频率,保证数据同步,Transaction的commit(),session的flush(),Session的setFushMode(FlushMode fm)方法设定清理缓存时间点(FlushMode.ALWAYS,FlushMode.AUTO,FlushMode.COMMIT,FlushMode.MANUAL)
持久化对象的生命周期:瞬时(Transient),持久化(Persistent),脱管(detached),移除(removed)
这里写图片描述
3.Session基本操作
(增删改查)
save()方法:对象持久化
get()和load()方法:根据给定的OID,加载持久化对象,get数据库中取,load懒加载
delete()方法:持久化对象变成移除状态
update()方法:脱管对象重附到新session,成为持久化对象
merge()方法:实例的状态复制到具有相同标识符的持久化实例,返回这个持久化实例,常用来代替update() saveOrUpdate()

三Hibernate基本查询(Hibernate Query Language)

1.Hibernate基本查询
Query接口:执行HQL语句的查询接口
HQL基本查询:条件查询,支持投影查询,分页查询,连接查询,分组查询,子查询
,内置聚集函数,支持动态绑定参数(名字,位置),Hibernate投影查询,where条件查询(范例如笔记)
2.Hibernate聚合函数和分组查询
3.Hibernate分页查询和批量更新
4.Hibernate中的命名查询:Session的getNameQuery()

四Hibernate对集合属性的操作

1.Set属性操作
Set集合映射配置:xxx.hbm.xml用,单独引出一个关联表
Set集合属性的使用:name属性,table属性,子元素,子元素
2.List属性操作
List映射配置:xx.hbm.xml用
List属性应用:name属性,table属性,子元素,子元素,子元素
3.Collection属性操作
Collection映射配置:xxx.hbm.xml用或(推荐),需要collection-id,性能高。
Collection属性应用:name属性,table属性,子元素对应,子元素,子元素
4.Map属性操作
Map映射配置:xxx.hbm.xml使用
Map属性应用:name属性,table属性,子元素,子元素,子元素

五.Hibernate关联映射(模型在笔记)

1一对一关联映射
映射关联关系:类关联to表间外键引用关系
一对一关联映射的策略:外键,主键
基于外键的单(双)一对一关联映射:
:,多端unique=true。对象模型:主控端:添加被控端对象引用,被控端:没有变化。关系模型:主控端:添加外键引用,被控端:没有变化
:,property-ref指定反向引用。对象模型:主控端:添加被控端对象的引用。被控端:添加主控端对象的引用。关系模型:主控端:添加外键引用,被控端:没有变化
基于主键的单(双)一对一关联映射:对象模型:主控端:添加对被控端对象的引用,被控端:没有变化。关系模型:主控端:主控端的主键和被控端的主键进行关联,被控端:没有变化
2单向一对多(多对一)关联映射
单向一对多关联映射:,不常用
单向多对一关联映射:
3双向一对多(多对一)关联映射
双向一对多(多对一)关联(most)对象模型:一端:添加对多端对象集合的引用,多端:添加对一端对象的引用。关系模型:一端:没有变化,多端:添加对一端主键的引用(建立外键关系),应把关系维护权交多端inverse=”true”,先操作多端,cascade=”all”级联持久化
双向一对多自身关联
4多对多关联映射
中间表
5关联映射最佳实践
偏爱双向关联,少用多对多,拆成一对多,多对一双向

六Hibernate高级查询

1Hibernate中标准化对象查询(Criteria)
标准化对象查询:查询条件封装为一个对象
Criteria接口:存放查询条件,创建Criteria接口对象
Criterion接口:通过实现类Restrictions产生查询条件,还需通过Criteria的add方法添加到Criteria实例中
Order类:通过Criteria的addOrder()方法添加到Criteria实例中,Order.desc(String propertyName),Order.asc(String propertyName)
Projection接口:投影查询:通过Criteria的setProjection()方法添加到Criteria实例中。Projections类聚合函数:avg,count,sum,max,min…
离线查询:DetachedCriteria类可在session范围外创建查询,可附加到任意 Session上来执行查询
2Hibernate中HQL的高级查询
子查询:内嵌在另一个查询语句的查询,只可在select或where字句中
连接查询:关联映射实体类间进行,可通过HQLwith关键字,提供额外join条件,常见连接查询:[inner] join,(left [outer] join),[right [outer] join],full join
抓取连接查询:fetch连接,只用一查询语句就关联对象或一组值集合随父对象初始化而被初始化。
3Hibernate中Native SQL查询:原生态,Session.createSQLQuery()来获取SQLQuery接口实例
4Hibernate调用存储过程:存储过程/函数须返回一结果集,作为Hibernate能够使用的第一个外部参数。在程序中调用的代码:session.createSQLQuery(“{存储过程}”)

七.Struts2整合Hibernate框架

1Struts2 整合Hibernate
这里写图片描述
2基于泛型DAO模式应用
基于泛型的通用DAO接口:BaseDao中为基本的一些公用方法,UserDaos为自定义方法。
提供通用DAO接口的实现:反射补充:

“`
public class BaseDaoImpl implements BaseDao{String hql=”select count(t) from “+clazz.getSimpleName()+” t”;}
public BaseDaoImpl(){
//通过反射机制获取子类传递过来的实体类的类型信息
ParameterizedType type=(ParameterizedType)this.getClass().getGenericSuperclass();
this.clazz=(Class)type.getActualTypeArguments()[0];
}
/* dao工厂创建一个stuDaoImpl实例,调用stuDaoImpl的方法,然后this.getClass()得到当前类stuDaoImpl,.getGenericSuperclass得到父类BaseDaoImpl,.getActualTypeArguments就得到泛型参数Student

*/“`
绑定session到当前线程thread
分页模型类
3OpenSessionInView模
这里写图片描述
请求一来便在Filter打开,请求关闭session关。

八.基于注解的Hibernate配置

1Hibernate注解和JPA
注解代替XML映射对象关系
Hibernate-core3.6以上版本内置了对注解的支持
在 hibernate.cfg.xml 文件中通过配置实体
2JPA中注解的应用
基于JPA注解的对象关系映射:@Entity@Table@Id@Temporal@Basic@Column@OneToMany@OneToOne@ManyToMany
映射命名查询@NamedQueries@NamedQuery
3Hibernate二级缓存的注解
通过注解配置二级缓存
@Cache注解配置二级缓存

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值