Hibernate


  1. Hibernate对JDBC进行了简单的封装,是一个全新的ORM框架.可以在不修改源代码的基础上实现DAO的功能,通过操作对象的方式来操作数据库中的表)

  2. Hibernate所处位置
    此处输入图片的描述

  3. XXX.hbm.xml映射配置文件标签和属性说明

    <class>标签:
        name    类的全路径
        table   数据库表名
    
    <id>标签:
        name        类中的属性
        column      表中的主键
        generator   主键生成策略.
            定义hbm.xml映射文件和pojo类时都需要定义主键,Hibernate中定义的主键类型包括:自然主键和代理主键:
            自然主键:具有业务含义 字段作为主键,比如:学号、身份证号
            代理主键:不具有业务含义 字段作为主键(例如 自增id),比如:mysql自增主键,oracle序列生成的主键、uuid()方法生成的唯一序列串
            建议:企业开发中使用代理主键
    
    <property>标签:
        name        类中的属性
        column      表中字段名
        type        数据类型.
        Java类型      java.lang.String
        Hibernate类型 string
        SQL类型       需要使用一个标签<column sql-type=”varchar(20)”>
        length      字段的长度.

    此处输入图片的描述

  4. hibernate.cfg.xml为主配置文件,配置了hibernate运行的参数信息

    第一部分:数据库基本配置(连接信息以及数据库方言)
        hibernate.dialect   操作数据库方言
        hibernate.connection.driver_class  连接数据库驱动程序
        hibernate.connection.url   连接数据库URL
        hibernate.connection.username  数据库用户名
        hibernate.connection.password   数据库密码
    
    第二部分: hibernate基本配置
        数据库必须自己手动创建,hibernate不会创建
    第三部分:映射配置
        <mapping resource="com/leo/domain/Student.hbm.xml"/>
    

    第二部分更多解释

    • <property name="hibernate.hbm2ddl.auto">update</property> 自动生成DDL.根据映射产生表结构的类型:
      • create-drop:没有表结构创建,下次启动时删除重新创建。适合学习阶段
      • create:只做创建
      • update:探测表结构够的变化,对于数据库没有的,进行更新操作。适合学习阶段
      • validate:对比与数据库的结构
      • none:什么都不会做
        实际开发中一般使用update、validate
    • <property name="hibernate.show_sql">true</property> 在控制台上输出SQL语句
  5. Hibernate执行流程描述如下:
    此处输入图片的描述

    • 编写hibernate配置文件及pojo类,包括:hibernate.cfg.xml主配置文件、与数据库表对应的映射文件及pojo类
    • 应用程序调用hibernate的api加载hibernate配置文件、映射文件等
    • 通过configuration创建sessionFactory会话工厂
    • 通过sessionFactory会话工厂创建session会话
    • 通过session操作数据库,session中定义了很多操作数据库的方法
    • 对于增、删、改数据库操作需要transaction事务管理对象提交或回滚事务
    • 对于查询数据库操作通过query查询对象执行查询
    • 释放资源,一个操作结束后关闭session,应用程序结束后关闭sessionFactory
      Configuration cfg = new Configuration();
      cfg.configure();
      SessionFactory factory = cfg.buildSessionFactory();
      Session session = factory.openSession();
      Transaction tx = session.beginTransaction();
      
  6. Hibernate的相关API
    • Configuration:配置对象.用来加载配置文件
      • 作用:就是用于加载配置文件。它默认只会加载类的根路径下的配置文件。
      • 常用方法:
        1. 默认构造函数:它默认只会加载类的根路径下的hibernate.properties配置文件。不会加载xml文件。
        2. configure():该方法会加载类的根路径下的hibernate.cfg.xml配置文件。
        3. addClass():手动指定实体类的字节码。目的也是指定映射文件。 要求,映射文件的命名必须符合规范。实体类名称.hbm.xml
        4. addResource:手动指定映射文件的位置。
      • 总结:
        建议使用配置文件来指定映射文件的位置。
    • SessionFactory
      • 作用:就是用于生产Session对象的。工厂的创建,是由Configuration对象来创建的。
      • 常用的方法:
        1. openSession():每次打开一个新的Session对象。
        2. getCurrentSession(): 从当前线程上获取一个Session对象。
      • 说明:
        1. 该对象维护着应用中所有的映射文件信息。
        2. 它还维护类一些预定义的SQL语句。(只包含每个实体都通用的:全字段插入,全字段更新,根据ID查询,查询所有)
        3. 维护着连接数据库的信息,hibernate的基本配置
        4. 还维护着hibernate的二级缓存(关于二级缓存的内容,第四天再讲)
        5. 所有由该工厂生产的Session,共享工厂中的数据。
      • 结论:SessionFactory是线程安全的。
      • SessionFactory的使用原则:
        1. SessionFactorty是一个重量级对象,里面维护了很多信息。不应该随意的创建和销毁。
        2. 一个应用最好只有一个SessionFactory。
      • 在web工程中,应该是随着应用的加载,而创建。随着应用的卸载而销毁。(整合spring后)
    • Session连接对象
      • 作用:对数据库进行增删改查的操作。开启事务等等。它是我们使用频率最高的一个对象。
      • 常用方法:
        1. save():保存一个对象
        2. persist():JPA中提供方法.一般不使用.
        3. update():更新一个对象
        4. saveOrUpdate():保存或更新一个对象.看数据库中是否有对应的记录.如果有对应的记录就执行更新的操作,如果没有就保存.
        5. delete():删除对象
        6. merge():合并两个对象
        7. get()/load():根据主键查询
        8. createQuery():HQL查询
        9. createSQLQuery():数据库操作对象
        10. createCriteria():条件查询
        11. close():关闭连接
        12. clear():清除一级缓存
        13. evict(Object entity):清除一级缓存指定的实体
        14. refresh(Object entity):使用数据库数据更新一级缓存中指定的实体
        15. flush():清理一级缓存,使用缓存数据更新数据库的数据。
      • 说明:
        1. Session是一个轻量级的对象。绝大多数信息都是由SessionFactory维护的。
        2. 它的创建和销毁不会消耗太多资源。
        3. Session对象不是线程安全的。
        4. Session维护着hibernate的一级缓存。
      • Session的使用原则:保证一个线程只有一个Session(为什么?线程安全以及事务应该在一个事务中才能被控制)
    • Transaction:事务(Hibernate的事务默认是不自动提交的.如果没有开启事务,那么每个Session的操作,都相当于一个独立的事务)
      • 作用:针对事务的控制。
      • 常用方法:
        1. commit();提交事务
        2. rollback();回滚事务;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值