1,POJO
     POJO在Hibernate语义中理解为数据库表所对应的Domain Object。这里的POJO就是所谓的"Plain Ordinary Java Object",字面上讲就是无格式普通Java对象,简单的可以理解为一个不包含逻辑代码的值对象(Value Object---VO)。
   一个典型的POJO:
public class TUser implements Serializable {
  private String name;
  public User(String name) {
    this.name = name;
  }
  /** default constructor */
  public User() {
  }
  public String getName() {
    return this.name;
  }
  public void setName(String name) {
    this.name = name;
  }
}

2,Hibernate映射文件
   Hibernate从本质上来讲是一种"对象-关系型数据映射"(Object Relational Mapping---ORM)。前面的POJO在这里体现的就是ORM中Object层的语义。而映射(Mapping)文件则是将对象(Object)与关系型数据库(Relational)相关联的纽带,在Hibernate中,映射文件通常以".hbm.xml"作为后缀。

由数据库产生基础代码
   通过Hibernate官方提供的MiddleGen for Hibernate和Hibernate_Extension工具包,我们可以很方便的根据现有数据库,导出数据库表结构,生成ORM和POJO。

Hibernate配置
   前面已经得到了映射文件和POJO,为了使Hibernate能真正运作起来,我们还需要一个配置文件。
   Hibernate同时支持XML格式的配置文件,以及传统的properties文件配置方式,不过这里建议采用XML型配置文件。XML配置文件提供了更易于读的结构和更强的配置能力,可以直接对映射文件加以配置,而在properties文件中则无法配置,必须通过代码中的Hard Coding加载对应的映射文件。
   配置文件名默认为hibernate.cfg.xml(或者 hibernate.properties),Hibernate初始化期间会自动在CLASSPATH中寻找这个文件,并读取其中的配置信息,为后期数据库操作做好准备。
   配置文件应部署在CLASSPATH中,对于WEB应用而言,配置文件应放置在/WEB-INF/classes目录下。
   一个典型的hibernate.cfg.xml配置文件如下:

http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
         jdbc:mysql://localhost/sample
         org.gjt.mm.mysql.Driver 
         User
         Mypass
         net.sf.hibernate.dialect.MySQLDialect
         True
         True
         net.sf.hibernate.transaction.JDBCTransactionFactory
     
   一个典型的hibernate.properties配置文件如下:
   hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
   hibernate.connection.driver_class org.gjt.mm.mysql.Driver
   hibernate.connection.driver_class com.mysql.jdbc.Driver
   hibernate.connection.url jdbc:mysql:///sample
   hibernate.connection.username user
   hibernate.connection.password mypass

第一段代码
   下面这段代码是一个JUnit TestCase,演示了Tuser对象的保存和读取。
public class hiberanteTest extest TestCase {

  Session session = null;
 
  /**
   *JUnit中setUp方法在TestCase初始化的时候会自动调用
   *一般用于初始化公有资源
   *此例中,用于初始化Hibernate Session
   */
  protected void setUp() {
    try {
      /**
       *采用hibernate.properties配置文件的初始化代码:
        *Configuration config = new Configuration();
       *config.addClass(TUser.class);
       */

      //采用hibernate.cfg.xml配置文件
       //请注意初始化Configuration时的差异:
       //1,Configuration的初始化方式
       //2,xml文件中已经定义了Mapping文件,因此无需再Hard Coding导入POJO文件的定义。
       Configuration config = new Configuration().configure();
      SessionFactory sessionFactory = config.buildSesssionFactory();
      session = sessionFactory.openSession();
    }catch(HibernateException e) {
      e.printStackTrace();
    }
  }

  /*
   *与setUp方法相对应,JUnit TestCase执行完毕时,会自动调用tearDown方法,一般用于资源释放
   *此例中,用于关闭在setUp方法中打开的Hibernate Session
   */
  protected void tearDown() {
    try {
      session.close();
    }catch(HibernateException e) {
      e.printStackTrace();
    }
  }

