hibernate总结

来源:互联网 发布:唐嫣演技知乎 编辑:程序博客网 时间:2024/06/15 02:41

查询数据

标准化对象查询(Criteria Query):以对象的方式进行查询,将查询语句封装为对象操作。缺点:不支持投影或统计函数

hibernate查询语句:具备继承、多态和关联等

native sql queries(原生sql查询)


query接口实现分页

String sql = "from UserInfo";Query query = session.createQuery(sql);query.setFirstResult(20);query.setMaxResults(10);


inverse表示是否放弃尾部关联关系

inverse="true"表示该对象不维护关联关系

one-to-many维护关联关系就是更新外键,many-to-many维护关联关系就是在中间表增减记录;one-to-one的对象不维护关联关系


load、get、list、iterator区别

load:

在执行load()方法时,Hibernate首先从当前Session的一级缓存中获取ID对应的值,在获取不到的情况下,将根据该对象是否配置了二级缓存来做相应的处理。

如配置了二级缓存,则从二级缓存中获取ID对应的值,如仍然获取不到则还需要根据是否配置了延迟加载来决定如何执行,如未配置延迟加载则从数据库中 直接获 取。在从数据库获取到数据的情况下,Hibernate会相应地填充一级缓存和二级缓存,如配置了延迟加载则直接返回一个代理类,只有在触发代理类的调用 时才进行数据库的查询操作。

get:

在当前Session的一级缓存中获取不到指定的对象时,会直接执行查询语句从数据库中获得所需要的数据。

list:

在执行Query的list()方法时,Hibernate查询方法是首先检查是否配置了查询缓存,如配置了则从查询缓存中寻找是否已经对该查询进 行了缓 存,如获取不到则从数据库中进行获取。从数据库中获取到后,Hibernate将会相应地填充一级、二级和查询缓存。如获取到的为直接的结果集,则直接返 回,如获取到的为一些ID的值,则再根据ID获取相应的值(Session.load()),最后形成结果集返回。

iterator:

Query的iterator()方法处理查询的方式与list()方法是不同的,它首先会使用查询语句得到ID值的列表,然后再使用Session的load()方法得到所需要的对象的值。


getCurrentSession和openSession区别

getCurrentSession创建的session会和绑定到当前线程,而openSession不会;

getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭


session和sessionFactory

session是非线程安全的,生命周期较短,代表一个和数据库的连接;

sessionFactory是线程安全的,一个数据库对应一个SessionFactory,保存这和数据库连接的相关信息和映射信息

0 0
原创粉丝点击