Hibernate学习

Hibernate学习

什么是orm思想

  1. hibernate使用orm思想对数据库进行crud操作

  2. 在web阶段学习javabean,更正确的叫法是: 实体类

  3. orm(Object Relational Mapping),对象关系映射

文字描述:

  1. 让实体类和数据库表进行一一对应关系

    让实体类首先和数据库表对应

    让实体类属性和表里面字段对应

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

画图描述:

 

 

 

 

 

Hibernate入门

搭建hibernate环境

 

 

 

  1. 导入jar包

    因为使用hibernate时候,有日志信息输出,hibernate本身没有日志信息输出的jar包,导入其日志的jar包。

  2. 创建实体类

    • 使用hibernate时候,不需要自己手动创建表,hibernate会自动创建表。

  3. 配置实体类和数据库表一一对应关系(关系对象映射)

    • 配置文件实现

      • 创建xml格式的配置文件

        映射配置文件名称和位置没有固定要求,建议在实体类所在包里面创建,实体类名.hbm.xml

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

        -->
               <property name="username" column="username"></property>
               <property name="password" column="password"></property>
               <property name="address" column="address"></property>
           </class>
        </hibernate-mapping>

         

         

  4. 创建hibernate核心配置文件

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

      位置:必须src下面。

      名称:必须hibernate.cfg.xml

    • 引入dtd约束

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

      第一部分:配置数据库信息

      第二部分:配置hibernate信息

      第三部分:把映射文件放到核心配置文件中

      <hibernate-configuration>
         <session-factory>
      <!--第一部分:配置数据库信息-->
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
             <property name="hibernate.connection.password">123456</property>
             <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/nxu_se</property>
             <property name="hibernate.connection.username">root</property>

      <!--第二部分:配置hibernate信息 可选的 -->
      <!--输出底层SQL语句-->
             <property name="hibernate.show_sql">true</property>
       <!--输出底层SQL语句格式化-->      
             <property name="hibernate.format_sql">true</property>
         <!--hibernate帮创建表,需要配置之后
      update:如果已经有表,更新,如果没有,创建-->
             <property name="hibernate.hbddl.auto">update</property>
             <!--配置数据库方言
      在mysql里面实现分页关键字limit,只能使用MySQL里面
      在oracle数据库,实现分页row
      让hibernate矿建识别不同数据库的自己特有语句
      -->
                     <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
             
             <!--第三部分:把映射文件放到核心配置文件中   是必须要做的-->
             <mapping resource="cn/itcast/entity/User.hbm.xml"/>
         </session-factory>
      </hibernate-configuration>

       

    实现添加操作

    1. 加载hibernate核心配置文件

    2. 创建SessionFactory对象

    3. 使用SessionFactory创建session对象

    4. 开启事务

    5. 写具体逻辑crud操作

    6. 提交事务

    7. 关闭资源

    //1. 加载hibernate核心配置文件
    //到src下面找到名称是hibernate.cfg.xml
    //在hibernate里面封装对象
    Configurtion cfg=new Configuration();
    cfg.configure();
    //2. 创建SessionFactory对象
    //读取hibernate核心配置文件内容,创建sessionFactory();
    //在过程中,根据映射关系,在配置数据库里面靶标创建
    SessionFactory sessionFactory = cfg.buildSessionFactory();
    //3. 使用SessionFactory创建session对象
    //类似于连接
    Session session = sessionFactory.openSession();

    //4. 开启事务
    Transaction tx = session.beginTransaction();
    //5. 写具体逻辑crud操作
    User user=new User();
    user.setUsername("小王");
    user.setPassword("250");
    user.setAddress("日本");
    session.save(user);
    //6. 提交事务
    tx.commit();
    //7. 关闭资源
    session.close();
    sessionFactory.close();

     

    查看效果:

    1. 是否生成表

    2. 看表是否有记录 

    Hibernate配置文件详解

    Hibernate映射配置文件

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

    2. 映射配置文件中,标签name属性值写实体类相关内容

      1. class标签name属性值是实体类全路径(包名+类名用点)

      2. id标签和property标签,name属性值:实体类属性名称

    3. id标签和property标签,column属性可以省略

      1. 不写值和name属性值是一样的

    4. property标签type属性:设置生成表字段的类型,不写的话会自动对应类型。

    Hibernate核心配置文件

    1. 配置书写位置要求

      <hibernate-configuration> <session-factory>

      要在session-factory里面书写

      </session-factory> </hibernate-configuration>

    1. 配置三部分要求

      1. 数据库部分是必须的

      2. Hibernate设置部分是可选的

      3. 映射文件是必须的

    2. 核心配置文件名称和位置是固定的

      1. 位置:src下面

      2. 名称:hibernate.cfg.xml

    Hibernate中的核心API

    Configuration

    //代码
    Configurtion cfg=new Configuration();
    cfg.configure();
    //(1)到src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里(加载核心配置文件)

     

    SessionFactory(重点)

    //代码
    SessionFactory sessionFactory = cfg.buildSessionFactory();
    //1.使用configuration对象创建sessionFactory对象
    //(1)创建sessionFactory过程中做事情
    //根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建
    <property name="hibernate.hbm2ddl.auto">update</property>
    //2.创建sessionFactory过程中,这个过程是特别耗资源的因为每次都会执行一次
    //(1)在hibernate操作中,建议一个项目创建一个sessionFactory对象(工具类)
    //3.具体实现
    //(1)写工具类、写静态代码块实现(静态代码块只执行一次)
    //静态代码块在类加载时候执行,执行一次
    static Configuration cfg = null;
    static  SessionFactory sessionFactory=null
    //静态代码块
    static{
       Congiguration cfg= new Configuration();
       cfg.configure();
       sessionFactory = cfg.buildSessionFactory();
      }
    public static SessionFactory getSessionFactory(){
    return sessionFactory;
    }

     

    Session(重点)

    1. session类似于jdbc中的connection

    2. 调用session里面不同的方法实现crud操作

      1. 添加save方法

      2. 修改update

      3. 删除delete方法

      4. 根据id查询get方法

    3. session对象是单线程对象

      1. session对象不能共用,只能自己使用

    Transaction

    1. 事务对象

      Transaction tx = session.beginTransaction();

    2. 事务提交和回滚方法

      tx.commit();

      tx.rollback();

    3. 事务概念

      1. 事务的四个特性

        原子性、一致性、隔离性、持久性

     

posted @ 2021-10-28 19:56  Arues  阅读(61)  评论(0)    收藏  举报