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都会共用这一份实例,默认关闭
来源:oschina
链接:https://my.oschina.net/u/4469818/blog/4410684