Hibernate简介

1 hibernate概述

Hibernate是冬眠的意思,它是指动物的冬眠,但是本文讨论的Hibernate却与冬眠毫无关系,而是接下来要讨论的SSH2框架中的一员。Hibernate是一个开源的项目,它是一个对象关系模型的框架,并且对JDBC进行了非常轻量级的封装,程序员在开发时可以使用对象编程思维进行开发。

        Note:轻量级和重量级的区别,轻量级的框架包较小,并且使用较简单,而且测试容易,开发效率高;重量级框架则包较大,内部封装的业务过程较复杂,测试困难,如Struts。


2 对象关系型模型

    Hibernate实现了对象--关系模型的映射,在编程时程序员能够直接使用对象模型对数据库进行操作,它对JDBC进行了轻量级的封装,另外还封装了对数据库操作的SQL语句,使用简单。虽然它有很多优点,但是使用数据库特性的语句,将很难调优,如:存储过程等就比较困难。

 3 Hibernate优缺点

      (1)优点
    ①  提高生产力;
②  使开发更加对象化(阻抗不匹配);
③  可移植性;
④  没有侵入性,支持透明持久化。
     (2)缺点
①  使用数据库特性的语句,将很难调优;
②  对大批量数据更新存在问题;
③  系统中存在大量的统计查询功能。


二、Hibernate实例


       上文对Hibernate做了一些初步的解读,有了理论当然更要有实践,没有使用过Hibernate是不懂得它的便利的,这正如一个喜欢喝酒的人第一次品尝到茅台一样,使用后才能更深刻的理解。
       下面的实例采用了MySQL数据库,在MySQL中创建了一个名为Hibernate_first的数据库,并通过Hibernate的映射文件采用对象化编程的方法创建了一个User表,并向User表中添加信息。

  具体步骤:

      (1)创建一个普通的Java Application;
      (2)添加Hibernate的jar包,添加jar包时需要将Hibernate.jar、Hibernate引用的第三方jar包以及Hibernate和mysql连接的jar包一同引入其中;
      (3)添加数据库连接配置文件Hibernate.cfg.xml。

在CODE上查看代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC  
  3.         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4.         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  5. <hibernate-configuration>  
  6.     <session-factory>  
  7.         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
  8.         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>  
  9.         <property name="hibernate.connection.username">root</property>  
  10.         <property name="hibernate.connection.password">ab12</property>  
  11.         <!-- dialect:方言,封装的底层API,类似于Runtime,将数据库转换为配置中的相应的语言 -->  
  12.         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
  13.           
  14.         <!-- 设置数据显示对数据库的操作 -->  
  15.         <property name="hibernate.show_sql">true</property>  
  16.           
  17.         <property name="hibernate.format_sql">true</property>  
  18.         <mapping resource="com/hibernate/User.hbm.xml"/>  
  19.     </session-factory>  
  20. </hibernate-configuration>  

      (4)建立实体类名称为User.java

  1. package com.hibernate;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class User {  
  6.     private String id;  
  7.     public String getId() {  
  8.         return id;  
  9.     }  
  10.     public void setId(String id) {  
  11.         this.id = id;  
  12.     }  
  13.     public String getName() {  
  14.         return name;  
  15.     }  
  16.     public void setName(String name) {  
  17.         this.name = name;  
  18.     }  
  19.     public String getPassword() {  
  20.         return password;  
  21.     }  
  22.     public void setPassword(String password) {  
  23.         this.password = password;  
  24.     }  
  25.     public Date getCreateTime() {  
  26.         return createTime;  
  27.     }  
  28.     public void setCreateTime(Date createTime) {  
  29.         this.createTime = createTime;  
  30.     }  
  31.     public Date getExpireTime() {  
  32.         return expireTime;  
  33.     }  
  34.     public void setExpireTime(Date expireTime) {  
  35.         this.expireTime = expireTime;  
  36.     }  
  37.     private String name;  
  38.     private String password;  
  39.     private Date createTime;  
  40.     private Date expireTime;  
  41. }  

      (5)创建User实体类的映射文件User.hbm.xml,完成实体类的映射,并将该文件加入到Hibernate.cfg.xml文件中。

  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!-- Generated 2014-4-30 15:39:33 by Hibernate Tools 3.4.0.CR1 -->  
  5. <hibernate-mapping>  
  6.     <class name="com.hibernate.User">  
  7.         <id name="id">  
  8.             <generator class="uuid"/>  
  9.         </id>  
  10.         <property name="name"/>  
  11.         <property name="password"/>  
  12.         <property name="createTime"/>  
  13.         <property name="expireTime"/>  
  14.     </class>  
  15. </hibernate-mapping>  

     (6)编写ExportDB.java,将映射文件转化为相应的DDL。
