• .Net转Java自学之路—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与Spring整合时,Hibernate核心配置文件名称和位置没有固定要求。

          》引入约束。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即可。

  • 相关阅读:
    全代码实现ios-4
    集训第一次周赛题目及题解
    网站登录时密码忘记,通过向邮箱发送验证链接实现重置密码的实现方法
    hdu 1861-游船出租
    c#获取或修改配置文件
    今天做php经典实例,发现,我是对的,面试官给我说错了
    HDU 4637 Rain on your Fat brother 线段与半圆和线段交 简单题
    Qt之图标切分与合并
    标准容器的共性及举例
    如何提高数据库update更新的速度
  • 原文地址:https://www.cnblogs.com/zltao/p/10464848.html
Copyright © 2020-2023  润新知