关于Hibernate
来源:互联网 发布:jquery 表单数据验证 编辑:程序博客网 时间:2024/05/16 04:55
因为在面试的时候被人问到关于Hibernate的知识时,自己回答不出,被BS了,
通过自己从所以这里写一篇关于自己的Hibernate的理解
注:此文有很大一部分借鉴http://blog.csdn.net/jiuqiyuliang/article/details/39078749的观点。
从以下4个问题来阐述Hibernate:
1.Hibernate是什么?
1.1 Hibernate 的翻译是冬眠的意思 就像是冬眠的时间到了,世间万物都该开始冬眠 变的不想动了
就像他操作的是持久化对象一样(持久化对象就是将内存中的对象存储在数据库中,或者磁盘,或者XML文件中)
1.2JDBC就是一种持久化机制。文件IO也是一种持久化机制。
2. 能解决什么问题(why)?
2.1 首先,Hibernate的老本行还是用来操作数据库
2.2 解决了各种JDBC语句,connection的管理问题(?,?),无需操作数据,直接操作Hibernate即可(?)
2.3 从我们开发时常用的分层思想来看,表示层,业务层,持久层,Hibernate扮演了持久层的角色,而且持久层的框架还有很多,比如:IBatis,Nhibernate,JDO,OJB,EJB
等等。
2.4 Hibernate是一个ORM(对象映射)的框架
ORM的作用就是实现对象-关系型数据库的映射,就像是我曾经在一个struts2项目中采用po层(po层是一个对象,他里面的成员和数据库的字段名一样,目的是实现映射)
的作用一样,他的目的是实现对象与关系型数据库的映射,避免了复杂的SQL操作,我们只需要操作对象和对象的属性即可。
3.什么场景不适合用Hibernate?
3.1 由于Hibernate本身的机制,他操作的是个对象,如果面对那些数据量特别大的数据库系统而言,一个对象有可能会包含特别多的数据,Hibernate无疑是一个噩梦。
3.2 也是由于Hibernate本身的机制,注定了他不能像JDBC那样灵活。
3.3 在自己所做的项目中,自己想要动态生成一张数据库并执行操作的功能还未实现(因为Hibernate的映射机制,一张数据库表对应一个配置文件-struts.xml),如果只有增加数据库表,却没有增加对应一个配置文件-struts.xml,没有映射,无法操作啊。
4. Hibernate的核心?
configration:负责配置并启动Hibernate
SessionFactory:初始化Hibernate
Session:持久化对象的CRUD操作
Trasaction:负责事务
Query和Criterria:负责操作数据库查询
注意:Configuration实例是一个启动期间的对象,一旦SessionFactory创建完成它就被丢弃了。
例子:
public class HibernateUtil {
private static SessionFactory factory;
static
{
Configuration cfg = new Configuration().configure();
factory = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory()
{
return factory;
}
public static Session getSession()
{
return factory.openSession();
}
public static void close(Session session)
{
if(session.isOpen())
session.close();
}
}
@Override
public void save(Users u) {
// TODO Auto-generated method stub
Session session = HibernateUtil.getSession();
session.beginTransaction();
session.save(u);
session.beginTransaction().commit();
HibernateUtil.close(session);
}
4.与JDBC的对比,有什么差别,有什么特点,优缺点
4.1 JDBC直接操作数据,Hibernate操作的是对象,相比较而言,JDBA更加灵活
4.2 JDBC使用SQL语言,Hibernate可以使用HQL语言和SQL语言
4.3 数据状态不同,JDBC操作的数据是“瞬时操作”级变量的值,无法与数据库中的值保持一致,而Hibernate可以
4.4 JDBC连接方式 mysql
public static Connection getConnection() {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
return conn;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
Hibernate的优点:
1.用对象的思想操作数据库
2.对底层做了更好的持久化封装,提高了代码的复用性
3、Hibernate是一个没有侵入性的框架,没有侵入性的框架我们称为轻量级框架。
对比Struts的Action和ActionForm,都需要继承,离不开Struts。Hibernate不需要继承任何类,不需要实现任何接口。这样的对象叫POJO对象
Hibernate的缺点:
1.使用数据库语言,很难调优
2.很难对大批量数据更新
总结:
Hibernate是一个应用起来十分方便的轻量级框架,也非常容易学习,本博客只是对应用上做了一些了解,具体想要深入学习,还要看很多书籍和亲自去实际练习才明白,这次是我写的第一个博客,也借鉴了很多大牛的思想,这里对这些技术大牛表示感谢~
- 关于hibernate!
- 关于Hibernate
- 关于Hibernate
- 关于Hibernate
- 关于Hibernate
- 关于Hibernate
- 关于hibernate
- 关于Hibernate
- 关于Hibernate一点体会
- 关于Hibernate一点体会
- 关于Hibernate Cache
- 关于Struts Spring Hibernate
- 关于hibernate.cfg.xml
- 关于Hibernate中的Configuration
- 关于hibernate的看法
- 关于Hibernate的Transaction
- 关于hibernate缓存
- 关于hibernate 连接池
- 嵌入式 uboot引导kernel,kernel引导fs
- 镶嵌数据集工具小结(五)镶嵌数据集的属性 Ⅱ
- Using rsyslog mmnormalize module effectively with Adiscon LogAnalyzer
- iBatiS中遇到的sql上的问题小结
- 学习方法
- 关于Hibernate
- android中选择控件与选择界面自然过度效果的实现--一种新的交互设计
- 校园双选会,你都懂么
- 数据结构线性表f
- golang(beego)验证码控制器
- paint画笔
- PS 常用快捷键
- LSM树由来、设计思想以及应用到HBase的索引
- 常用算法之交换两个数的值