Hibernate基础知识

不羁的心 提交于 2020-08-07 08:40:42

1、Hibernate操作数据库的步骤

读取hibernate全局配置-->使用hibernate全局配置创建sessionFactory-->使用sessionFactory对象获取session-->开启事务-->使用session对象进行数据库操作(增删改查)-->提交事务-->关闭session

以下给出最基本的写法示例:

Configuration configuration = new Configuration();
Configuration configure = configuration.configure("hibernate.cfg.xml");
SessionFactory sessionFactory = configuration.buildSessionFactory();
session = sessionFactory.openSession();
public void insertOne() {
    transaction.begin();
    Department department = new Department();
    department.setDeptName("");
    department.setDeptNo("123");
    department.setDeptAddr("北京市");
    session.save(department);
    transaction.commit();
    session.close();
}

这里因为开启事务、关闭事务、关闭session等操作是公共的,因此可以通过代理的方式,将相关操作放在切面里,优化代码。

2、Hibernate的session方法中的load和get的区别

相同点:session的load和get方法都用于获取一个实体对象,返回一条记录。

不同点:

    2.1  sql查询时机不同

get方法会在调用之后立即向数据库发出sql语句(不考虑缓存的情况下),返回持久化对象。

load方法会在调用后返回一个代理对象,该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句。 

    2.2   查询结果返回有区别

session get方法如果对象不存在,不会抛出异常,而是返回一个null。

session load方法默认查询结果是存在的,如果查询结果不存在,返回ObjectNotFoundException。

3、Hibernate有几类查询方法

    3.1  通过原生SQL查询

    3.2  通过HQL查询

    3.3  通过Critical查询

参考简书文章:https://www.jianshu.com/p/b8a3cde965a2

4、Hibernate的session对象什么时候gc

session对象在flush的时候gc,如果没有调用flush,在调用close方法时gc。

5、Hibernate缓存

一级缓存:与session绑定,一个session多次请求相同的对象时返回相同的实例。在事务结束后清空,默认打开

二级缓存:全局的缓存,在sessionFactory里保存一份持久化的实例,所有session都会共用这一份实例,默认关闭

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!