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