  /**
   *对象持久化(Insert)测试方法
   *JUnit中,以"test"作为前缀的方法为测试方法,将被JUnit自动添加到测试计划中运行
   */
  public void testInsert() {
    try {
      TUser user = new TUser();
      user.setName("Emma");
      session.save(user);
      session.flush();
    }catch(HibernateException e) {
      e.printStackTrace();
      Assert.fail(e.getMessage());
    }
  }

  /**
   *对象读取(Select)测试
   *请保证运行之前数据库中已经存在name='Erica'的记录
   */
   public void testSelect() {
     String hql = " from TUser where name = 'Erica'";
     try {
       List userList = session.find(hql);
       TUser user = (TUser)userList.get(0);
       Asset.assertEquals(user.getName(),"Erica");
     }catch(HibernateException e) {
       e.printStackTrace();
       Assert.fail(e.getMessage());
     }
   }
}
   同时我们已经成功实现了一个简单的TUser实例的保存和读取。可以看到,程序中通过少量代码实现了Java对象和数据库数据的同步,同时借助Hibernate的有力支持,轻松实现了对象到关系型数据库的映射。
   相对传统的JDBC数据访问模式,这样的实现无疑更符合面向对象的思想,同时也大大提高了开发效率。
   上面的代码中引入了几个Hibernate基础语义:
   1)Configuration
   2)SessionFactory
   3)Session
   下面就这几个关键概念进行探讨。

Hibernate基础语义
1,Configuration
   正如其名,Configuration类负责管理Hibernate的配置信息。Hibernate运行时需要获取一些底层实现的基本信息,其中关键属性包括:
   1)数据库URL
   2)数据库用户
   3)数据库用户密码
   4)数据库JDBC驱动类
   5)数据库dialect,用于对特定数据库提供支持,其中包括了针对特定数据库特性的实现,如Hibernate数据库类型到特定数据库数据类型的映射等。
   当我们调用:Configuration config = new Configuration().configure();时,Hibernate会自动在当前的CLASSPATH中搜寻hibernate.cfg.xml文件并将其读取到内存中作为后续操作的基本配置。Configuration类一般只有在获取SessionFactory时需要涉及,当获取SessionFactory之后,由于配置信息已经由Hibernate维护并绑定在返回的SessionFactory之上,因此一般情况下无需再对其进行操作。
   我们也可以指定配置文件名,如果不希望使用默认的hibernate.cfg.xml文件作为配置文件的话:
   File file = new File("c:samplemyhibernate.xml");
   Configuration config = new Configuration().configure(file);

SessionFactory
   SessionFactory负责创建Session实例。我们可以通过Configuration实例构建SessionFactory:
   Configuration config = new Configuration().configure();
   SessionFactory sessionFactory = config.buildSessionFactory();
   Configuration实例config会根据当前的配置信息,构造SessionFactory实例并返回。SessionFactory一旦构造完毕,即被赋予特定的配置信息。也就是说,之后config的任何变更将不会影响到已经创建的SessionFactory实例(sessionFactory)。如果需要使用基于改动后的config实例的sessionFactory,需要从config重新构建一个SessionFactory实例。

Session
   Session是持久层操作的基础,相当于JDBC中的Connection。
   Session实例通过SessionFactory实例构建:
   Configuration config = new Configuration().configure();
   SessionFactory sessionFactory = config.buildSessionFactory();
   Session session = sessionFactory.openSession();
   之后我们就可以调用Session所提供的save,find,flush等方法完成持久层操作:
   1)Find:
   String hql = " from TUser where name='Erica'";
   List userList = session.find(hql);
   2)Save:
   TUser user = new TUser();
   user.setName("Emma");
   session.save(user);
   session.flush();
   最后调用Session.flush方法强制数据库同步,这里即强制Hibernate将user实例立即同步到数据库中。如果在事务中则不需要flush方法,在事务提交的时候,hibernate自动会执行flush方法,另外当Session关闭时,也会自动执行flush方法。