Hibernate
来源:互联网 发布:现在开淘宝网店赚钱吗 编辑:程序博客网 时间:2024/06/06 09:42
一、什么是 Hibernate
hibernate是一个基于ORM持久框架,可以让程序员以面向对象的思想操作数据库,提高生产效率。
二、什么是ORM
orm是一种思想,意思是对象关系映射(Object Relation Mapping)。是对象关系模型,如hibernate,让你以面向对象的方式去编程。封装了JDBC。
三、说一下orm与jdbc的区别?
jdbc只是一个java操作数据库的规范接口而已
orm是一种思想,意思是对象关系映射(Object Relation Mapping)。让你以面向对象的方式去编程。封装了JDBC。
四、谈谈MyBatis 和 hibernate 的区别
从mybatis 或 hibernate 的优缺点
和hibernate、及jdbc的比较着手
都是持久层的框架
hibernate是 实体和表的映射
mtbatis是sql语句和dao层接口的映射
Hibernate是面向对象的思想操作数据生成Sql语句,而mybatis是以纯sql操作数据
相对于mybatis容易优化.扩展性好,但是移植性差。
五、jdbc、mybatis 和 hibernate 之间的优缺点比较
http://blog.csdn.net/wangpeng047/article/details/17038659
1、jdbc:
学习简单、代码繁琐、开发慢、手工处理结果集、不易于数据库移植
2、hibernate:
优点:开发速度快,面向对象的操作方式,如save、delete、update方法,自动建表,有HQL语句、动态条件查询(Criteria Query)
也可以直接使用sql,方便移植。
缺点:学习曲线比较长,难度比较大,灵活应用比较困难,效率比JDBC和Mybatis差。
3、myBatis:
优点:
1)学习曲线短、灵活
2)sql全部写在xml文件中,便于管理和优化
3)可以写动态sql
缺点:
1)编写sql工作量大
2)不易于数据库移植
3)查询出结果集后,如果列名和属性不匹配,必须手工组装
六、HQL和SQL的区别
HQL是面向对象的
七、hibernate中什么时候使用sql
常用于统计分析的功能,或者复杂查询中。
八、hibernate中常见的动态查询(Criteria Query)
分页方法,排序方法,模糊查询
例如:查询前50条记录
Criteria crit = sess.createCriteria(Cat.class);//创建啊查询对象
crit.setMaxResults(50);//再调用查询方法
List cats = crit.list();//list方法把查询结果转换成对象
还有eq,like,isNull,in方法等
九、hibernate的主键生成策略
identity:主键自增成长,只能用在支持自动增长的字段数据库中使用,如MySQL
sequence:序列,只能在支持序列的数据库中使用,如Oracle。
native:数据库中设置的方式,例如MySQL使用identity,Oracle使用sequence
uuid:用一个特殊的算法生成一个时空上唯一的字符串。
包括网卡地址、当前时间、随机数等,标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)
assigned:人工分配
如需进一步描述,参考《面试笔试宝典》P213页
十、hibernate中get和load的区别
load是延迟加载,检索不到记录抛出异常(ObjectNotFoundException)
get是立即加载,检索不到记录返回null值
十一、hibernate映射文件中<hibernate-mapping> inverse属性和cascade属性的区别
inverse:在双向关联的设置中,设置对方为主控方,对象之间的关联关系由主控方进行维护。
作用:提高sql的执行效率,避免重复的执行修改关联关系的sql语句
cascade:级联更新、级联删除
十二、hibernate的延迟加载(懒加载)
我们所说的懒加载也被称为延迟加载,它在查询的时候不会立刻访问数据库,而是返回代理对象,当真正去使用对象的时候才会访问数据库。
如何配置延迟加载?在映射文件中配置 lazy属性,“true”表示使用延迟加载,“false”表示不使用延迟加载。
在Hibernate框架中,当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少系统资源的消耗,这时Hibernate用懒加载机制来弥补这种缺陷。
十三、hibernate的缓存
一级:session级别的缓存,不能关闭
二级:跨session(或SessionFactory级别)的缓存。可以被启用或关闭。但会引起并发问题。要采用事物隔离机制。
一级缓存会一直存在,可以使用 clear()方法 或 flush()方法强制清空
二级缓存 一定要配置定期清空的策略。
一级缓存的使用场合:当查询数据时,首先在session范围内查询数据缓存是否存在,若存在,直接返回,否则取数据库中查询,并将查询结果缓存。
缺点:存放在session范围中,所以生命周期较短。线程不安全,不能够线程共享。
二级缓存的适用场合:当查询数据时,首先在session范围内查询数据缓存是否存在,若不存在,接着在二级缓存中查找,最后才去数据库中查找。
hibernate的二级缓存属于第三方插件。
十四、hibernate常用的二级缓存的插件(第三方缓存)
EHCache、OSCache 等
十五、什么样的数据适合放在二级缓存中
1、不经常被修改的。
2、数据量较小。
3、没有并发问题的数据(不会被大量请求共享)。
十六、hibernate和mybatis的缓存的区别
hibernate有更好的二级缓存机制,可以使用第三方缓存。
MyBatis本身提供的缓存机制不佳,配置不好会出现数据脏读的情况。
hibernate的二级缓存配置在sessionFactory中
mybatis的二级缓存可以针对每个表配置
十七、hibernate的事物处理的注解@Transactional,放在类上和放在方法上有什么区别
注解放在类上,类中的所有方法都应用这个注解。
注解放在方法上,只有这个方法应用这个注解。
十八、hibernate中的锁悲锁和乐观锁
这个问题涉及到数据并发的问题
悲观锁顾名思义就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次都会上锁,并发性很差。
乐观锁顾名思义就是很乐观,每次去拿数据的时候都认为别人不会修改,所以每次都不会上锁。但是在做数据更新的时候会判断有没有其他人更新了这个数据,如果有就上锁。并发性相对较好。
乐观锁适用于写比较少的情况下,这样可以省去了锁的开销,并发性好。
写比较多的情况,用悲观锁就比较合适。
hibernate中的实现方式:
http://www.cnblogs.com/otomedaybreak/archive/2012/01/27/2330008.html
阅读全文
1 0
- hibernate
- Hibernate
- Hibernate
- Hibernate
- hibernate
- hibernate
- Hibernate
- Hibernate
- Hibernate
- hibernate
- Hibernate
- Hibernate
- hibernate
- hibernate
- hibernate
- Hibernate
- Hibernate
- hibernate
- office ENUMS
- Redis在windows下安装过程
- ScrollView的使用
- java基础总结五(方法)
- PageView的使用
- Hibernate
- 解析解与数值解的区别
- Linux 获取制定目录的文件数(递归)
- KityMinder Editor ========== ## 简介 KityMinder Editor 是一款强大、简洁、体验优秀的脑图编辑工具,适合用于编辑树/图/网等结构的数据。
- Dotnet2.0中string 转 char *
- ListView的使用
- 存储过程学习
- 聊一下“深度学习”的基本思想
- Linux下安装MySQL的流程及部分错误异常处理