首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate (引见一)

2012-11-01 
Hibernate (介绍一)随着java技术的逐渐成熟与完善,作为建立企业级应用的标准平台,J2EE得到了长足的发展。借

Hibernate (介绍一)




随着java技术的逐渐成熟与完善,作为建立企业级应用的标准平台,J2EE得到了长足的发展。借助于J2EE规范中包含的多项技术。Enterprise javaBean(EJB),Java Servelts(servlet),java server Pages(jsp) java Message Services(JMS)等 开发出许多应用的系统,但是,在传统的J2EE应用开发过程中也出现了一些问题 1) 数据模型和逻辑模型之间的矛盾,目前使用的数据库基本上都是关系型数据库,而java本质上一种面向对象的语言,对象在存储和读取时使用SQL和JDBC进行数据操作,降低了编程的效率以及系统的可维护性。 2) 传统的J2EE应用多采用基于EJB的重量级框架,这种框架适合于开发大型企业应用,但是使用EJB容器进行开发和调试需要耗费大量时间,为降低代码大的耦合性,提高系统的开发效率   提出了一种基于struts框架和Hibernate框架的J2EE 应用的开发策略! 以前大体的接触过但是没有仔细研究过,这两天刚开始进行学习,写本博客的目的是为了加深技术的巩固,如果有不准确的地方请多多包含!

     废话不多说了 咱就先从Hibernate数据持久层框架开始说起!

    HIbernate是一个数据持久层框架,是一种实现的对象和关系之间映射(O/R Mapping)的工具,他能支持                                              它对JDBC进行了轻量级的对象封装,是程序员可以是用对象编程思想来操作数据库,它不仅提供了从java类 到数据表的映射,也提供了数据查询和恢复机制,相对于使用JDBC和SQL来操作数据库,使用了Hibernae能大大的提高实现效率!

HIbernate框架用配置文件的形式来定义java对象和数据库表之间的映射关系,同时在更深的层面讲数据库表之间的关系解释为对象之间java对象之间的继承以及包含等关系,通过HQL语句将复杂的关系算法用对象的方式描述。在很大程度上简化了对象的数据查询,加快了开发的效率,在hibernate种有一个简单而之间的API,用于对数据库说表示的对象执行查询,要创建或修改这些对象,只需在在程序与他们进行交互。然后告诉hibernate保存即可。这样,大量封装持久化操作的业务逻辑也不再需要编写繁琐的JDBC语句,从而使数据持久层得到极大的简化!





1 新建一个java项目 (java项目即可,因为我们知道hibernate它能支持透明持久化从这个角度来看它没有侵入性 所谓侵入性它没有侵入hibernate任何的API所以它叫轻量级框架,轻量级框架的好处是没有侵入性 另外的一个好处是为测试带来了好处,测试非常简单 测试就行我们写普通的java应用程序一样不需要什么环境只需要几个jar包就可以了写个main函数一侧就可以了 它没有侵入性和测试非常简单 这是它流行的一个原因。所以我们建立一个java项目就可以了 )
2 创建User Library  假如jar

导入jar文件 这样很麻烦的 所以我们建立一个自定义的库 以后用的时候直接导入就可以了

创建方式:windows-Preferences--java  里面有一个Build Path 选中User Libraies 就可以了 new 一下,名称可以随便起 我们这里叫Hibernate3就可以了 需要注意的是下面的那个单选框 不要选中!下一步为这个库导入需要的jar就可以了 这样我们的User Libeaies库就已经建立好了  但是我们还需要引用到工程里面

单击工程--右键 --properties---Java Build Path ----Libraries    ---add  Library  找到User Library   然后Next 选中 点击OK就可以了
3 创建hibernate配置文件  hibernate.cfg.xml 为了便于调试 最好加入log4j配置文件 在这里面配置数据库我们先放到src目录下吧



<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
        <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
        <property name="connection.url">jdbc:microsoft:sqlserver://localhost:1433;databasename=xinyang</property>
        <property name="connection.username">sa</property>
        <property name="connection.password">sa</property>
        <property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
        <property name="myeclipse.connection.profile">many2one</property>
        <property name="hibernate.show_sql">true</property>
       
     <mapping resource="com/xinyang/bean/Users.hbm.xml"/><!-- 要放到property属性后面 -->
    </session-factory>
</hibernate-configuration>





下面我们架构配置完成了下面我 我说点废话 :

使用Hibernate我们正确的使用方式是什么 ,应该先建立对象模型不应该先建表,这是正确的思维方式 但是有些公司还是先创建表 在做 在使用hibernate  这样就不O了 ,因为表式面向关系的,所以我们先建立实体类 



4:定义实体类



package com.xinyang.bean;
import java.util.Date;
public class Users {
private String id;//表示ID
private String name;
private String password;
private Date createTime;//生效日期
private Date expireTime;//过期日期

   get ,set ()方法

}

5:我们建立映射文件 这个映射文件的名字和路径是可以随便取的,他的目录通常是和实体类放在一起,因为这个映射文件时描述实体类中的属性的 所以通常称为元数据,元数据是描述类和类中属性关系的 ,





<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.xinyang.bean.Users"><!-- 实体类的目录 -->
  <id name="id">
   <generator class="uuid"/><!-- 全局的唯一标识 配置生成策略-->
  </id>
  <property name="name"/> <!-- 普通属性用property -->
  <property name="password"/>
  <property name="createTime"/><!-- hibernate有一套java到数据库的映射机制根据属性自己配置字段的数据类型 -->
  <property name="expireTime"/>
</class>
</hibernate-mapping>

当然表名和列名可以重新命名 我们以后在讲 ,它们默认的和属性名一致,表明和实体类名一致










6  编写hbm2ddl工具类讲实体类生成数据库表

package com.xinyang.hibernate;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

/**
* 生成表-
* @author Administrator
*-
*/
public class ExportDB {

public static void main(String[] args){
  //用到Hibernate API Configuration 作用 :读取配置文件-hibernate.cfg.xml
// Configuration cfg=new Configuration(); 读取hibernate.properties文件
  Configuration cfg=new Configuration().configure();
  SchemaExport export=new SchemaExport(cfg);
  export.create(true, true);
 
}
}

注意在生成之前 要把数据库建立起来 ,数据库名称它不会自动创建

7  我们写一个客户端  往里面插入一条数据测试下

package com.xinyang.servlet;

import java.util.Date;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.xinyang.bean.Users;

public class Client {
public static void main(String[] args){
  //读取hibernate.cfg.xml文件
  Configuration cfg=new Configuration().configure();
  //一个数据库对应一个sessionFactory 
  //创建SessionFactory
  SessionFactory factory=cfg.buildSessionFactory();
 
  //session对connection进行封装
  org.hibernate.Session session=null;
 
  try{
   session=factory.openSession();
   //开启事物
   session.beginTransaction();
   Users user=new Users();
   user.setName("张三");
   user.setPassword("123");
   user.setCreateTime(new Date());
   user.setExpireTime(new Date());
   session.save(user);
   //提交事物
   session.getTransaction().commit();
  }catch(Exception e){
   e.printStackTrace();
   //回滚事物
    session.getTransaction().rollback();
  }finally{
   if(session!=null){
    if(session.isOpen()){
     session.close();
    }
   }
  }
}
}

热点排行