Hibernate框架

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate框架相关的知识,希望对你有一定的参考价值。

作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷。利用Hibernate框架我们就可以不再编写重复的JDBC代码,不再反复的测试我们的SQL语句写的如何。这里这需要我们简单配置,调用框架给我们提供的方法,就可以完成对数据增删改查的,那么Hibernate到底是个什么样的框架呢?如何使用呢?先看一个关于Hibernate框架的知识体系图:

技术分享图片

 

 

          这篇博客,我们来总结一下,Hibernate宏观的认识和,环境搭建。

 

          一,Hibernate到底是什么?

 

                  Hibernate是一个基于元数据轻量级ORM框架:

 

                  1,元数据(Meta Data:data about data(数据的数据),也就是说描述一个对象数据,相当于这个对象的上下文环境。

 

                  2,轻量级:占用资源少,没有侵入性。(其实我认为这只是相对而言,如果和Ibatis相比,它到成重量级的了)。

 

                  3ORM:(Object Relation Mapping)对象关系数据库的映射

                     这是Hibernate框架的重点,也就是说将我们程序中的实体(bean,这里也叫POJO)和数据库中的表进行映射。java类型和sql类型映射,面向对象设计和关系型数据库设计的映射,从而我们只需要将更多的精力放到业务中,而不是sql数据库方面。

 

                 4POJO:(Plain Ordinary Java Object,无格式的普通java对象,也就是上边说的实体,和数据库做映射的简单类。只是在这里提出了一个新的名词而已。

 

            总而言之,Hibernate就是将我们的数据库表和程序的POJO类进行映射,数据的操作进行了封装,使我们不用把数据库弄得非常精通,我们会面向对象编程就可以了,这样大大提高了我们的编程效率,而且对个人的知识要求也降低了。(Hibernate的设计目的是这样的,可是我觉的要想更好的应用Hibernate,更好的掌握开发的来龙去脉,这是要求我们要有更高的能力了,知其然知其所以然了)

 

            二,环境搭建:

 

                 1,和前边几个框架的大概流程一样,首先需要我们拷入必备的jar包。jar包的拷入奔着一个够用即可的原则,用什么拷贝什么,当然有些日志输出,单元测试是为了更好的观察框架而拷入的不是必备的。这里讲到是用mysql来进行演示,所以使用了mysql的驱动jar包:

                         antlr-2.7.6.jar (生成SQL语句)

asm.jar(字节码增强工具类)

c3p0-0.9.1.jar(数据源连接池组件)

cglib-2.1.3.jar(代理组件,基于继承的)

commons-collections-2.1.1.jar(集合工具类组件,会进行高效的操作)

commons-logging-1.0.4.jar(日志输出的转换组件)

log4j-1.2.11.jar(日志输出组件,更加详细和可以控制输出格式,及目的地)

dom4j-1.6.1.jar(XML解析)

ehcache-1.2.3.jar(缓存组件)

ejb3-persistence.jar(持久化操作的规范jar包)

hibernate3.jar(框架的核心jar包)

jta.jar(全局的事务管理)

junit-3.8.1.jar        (单元测试)                        

mysql-connector-java-3.1.13-bin.jar        (MySQL数据库驱动jar包)

 

                 2,引入配置文件:

                        hibernate.cfg.xml  Hibernate核心配置文件(包括数据库的连接配置,映射文件的读取等)

      log4j.properties          Log4j的日志输出控制文件

      User.hbm.xml  映射文件(这里的User只是匹配User实体的,一个实体类对应一个此类的映射文件。)

 

 

                3,核心配置文件hibernate.cfg.xml的编写:

[html] view plain copy
 
  1. <hibernate-configuration>  
  2.     <!-- 构造数据库的连接工厂,这是Hibernate的核心类 -->  
  3.     <session-factory>  
  4.       
  5.         <!-- 这里是简单的数据库连接的基本信息,也可以写在配置文件中,或者利用JNDI来调用数据源 -->  
  6.         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=utf8</property>  
  7.         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
  8.         <property name="hibernate.connection.username">ljh</property>  
  9.         <property name="hibernate.connection.password">ljh</property>  
  10.           
  11.         <!-- 在控制台里打印生成的SQL语句 -->  
  12.         <property name="hibernate.show_sql">true</property>  
  13.         <!-- 格式化控制台输出的SQL语句,这两条都是方便我们来学习Hibernate框架 -->  
  14.         <property name="hibernate.format_sql">true</property>  
  15.           
  16.           
  17.         <!--   
  18.             方言:根据指定的方言与数据库打交道,完成SQL的具有语句生成,因为不同的数据库sql语法还是有区别的,  
  19.             这里相当于告诉Hibernate框架,我们使用的是什么数据库。  
  20.                 MySQL : org.hibernate.dialect.MySQLDialect  
  21.                 Oracle : org.hibernate.dialect.OracleDialect  
  22.          -->  
  23.         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
  24.           
  25.         <!-- 管理所有的映射资源文件,这里仅仅配置了User类的配置映射文件,应该将我们的所有的映射配置文件设置到这里,这样我们框架才能找到 -->  
  26.         <mapping resource="com/ljh/hibernate/pojo/User.hbm.xml"/>  
  27.           
  28.     </session-factory>  
  29. </hibernate-configuration>  


            4,   *.hbm.xml与实体类对应的用来做映射的文件的编写,我觉的这里是重点,设计的知识点比较多。这里简单看一个,后边会总结这里边的语法:

 

[html] view plain copy
 
  1. <hibernate-mapping>  
  2.     <!-- 实体类class和数据库表table的映射 -->  
  3.     <class name="com.ljh.hibernate.pojo.User" table="t_user">  
  4.   
  5.         <!--   
  6.             id标签用来映射主键字段  
  7.             name属性表示类的属性  
  8.             column属性表示表的字段  
  9.          -->  
  10.         <id name="usercode" column="usercode" length="20">  
  11.             <!-- 主键生成策略   
  12.                 native 表示根据连接数据库的表的主键生成方式来生成主键值  
  13.                     mysql数据采用的auto_increment属性来生成主键值,一般主键字段需要设置的类型为int    
  14.                 assigned 表示主键由用户自己维护。     
  15.             -->  
  16.             <generator class="assigned"/>  
  17.         </id>  
  18.   
  19.         <!-- 普通属性的映射  
  20.             name 表示类中的属性名称    
  21.             column 表示表中的列名称    column属性不指定会采用默认的值,默认名称与属性名称一致  
  22.             length 表示属性的字符长度  
  23.             not-null 表示属性值不能为null  
  24.          -->  
  25.         <property name="userpswd" column="userpswd" type="java.lang.String" length="20" not-null="true"/>       
  26.         <property name="username" />  
  27.         <property name="regdate" length="19"/>  
  28.         <property name="orgtype" length="1"/>  
  29.     </class>  
  30. </hibernate-mapping>  


         5,上边已经做好了实体类和数据表的映射了,我们可以通过Hibernate框架提供的方法进行对数据库的数据操作了,简单看一个dao层类的实现:

 

 

 

 

[java] view plain copy
 
  1. public void insert(User user) {  
  2.     //加载配置文件:classpath:hibernate.cfg.xml  
  3.     Configuration config = new Configuration().configure();  
  4.     //创建连接工厂  
  5.     SessionFactory sf = config.buildSessionFactory();  
  6.       
  7.     //会话对象,表示与数据库的连接会话过程,相当于jdbc的connection连接对象  
  8.     Session session = null;  
  9.     Transaction tx = null ;  
  10.     try {  
  11.         //获取会话对象  
  12.         session = sf.openSession();  
  13.         //打开事务:Hibernate默认数据操作是不提交事务的,所以我们要手动提交事务。  
  14.         tx = session.beginTransaction();  
  15.         //保存对象,持久化操作  
  16.         session.save(user);  
  17.         //提交事务  
  18.         tx.commit();                  
  19.     } catch (Exception e) {  
  20.         e.printStackTrace();  
  21.         //事务回滚  
  22.         tx.rollback();  
  23.     } finally{  
  24.         //连接会话关闭  
  25.         if(session!=null){  
  26.             session.close();  
  27.         }  
  28.     }         
  29. }  


 

          这样一看我们的方法写的代码也是挺多了,想说的是这里只是写出了Hibernate框架是从创建sessionFactory对象,然后创建session对象,通过session对象进行对数据库的操作。其实真正的开发中,我们会把这些对象,事务的操作交给框架来管理,我们需要做的就是持久化操作的那些代码,是非常少的。

 

          综上为Hibernate实现一个简单插入user数据的例子,当然如果数据库关系复杂了,或者更多的设置,后边会进行相关总结。最后来看看Hibernate框架的优缺点吧,当然这些优缺点都是相对而言呢,看用在什么环境下了!

          优点:1,轻量级的ORM框架

                        2,对JDBC进行了很好的封装,使用了ORM做了映射,那么就可以通过面向对象的方式很容易的操作数据库了。

                        3,它还提供了缓存机制,可以提高效率。等

 

           缺点:1,如果对大量的数据进行频繁的操作,性能效率比较低,不如直接使用JDBC

 

     总而言之对于框架,我们利用其优秀的一面,避开其不好的一面,使其对我们开发发挥最大的作用即可!!!







以上是关于Hibernate框架的主要内容,如果未能解决你的问题,请参考以下文章

框架之 hibernate简单入门

hibernate框架的简单入门

Hibernate框架基础

快速构建hibernate框架

框架学习 Hibernate框架学习 Hibernate概念和api使用

ssh框架 hibernate 多表查询出的vo对象如何处理