关于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是一个应用起来十分方便的轻量级框架,也非常容易学习,本博客只是对应用上做了一些了解,具体想要深入学习,还要看很多书籍和亲自去实际练习才明白,这次是我写的第一个博客,也借鉴了很多大牛的思想,这里对这些技术大牛表示感谢~

         

   



0 0