- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hibernate复习之Hibernate基本介绍
Hibernate复习之Hibernate基本介绍
众所周知,目前流行的面向对象的对象关系映射的Java持久层框架有MyBatis和hibernate,他们都是对象关系映射ORM, 解决的主要问题就是对象-关系的映射,域模型和关系模型都分别建立在概念模型的基础上,域模型是面向对象的,关系模型是面向关系的,一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录。 (可能存在类中多个属性对应一列的情况,映射组成关系), ORM中间件采用元数据来描述对象-关系映射细节,元数据通常采用XML格式,并且存放在专门的对象-关系映射文件中,如果希望把ORM软件集成到自己的Java应用中,用户首先要配置对象-关系映射文件。Hibernate中也就是entity.hbm.xml,而MyBatis中就是entityMapper.xml
下面主要介绍一下Hibernate的执行过程:
session.save(customer)
执行过程:
1)运用反射机制,获得customer对象的类型Customer.class
2)参考对象-关系映射元数据,了解Customer类对应的表,以及属性对应的列,Customer类和其他类关系。
3)根据以上映射信息,生成SQL语句
insert into tab_customer values(id,name,password,telphone);
4)调用JDBC API,执行以上的SQL语句。
JDBC与Hibernate比较:
1,JDBC: Java中嵌入SQL,不便于维护
Hibernate: 无须编写SQL语句;由Hibernate通过读取映射文件在运行时自动生成SQL
save(student)- insert into customer values(?,?,?);
2,JDBC:查询数据,需要手动封装成对象;保存对象,需要手动插入值
Hibernate: 可自动实现对象和表中记录的转换
3,JDBC:查询内存中已存在的对象,修改属性值,均需要和数据库进行交互
Hibernate:通过Dirty checking(脏检查)避免交互;
Hibernate的工作原理:
1,Hibernate框架根据hibernate.cfg.xml的配置的信息来和数据库进行通信,当然和spring结合后也可以通过注解来实现。
2,Hibernate框架根据具体的映射文件**.hbm.xml 来保存,更新,删除,查询对象。
Hibernate API,Hibernate中几个比较重要的类:
Configuration接口:
Configuration对象用于配置并且启动Hibernate,Hibernate应用通过Configuration实例还指定对象-关系映射文件的位置或者动态配置Hibernate的属性,然后创建SessionFactory实例
Configuration config = new Configuration();
Config.configure();
SessionFactory factory = config.buildSessionFactory();
SessionFactory :
用来构造Session的实例对象,它的特点:
1)线程安全: 该实例对象何以被多个线程共享
2)重量级:该实例对象的构造和销毁消耗系统资源,所以一般在应用程序启动的时候就构造实例对象,一般一个数据库对应一个SessionFactory的实例对象,如果要访问多个数据库,就需要创建多个该实例对象。
3)SessionFactory实例对象中维护了一个很大的缓存,存放了一些预定义的SQL语句和XML配置文件的信息,另外还维持了一个Hibernate的第二级缓存(缓存了所有Session对象所加载的POJO对象),用来保存在该生命周期中的一些业务对象,但是这个第二级缓存默认是关闭的,必须在xml中手动配置才可以开放
Session session = factory.openSession();
Session(别名:持久化管理器),用来对对象的保存,更新,删除和查询
特点:
1)线程不安全,要避免同一个Session对象被多个线程共享,一般一个线程对应一个Session
2)轻量级:可以随意的构造和销毁该实例对象。
3)Session对象中维护了一个缓存,称为Hibernate的第二级缓存(缓存了当前Session对象所加载的那些POJO对象),每个Session对象都有自己的缓存。
Query:
利用HQL语句(Hibernate Query Language)用来查询单个或者多个对象,面向对象的
Query query = session.crea
文档评论(0)