hibernate作为一个开源的轻量级的mvc的数据持久层框架,对jdbc进行了细致的封装,让使用更加简单,是程序员更加可以注重对业务逻辑的编写.但是,因为hibernate在采用的面向对象的编程,是我们在编程过程中需要对面向对象的语言进行解析,生成sql语句,然后进行数据的封装耗时比较多.这也体现了hibernate的性能是不如jdbc和mybatis的.但是hibernate也进行了性能提升的改进,比如说二级缓存,在比如这里说get()和load().
好的,这里对hibernate做了一个大体的介绍,那么现在进入正题,对get()和load()的讨论.
get()和load()作为加载的方法,实现的功能是一样的,但是他们存在的是效率的问题,也就是说在什么情况下需要时那个方法.
其实load()和get()的本质区别就是是否用延迟,什么叫延迟?延迟就是你需要的时候在给你进行加载操作,不需要则不加载,由此也体现出了使用延迟对性能的优化,这样可以节约资源,省去不必要的查询出来却不使用的浪费.
那么,get()方法是不适用延迟的,load()方法默认进行延迟操作.当然,我们也可以对load()进行取消延迟的操作(不过,这样就是的load设计的无意义),而且,我们平时大多使用的就是load()的延迟装载.
<class name="DepeModel" table="db_dep" lazy="false">
稍微说下,延迟配置在hibernate的映射文件中的class标签中,lazy就是延迟属性,默认是true,使用了false,就是不适用延迟,那么这个方法和get()是一样的了.
正常load()代码示例:
public TestModel load(String id){
//这里说明了读取配置文件的hibernate.cfg.xml放在更目录下
//如果想自己设置,需把路劲先写到configure()中
Configuration cfg=new Configuration().configure();
//创建session工厂 SessionFactorysessionFactory=cfg.buildSessionFactory();
//创建session
Session session=sessionFactory.openSession();
//使用hibernate的load方法加载
test=session.load(TestModel.class, id);
session.close();
return test;
}
使用中我们有一个这样的问题,那就是,加入session关闭了,那么这个时候我们需要用load()查询了,怎么办?
答案是:报错,介绍二会具体讲解!
hibernate的get()和load()介绍二