.Net转Java自学之路—Hibernate框架篇三十五(Hibernate入门)

Hibernate:

  JavaEE三层结构:

    1、web层:Struts2框架作用在该层。

    2、Service层:Spring框架作用在该层。

    3、dao层:Hibernate框架作用在该层。对数据库进行crud(增删改查)操作。

  概述:

    Hibernate框架:

      1、应用在JavaEE三层结构中DAO层框架。

      2、在dao层中做对数据库crud操作,使用Hibernate实现crud操作,Hibernate底层代码就是jdbc,Hibernate对jdbc进行封装。使用Hibernate的好处,是不需要写复杂的jdbc代码,不需要写SQL语句就可以实现对数据库的crud操作。

      3、开源的轻量级框架。

  ORM思想:

    1、Hibernate使用ORM思想对数据库进行crud操作。

    2、Object Relational Mapping 对象关系映射。

    文字描述:

      1、让实体类和数据库进行一一对应关系。让实体类首先和数据库表对应;让实体类属性和表中字段对应。

      2、不需要直接操作数据库,而操作表对应实体类对象。

    使用配置文件来完成一一对应的关系

  环境搭建:

    1、导包并创建实体类:使用Hibernate时,不需要手动创建表,Hibernate会有自动创建表功能。

    2、配置实体类和数据表一一对应关系(映射关系)

      使用配置文件实现映射关系

      》创建xml格式的配置文件:映射配置文件名称和位置没有固定要求。

        建议在实体类所在包中创建,实体类名称.hbm.xml

      》配置文件是xml格式,在配置文件中首先引入xml约束。

      》配置映射关系

<hibernate-mapping>
    <!--配置类与表对应 class标签
    name属性:实体类全路径
    table属性:数据表名称-->
    <class name="cn.test.hmt.User" table="t_user">
        <!--配置实体类id与表id对应
          hibernate要求实体类有一个属性唯一值
          hibernate要求表有字段作为唯一值-->
        <!--id标签
          name属性:实体类里面id属性名称
          column属性:生成的表字段名称-->
        <id name="uid" column="uid">
            <!--设置数据库表id增长策略
              native:生成表id值就是主键自增长-->
            <generator class="native"></generator>
        </id>
        <!--配置其他属性和表字段对应-->
        <property name="username" column="username"></property>
        <property name="pwd" column="pwd"></property>
        <!-- ...... -->
        <!-- ...... -->
    </class>
</hibernate-mapping>

    3、创建Hibernate的核心配置文件。

      》核心配置文件格式xml,但核心配置文件的名称和位置都是固定的。

        位置:必须在src下。  名称:必须是hibernate.cfg.xml

      》引入约束。hibernate-configuration.dtd

      》hibernate在操作过程中,只会加载核心配置文件,其他的配置文件不会加载。

<hibernate-configuration>
    <session-factory>
        <!--配置第一部分:
          配置数据库的信息。必须配置-->
        <property name="hibernate.connection.dirver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:myusql://localhost:3306/数据库名</property>
        <property name="hibernate.connection.username"></property>
        <property name="hibernate.connection.password"></property>
        <!--配置第二部分:
          配置hibernate信息。可选配置-->
        <!--输出底层sql语句-->
        <property name="hibernate.show_sql">true</property>
        <!--对底层sql语句进行格式化-->
        <property name="hibernate.format_sql">true</property>
        <!--hibernate帮创建表,需要配置
          update:如已有表,更新。没有,创建。-->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!--配置数据库方言:
            在MySQL中实现分页:关键字limit
            在Oracle中实现分页:关键字rownum
          让hibernate框架识别不同数据库的特有语句-->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!--配置第三部分:
          把映射文件放到核心配置文件中.必须配置-->
        <mapping resource="cn/test/hmt/User.hbm.xml" />
    </session-factory>
</hibernate-configuration>

实例:实现添加操作。

//1、加载hibernate核心配置文件
//在src下找到User.hbm.xml配置文件加载
Configuration cfg = new Configuration();//在hibernate封装的对象
cfg.configure();
//2、创建SessionFactory对象
//读取hibernate核心配置文件内容。创建SessionFactory。在过程中,根据映射关系,在配置数据库中把表创建出来。
SessionFactoty factory=cfg.buildSessionFartory();

//3、使用SessionFactory创建sesion对象。类似于Connection连接
Session session=factory.openSession();
//4、开启事物
Transaction tx=session.beginTransaction();
//5、逻辑 crud操作
//添加功能
User user=new User();
user.setUsername("张三");
user.setPwd("123456");
//调用sesion的方法完成添加
session.save(user);
//6、提交事物、关闭资源
session.commit;
session.close();
factory.close();

  Hibernate配置文件详解:

    映射配置文件:

      1、映射配置文件名和位置没有固定要求。

      2、映射的配置文件,标签name对应实体类的相关内容。

        》class标签name属性值实体类全路径。

        》id标签和property标签name属性值对应实体类的属性名称。

      3、id标签和property标签的column属性可以省略。

        》省略后,column属性值默认和name属性值保持一致。

      4、property标签type属性,设置生成表字段的类型,自动生成实体类中对应的类型。

    核心配置文件:

      1、在核心配置文件中,配置的内容都要在<hibernate-configuration><session-factory>下。

      2、配置三部分要求:数据库部分是必须配置;hibernate部分可选配置;映射文件部分是必须配置。

      3、核心配置文件的名称和位置固定。位置:src下  名称:hibernate.cfg.xml

    Hibernate核心API:

      Configuration加载核心配置文件:到src下找到名称位hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象中。

// Configuration
Configuration cfg=new Configuration();
cfg.configure();

      SessionFactory:

        1、使用Configuration对象创建SessionFactory对象。创建SessionFactory过程中,根据核心配置文件中,有数据库配置,有映射文件部分,到数据库中根据映射关系把表创建。

        2、创建SessionFactory过程中,总是创建数据表,这个过程比较消耗资源。所以,在hibernate过程中,一个项目创建一个SessionFactory对象。

        3、具体实现:在工具类的静态代码块中实现。静态代码块在类加载时执行,只执行一次。

public class HibernateUtils{
    private static final Configuration cfg=null;
    private static final SessionFactory factory=null;
    static{
        cfg=new Configuration();
        cfg.configure();
        factory=cfg.buildSessionFactory();
    }
    //提供方法返回SessionFactory
    publc static SessionFactory getSessionFactory(){
        return factory;
    }
}

      Session:

        1、Session类似于jdbc中Connection连接。

        2、调用Session中不同的方法实现crud操作:

          》save()保存、update()修改、delete()删除、get()根据id查询。

        3、Session对象的最大特点是单线程对象。表示Session对象只能自己使用。不能共用。

      Transaction:

//1、开启事物
Transaction tx=session.beginTransaction();
//2、提交事物
tx.commit();
//3、回滚事物
tx.rollback();

解决非上网模式配置文件没有提示问题:

  把约束文件引入到Eclips平台:window>>preferences>>XML Catalog>>Add

  在本地配置文件中复制hibernate-mapping.dtd的那个地址。然后在key type中选择URI。key:粘贴。在Location中选择本地hibernate-mapping.dtd的目录。点击“OK”。重启Eclips即可。

猜你喜欢

转载自www.cnblogs.com/drop/p/10464848.html