hibernate总结
DAO(DatabaseAccessObject)数据库访问接口.
1.使用DAO模式的好处:
1.减少重复代码的编写,提高工作效率.
2.可以实现数据访问层与业务层的分离.
3.修改数据访问层,或者业务层不会影响这个系统的架构.
2.DAO模式必要的4个组件:
1.DAO接口
2.DAO实现
3.pojo(PlainOldJavaObject)对象,(最简单最原始的javaBean,没有任何其他方法)
4.一个得到DAO实现的DAO工厂.
ORM(ObjectRelationMapping)关系型对象映射.ORM主要是为了解决关系型数据库与面向对象程序设计不必配的一种技术.
常见的ORM框架:Hibernate,Ibatis,TopLink等...
Hibernate:
Hibernate是一个ORM框架,它对JDBC提供了重量级的封装.使程序员可以使用面向对象的思维方式来操作数据库.
Hibernate的核心类和接口:
1.Configuration类:主要是负责管理Hibernate配置文件信息的.
2.SessionFactory接口:用于得到SessionFactory实例.
3.Session接口:操作HibernateCRUD的核心。
4.Transaction:提供事务管理.
5.Query接口:查询的基本接口.
Hibernate的操作步骤:
1.通过Configuration类加载Hibernate配置文件.
2.创建SessionFactory.
3.打开Session.
4.开启Transcation.
5.进行CURD操作.
6.提交事务.
7.关闭Session.
Hibernate查询方式:
1.hql方式:hibernate的查询语言,查询语言面向对象,而不面向数据库.
2.qbc方式:以查询的方式自动创建sql语言,完全的面向对象设计.
3.sql方式:数据库查询语言.写标准的sql.
比较3种查询方式:
1.hql查询方式最灵活,但是存在动态查询条件的时候会很麻烦.
1.qbc查询方式最适合动态查询.但是不适合统计查询等.
2.sql查询方式也可以达到同样的效果,但是不方便数据库移植.
Hibernate中pojo的3种状态:
1.瞬态(vo):pojo刚刚初始化,并没有执行任何操作.
2.持久态(po):pojo进入session的生命周期类,这个时候的数据库已经和bean建立了连接.
3.托管/离线态:当session关闭后的pojo就进入了离线状态.
Hibernate主键生成策略:
1.Identity:支持自动型数据库,如Mysql.
2.Sequence:支持序列的数据库,如Oracle.
3.Native:自动判断数据库类型,并自动匹配相应的生成策略.
4.uuid.hex:自动生成32位无重复的全球统一标识符.
5.foreign:用于Hibernate的一对一关系中,自动生成主键的一种策略.
Hibernate映射机制:
1.基本映射:自动映射基本类型.
2.集合映射:映射List,Set,Map.
3.关联映射:支持一对一,一对多,多对多直接的映射.
4.继承映射:支持具有继承关系的映射.
5.组件映射:但一个Bean具有另一个Bean的属性时.
6.组合映射:支持组合主键的映射.
cascade与inverse的意思.
1.cascade是级联的意思,也就是说,在一对多或者是多对一关系中,只需保存或者删除
一方对象,就可以同时将多方的对象全部进行保存或者删除.
2.inverse是反转的意思,也就是说,在一对多或者是多对一关系中,本类是否放弃维护.
继承映射的三种策略.
1.每个类对应一张表.这种查询支持多态查询.
2.每个子类对应一张表.这种查询可以减少多表查询的性能消耗.
3.所有类公用一张表.如果类多的话,则会减少性能.
Hibernate的缓存机制:
1.一级缓存:是Session级别的缓存,是hibernate的内置缓存.如果session被关闭,则缓存也会被清空.
2.二级缓存:是SessionFactroy级别的缓存,二级缓存可以被所有session共享.
二级缓存适合于:一般很少被修改的数据(用户登录信息),不是很重要但是又有可能出现并发的数据.
不适合:经常被修改的数据(共享数据,财务数据等).
开启二级缓存:需要指定二级缓存的提供商:比如:EhCacheProvider缓存.
3.查询缓存:查询缓存与session无关.查询结果只针对list.如果是对象只缓存对象的id.查询缓存也需要手动开启.
Hibernate的延迟加载:
1.延迟加载就是在需要的时候就才发出sql.
2.延迟加载只能在session的作用域中.
3.Hibernate默认就是延迟加载的,如果不需要延迟加载可以在
与ibatis比较:
1.Hibernate是重量级的封装,ibatis是轻量级的封装.
2.Hibernate适合中小型项目,ibatis适合大型项目.
3.Hibernate的性能比ibatis低很多.