QQ咨询 请直接点击通话王老师 请直接点击通话就业老师 电话咨询 北大青鸟咨询电话

开班截止日

  • 【少量】 9月8日 全日制
  • 【少量】 9月6日 业余制
  • 【热招】 9月15日 全日制
  • 【热招】 9月13日 业余制
  • 公益讲座

    时间:2008年9月7日13点30分
    主题:个人主页设计
    主讲:中心IT讲师
    地点:南昌路47号(雁荡路84号)科学会堂二号楼二楼
    敬请光临!

    中文短信平台:
    编辑 "上海北大青鸟" 至12114
    --------------------------
    报名咨询
    电话:021-53063155
    电话:021-53061138
    免费电话:800-820-1253

    北大青鸟中心地图中心地图

    公交:01 02 24 36 41 42 104 109 126 128 781 786 911 926 930 933隧道八线 大桥一线

    地铁:1号线黄陂南路1号出口即可到达

    当前位置:师资力量 >> 学术论文 >>

    Hibertnate简介

    Hibernate技术概述

    在Java环境下,有多种对象关系映射方法,如实体Bean、OJB、JDO、JDBC等。Hibernate是一个开源的持久层框架,是一种新的O/R映射工具,它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制。Hibernate非常简单易学,目前国内有很多同行已经或正在用Hibernate开发实施项目。Hibernate 提供了以下的功能:

    1. 多映射策略
    2. Transitive persistence
    3. 单对象与多表间映射
    4. 支持集合映射
    5. 多态关联
    6. 定制SQL查询
    Hibernate的体系结构


    1-1 hibernate体系结构图

    如图1-1所示Hibernate API提供了五大核心接口:
    Configuration 接口
    Configuration 接口的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动
    过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个
    SessionFactory对象。


    Transaction 接口
    Transaction 接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA 中的UserTransaction、甚至可以是CORBA 事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移值。
    Query 和Criteria接口
    Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本
    地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。Criteria接口与Query接口非常类似,它允许你创建并执行面向对象的标准化查询。
    值得注意的是Query接口也是轻量级的,它不能在Session之外使用。
    Callback 接口
    当一些有用的事件发生时――例如持久对象的载入、存储、删除时,Callback 接口会通知
    Hibernate去接收一个通知消息。一般而言,Callback接口在用户程序中并不是必须的,但你要在你的项目中创建审计日志时,你可能会用到它。

    Hibernate的开发步骤
    1. 完成数据库通讯配置
    2. 完成O-R映射的配置
    3. 加载数据库通讯配置,创建Hibernate的会话
    4. 根据O-R映射实现持久化类
    5. 编写数据库访存代码
    Hibernate的配置
    配置数据源,建立Hibernate与数据库通讯

           一个典型的hibernate.cfg.xml配置文件如下:


    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-2.0.
    dtd">
    <hibernate-configuration>
    <!—- SessionFactory 配置 -->
    <session-factory>
    <!—- 数据库URL -->
    <property name="hibernate.connection.url">
    jdbc:mysql://localhost/sample
    </property>
    <!—- 数据库JDBC驱动 -->
    <property name="hibernate.connection.driver_class">
    org.gjt.mm.mysql.Driver
    </property>
    <!—- 数据库用户名 -->
    <property name="hibernate.connection.username">
    User
    </property>
    <!—- 数据库用户密码 -->
    <property name="hibernate.connection.password">
    Mypass
    </property>
    <!--dialect ,每个数据库都有其对应的Dialet以匹配其平台特性 -->
    <property name="dialect">
    net.sf.hibernate.dialect.MySQLDialect
    </property>
    <!—- 是否将运行期生成的SQL输出到日志以供调试 -->
    <property name="hibernate.show_sql">
    True
    </property>
    <!—- 是否使用数据库外连接 -->
    <property name="hibernate.use_outer_join">
    True
    </property>
    <!—- 事务管理类型,这里我们使用JDBC Transaction -->
    <property name="hibernate.transaction.factory_class">
    net.sf.hibernate.transaction.JDBCTransactionFactory
    </property>
    <!—映射文件配置,注意配置文件名必须包含其相对于根的全路径 -->
    <mapping resource="net/xiaxin/xdoclet/TUser.hbm.xml"/>
    <mapping resource="net/xiaxin/xdoclet/TGroup.hbm.xml"/>
    </session-factory>
    </hibernate-configuration>

    一个典型的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
    配置O-R映射,建立对象与关系的映射

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!--
    Mapping file autogenerated by MyEclipse - Hibernate Tools
    -->
    <hibernate-mapping>
    <class name="com.myaccp.db.Userinfo" table="userinfo" schema="dbo" catalog="test">
    <id name="id" type="java.lang.Integer">
    <column name="id" />
    <generator class="assigned" />
    </id>
    <property name="loginName" type="java.lang.String">
    <column name="loginName" length="20" not-null="true" />
    </property>
    <property name="pwd" type="java.lang.String">
    <column name="pwd" length="20" not-null="true" />
    </property>
    <property name="trueName" type="java.lang.String">
    <column name="trueName" length="20" not-null="true" />
    </property>
    </class>
    </hibernate-mapping>

    Eclipse下配置

    Hibernate的数据访存代码
    加载数据源配置,创建与数据库通讯的会话

    Configuration cfg= new Configuration(). cfg.configure();
    SessionFactory factory= cfg.buildSessionFactory();
    Session session=factory.OpenSession();

    Configuration cfg= new Configuration().cfg.configure(“myhibernate.cfg.xml”);
    SessionFactory factory= cfg.buildSessionFactory();
    Session session=factory.OpenSession();

    数据更新
    1. 插入

    Userinfo user= new Userinfo(new Integer(1),"accp","accp","accp");
    tx=session.beginTransaction();
    session.save(user);
    tx.commit();

    1. 更改

    Userinfo user= new Userinfo(new Integer(1),"accp","1234","accp");
    tx=session.beginTransaction();
    session.saveOrUpdate (user);
    tx.commit();

    1. 删除

    Userinfo user= new Userinfo(new Integer(1),"accp","1234","accp");
    tx=session.beginTransaction();
    session.delete (user);
    tx.commit();

    数据查询
    HQL查询

    public List findbyHQL(String loginname,String password){
        List userlist = null;
        log.debug("Query Userinfo");
        try {
        String hql="from Userinfo user where user.loginName=? and user.pwd=?";
        Query query=getSession().createQuery(hql);
        query.setString(0, loginname);
        query.setString(1, password);
        userlist = query.list();
                log.debug("Query Userinfo end ");
            } catch (RuntimeException re) {
                log.error("Query failed", re); throw re;
            }
        return userlist;}

                                                      

    Criteria 查询

    public List findbyCriteria(){
        List userlist = null;
        log.debug("Criterion Userinfo");
       try {
        Criteria cri=(Criteria) getSession().createCriteria(Userinfo.class);
      cri.add(Expression.eq("loginName", "accp"));
            userlist= cri.list();
                log.debug("Criterion Userinfo end ");
            } catch (RuntimeException re) {
                log.error("Criterion failed", re);
                throw re;}
    return userlist;}

    附言:
    hibernate的发布网站:http://www.hibernate.org.cn/
    以上配置和代码在Eclipse5.0和hibernate3上测试

    友情提示:如果您对北大青鸟的学费、课程、就业有疑问,可以拨打免费电话: 800-820-1253 和我们北大青鸟联系!政府注资并监管,就业有保障。也可直接 QQ交谈请直接点击通话王老师

    在线客服
    网站客服