1.update和saveOrUpdate的区别?
update()方法操作的对象必须是持久化了的对象。也就是说,如果此对象在数据库中不存在的话,就不能使用update()方法。
saveOrUpdate()方法操作的对象既可以使持久化了的,也可以使没有持久化的对象。如果是持久化了的对象调用saveOrUpdate()则会 更新数据库中的对象;如果是未持久化的对象使用此方法,则save到数据库中。
2.hibernate的三种状态之间如何转换
瞬时状态:比如new出来的对象,还没有被持久化【没有保存在数据库中】
游离状态:当调用session的save/saveOrUpdate/get/load/list等方法的时候,对象就是持久化状态
持久状态:当Session关闭了以后,持久化的对象就变成了游离状态了...
3.get和load的区别?
get()立即查询
load()懒加载
4.persist和save的区别?
persist不保存立即执行,可能要等到flush;
persist不更新缓存
5.Hibernate基本流程
//1. 创建一个 SessionFactory 对象
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
SessionFactory sessionFactory = new MetadataSources(serviceRegistry)
.buildMetadata().buildSessionFactory();
//2. 创建一个 Session 对象
Session session = sessionFactory.openSession();
//3. 开启事务
Transaction transaction = session.beginTransaction();
customer s = new customer("55", "小红");
//4. 执行保存操作
session.save(s);
//5. 提交事务
transaction.commit();
//6. 关闭 Session
session.close();
//7. 关闭 SessionFactory 对象
sessionFactory.close();
6.Hibernate的五个核心接口
Configuration 接口:配置Hibernate,根据其启动hibernate,创建
SessionFactory 对象;
SessionFactory 接口:初始化Hibernate,充当数据存储源的代理,创建
session 对象,sessionFactory 是线程安全的,意味着它的同一个实例可以被应
用的多个线程共享,是重量级、二级缓存;
Session 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的,
避免多个线程共享同一个session,是轻量级、一级缓存;
Transaction 接口:管理事务;
Query 和Criteria 接口:执行数据库的查询。
7.缓存机制
一级缓存:
Hibenate中一级缓存,也叫做session的缓存,它可以在session范围内减少数据库的访问次数! 只在session范围有效! Session关闭,一级缓存失效!
二级缓存:
二级缓存是基于应用程序的缓存,所有的Session都可以使用
Hibernate提供的二级缓存有默认的实现,且是一种可插配的缓存框架!如果用户想用二级缓存,只需要在hibernate.cfg.xml中配置即可; 不想用,直接移除,不影响代码。
网友评论