在CODE上查看代码片
  1. package com.hibernate;  
  2.   
  3. import org.hibernate.cfg.Configuration;  
  4. import org.hibernate.tool.hbm2ddl.SchemaExport;  
  5.   
  6. /** 
  7.  * 将hbm生成ddl 
  8.  * @author zhang 
  9.  * 
  10.  */  
  11. public class ExportDB {  
  12.     public static void main(String[] args){  
  13.         //首先声明获取配置文件  
  14.         //默认读取Hibernate.cfg.xml文件  
  15.         Configuration cfg=new Configuration().configure();    
  16.           
  17.         //将读取到的xml文件导出到ddl  
  18.         SchemaExport export=new SchemaExport(cfg);  
  19.         export.create(truetrue);  
  20.     }  
  21. }  

        运行ExportDB类即可完成数据库表的创建工作,在cmd中查看具体操作后的视图如下:
      上面的例子只是完成了连接数据库及在数据库中创建表的操作,创建完表后要向表中添加数据,建立客户端类Client,向User表中添加新的用户信息,具体代码如下:

  1. package com.hibernate;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.hibernate.Session;  
  6. import org.hibernate.SessionFactory;  
  7. import org.hibernate.cfg.Configuration;  
  8.   
  9. public class Client {  
  10.     public static void main(String[] args){  
  11.           
  12.         //读取hibernate.cfg.xml文件  
  13.         Configuration cfg=new Configuration().configure();  
  14.           
  15.         //创建sessionfactory,相当于数据库镜像,sessionfactory因为是镜像所以就一份,最好创建一次  
  16.         //通常是线程安全的。  
  17.         SessionFactory factory=cfg.buildSessionFactory();  
  18.           
  19.         //取的session  
  20.         Session session=null;  
  21.           
  22.         try{  
  23.             session=factory.openSession();  
  24.             //开启事务  
  25.             session.beginTransaction();  
  26.             User user=new User();  
  27.             user.setName("张三");  
  28.             user.setPassword("123");  
  29.             user.setCreateTime(new Date());  
  30.               
  31.             //保存User对象  
  32.             session.save(user);  
  33.               
  34.             //提交事务  
  35.             session.getTransaction().commit();  
  36.         }catch(Exception e){  
  37.             e.printStackTrace();//打印错误信息  
  38.             //回滚事务  
  39.             session.getTransaction().rollback();  
  40.         }finally{  
  41.             if(session != null){  
  42.                 if(session.isOpen()){  
  43.                     //关闭session  
  44.                     session.close();  
  45.                 }  
  46.             }  
  47.         }  
  48.     }  
  49. }  

        在mysql中查看添加的信息显示如下图:


       上面操作的信息已经写入到数据库中,数据库中的数据在save之后在数据库中生成了相应的行,但是此时还没有真正的保存,而是在数据库中已经有相对应的行数据,当使用session的事务提交完成后才把数据提交到了数据库中。在映射的整个过程中它涉及到了对象的状态的转换,我们称之为持久对象生命周期,有关生命周期的内容将会在下篇博客着重讨论。


结语


        本文对Hibernate的基本使用方法进行了简单的介绍,它的这种映射关系使得对数据库的操作变得很简单,开发人员只需要关系对象模型即可,而不需要再去编写复杂的关系模型语句,但是Hibernate同样也编写查询语句,她就是HQL,具体使用方法将会在以后讨论。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值