一、Hibernate是什么

二、Hibernate的优缺点

三、Hibernate的最基本配置

四、Hibernate的两种实体映射方式

 

一、Hibernate是什么

        Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

二、Hibernate的优缺点

优点:总体而言,运用框架是为了简化代码,提高编码效率

除此之外,hibernate还使开发对象化,面向对象,

                   移植性高,可与各数据库连接操作

                   支持事务管理,使数据库操作安全

                   提供缓存机制,提高运行效率

缺点:hibernate更适合单一对象的增删查改,不适合批量操作

三、Hibernate的最基本配置

本实例来自于尚学堂马士兵老师的教程实例

先给大家看一下hibernate的测试类,也是最基本的调用方式

  1. package com.bjsxt.hibernate;  
  2.  
  3. import org.hibernate.Session;  
  4. import org.hibernate.SessionFactory;  
  5. import org.hibernate.cfg.AnnotationConfiguration;  
  6.  
  7. public class Test {  
  8.     public static void main(String[] args) {  
  9.         //实例化实体类student  
  10.         Student s = new Student();  
  11.         s.setId(1);  
  12.         s.setName("zhangsan");  
  13.         s.setAge(8);  
  14.           
  15.         //新建一session工厂  
  16.         SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();  
  17.         //获取当前session  
  18.         Session session = sessionFactory.getCurrentSession();  
  19.         //开始事务  
  20.         session.beginTransaction();  
  21.         //利用session将实例化的student插入数据库中  
  22.         session.save(s);  
  23.         //关闭事务,此时session也随之关闭  
  24.         session.getTransaction().commit();  
  25.           
  26.     }  
  27. }  

hibernate.cfg.xml一般放在src目录下:

  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.  
  6. <hibernate-configuration> 
  7.  
  8.     <session-factory> 
  9.  
  10.         <!-- Database connection settings --> 
  11.         <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
  12.         <!-- hibernate为数据库名 --> 
  13.         <property name="connection.url">jdbc:mysql://localhost/hibernate</property> 
  14.         <!-- 用户名为root --> 
  15.         <property name="connection.username">root</property> 
  16.         <!-- 密码为root --> 
  17.         <property name="connection.password">root</property> 
  18.  
  19.         <!-- JDBC connection pool (use the built-in) --> 
  20.         <property name="connection.pool_size">1</property> 
  21.  
  22.         <!-- SQL dialect --> 
  23.         <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
  24.  
  25.         <!-- Enable Hibernate's automatic session context management --> 
  26.         <property name="current_session_context_class">thread</property> 
  27.  
  28.         <!-- Disable the second-level cache  --> 
  29.         <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 
  30.  
  31.         <!-- Echo all executed SQL to stdout --> 
  32.         <property name="show_sql">true</property> 
  33.  
  34.         <!-- Drop and re-create the database schema on startup --> 
  35.         <property name="hbm2ddl.auto">update</property> 
  36.  
  37.         <mapping resource="com/bjsxt/hibernate/Student.hbm.xml"/> 
  38.         <mapping class="com.bjsxt.hibernate.Teacher"/> 
  39.     </session-factory> 
  40.  
  41. </hibernate-configuration> 

学生实体类Student.java

  1. package com.bjsxt.hibernate;  
  2.  
  3. public class Student {  
  4.     private int id;  
  5.     private String name;  
  6.     private int age;  
  7.     public int getId() {  
  8.         return id;  
  9.     }  
  10.     public void setId(int 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 int getAge() {  
  20.         return age;  
  21.     }  
  22.     public void setAge(int age) {  
  23.         this.age = age;  
  24.     }  
  25. }  
Student映射文件Student.hbm.xml
  1. <?xml version="1.0"?> 
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  5.  
  6. <hibernate-mapping> 
  7.     <class name="com.bjsxt.hibernate.Student"> 
  8.         <id name="id" /> 
  9.         <property name="name" /> 
  10.         <property name="age" /> 
  11.     </class> 
  12.       
  13. </hibernate-mapping> 

四、Hibernate的两种实体映射方式

在上面实例中已经讲到了一种实体映射方式,在hibernate.cfg.xml中 <mapping resource="com/bjsxt/hibernate/Student.hbm.xml"/> ,然后在Student.hbm.xml中指向实体类Student.java。

 

还有一种映射方式是直接采用annotation注释的方式,这样可以将hbm.xml文件省略:

下面,我们采用Teacher类来说明此种方式,首先要在hibernate.cfg.xml中添加<mapping class="com.bjsxt.hibernate.Teacher"/> 然后附上Teacher代码如下:

在类上加上@Entity ,再在主键ID上加上@Id ,测试类类似,不在赘述。

  1. package com.bjsxt.hibernate;  
  2.  
  3. import javax.persistence.Entity;  
  4. import javax.persistence.Id;  
  5.  
  6. @Entity 
  7. public class Teacher {  
  8.     private int id;  
  9.     private String name;  
  10.     private String title;  
  11.       
  12.     @Id 
  13.     public int getId() {  
  14.         return id;  
  15.     }  
  16.     public void setId(int id) {  
  17.         this.id = id;  
  18.     }  
  19.     public String getName() {  
  20.         return name;  
  21.     }  
  22.     public void setName(String name) {  
  23.         this.name = name;  
  24.     }  
  25.     public String getTitle() {  
  26.         return title;  
  27.     }  
  28.     public void setTitle(String title) {  
  29.         this.title = title;  
  30.     }  
  31. }  

最后附上附件中引用到的jar包清单

jar包名称
说明
antlr-2.7.6.jar
解析HQL
aspectjrt
AOP
aspectjweaver
AOP
cglib-nodep-2.1_3.jar
代理,二进制增强
common-annotations.jar
@Resource
commons-collections-3.1.jar
集合框架
dom4j-1.6.1.jar
解析xml
ejb3-persistence
@Entity
hibernate3.jar
 
hibernate-annotations
 
hibernate-common-annotations
 
javassist-3.9.0.GA.jar
hibernate
jta-1.1.jar
hibernate transaction
junit4.5
 
mysql-
 
slf4j-api-1.5.8.jar
hibernate-log
slf4j-nop-1.5.8.jar