• [置顶] java高级工程师hibernate的知识重点


    • hibernate的作用

    1)hibernate是基于ORM框架的,通过映射将对数据库的操作改成对pojo类得操作,从而实现了面向对象的对数据库进行操作。

    2)hibernate在JDBC的基础上进行封装,对数据库的操作是全自动化的,大部分功能不用再编写sql语句

    3)hibernate有一级缓存和二级缓存来提高执行的效率

    4)与spring整合之后,统一由spring配置管理事物,简化了代码,很好的对事物进行管理

    5)表与表之间的级联关系,延迟加载和抓取策略同样提高了对数据操作的效率


    • hibernate的工作流程

     1.         读取并解析配置文件

    2.         读取并解析映射信息,创建SessionFactory

    3.         打开Sesssion

    4.         创建事务Transation

    5.         持久化操作

    6.         提交事务

    7.         关闭Session

    • load()和get()的区别

    1.从返回结果上对比:
    load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常
    get方法检索不到的话会返回null

    2.从检索执行机制上对比: get方法和find方法都是直接从数据库中检索 而load方法的执行则比较复杂首先查找session的persistent Context中是否有缓存,如果有则直接返回 如果没有则判断是否是lazy,如果不是直接访问数据库检索,查到记录返回,查不到抛出异常 如果是lazy则需要建立代理对象,对象的initialized属性为false,target属性为null 在访问获得的代理对象的属性时,检索数据库,如果找到记录则把该记录的对象复制到代理对象的target上,并将initialized=true,如果找不到就抛出异常。

    总之对于get和load的根本区别,一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。

    • Hibernate自带的分页机制是什么?如果不使用Hibernate自带的分页,则采用什么方式分页?

    1、hibernate自带的分页机制:获得Session对象后,从Session中获得Query对象。用Query.setFirstResult():设置要显示的第一行数据,
    Query.setMaxResults():设置要显示的最后一行数据。
    2、不使用hibernate自带的分页,可采用sql语句分页,

    mysql中分页处理:limit命令

    mysql> SELECT * FROM table LIMIT 5,10; //检索记录行 6-15 ,注意,10为偏移量
    //为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
    mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行96-last.
    //如果只给定一个参数,它表示返回最大的记录行数目:
    mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行//也就是说,LIMIT n 等价于 LIMIT 0,n。

    oracle中分页处理:top命令

    如:3:为每页显示的记录,2为当前页:

    select * from (select top (2*3) * from market order by news_id ) a where
        a.news_id not in (select top (1*3)
        news_id from market order by news_id )

    2和1表示页,3表示每页的数据数


    • update()和saveOrUpdate()的区别?

    update():是当跨session时,对于托管的实例对象,调用update,才会将该实例对象变成持久化对象,更新数据。

    saveOrUpdate():也是跨session的,会选择行执行save或者update操作。如果对象在该session种已经持久化,不进行操作;对象的标识符属性(identifier property)

    在数据库中不存在或者是个暂时的值,调用save()方法保存它;如果session中的另一个对象

    有相同的标识符抛出一个异常;以上皆不符合则调用update()更新之。

    • hibernate持久化对象的三种状态及怎样相互转换?

    包括瞬态、托管状态、持久化状态

    瞬态:普通的实例化对象VO,和数据库没有任何关系--------------通过save变成持久态

    托管:实例化对象,但是有数据库标识id,但在数据库中没有对应记录----------通过update可变成持久化态

    持久化:实例化对象,和数据库记录相对应。-------通过delete、clear等操作可变成托管态,session关闭


    • hibernate的5个核心接口

    session:session接口负责执行对数据库进行CURD的操作,session是非线程安全的

    sessionFactory:充当数据库存储源代理,初始化hibernate,创建session,它不是轻量级的,故一般一个项目对应一个sessionFactory,当用到多数据库时,可以配置多个         sessionFactory

    Configuration:负责启动hibernate,创建sessionFactory,在启动项目时,会解析配置文件,从而创建sessionFactory

    transaction:负责事物相关的操作

    Query:负责对数据进行操作,包括sql语句和hql语句







  • 相关阅读:
    可调用对象function
    C++类的访问权限
    eBPF 从入门到入门
    PowerShell multiline command
    Access DB Using SQL Server DB for DSC
    Using SQL Server DB for DSC
    keil MDK5.24打开MDK5.15及以前STM32工程报错Error #545:Required gpdsc file 'FrameworkCubeMX.gpdsc' is missing
    20192403赵秋涵 202120222 《网络与系统攻防技术》实验六实验报告
    20192403赵秋涵 202120222 《网络与系统攻防技术》实验七实验报告
    win7系统坑爹的composer安装方式
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3038622.html
Copyright © 2020-2023  润新知