欢迎来到天天文库
浏览记录
ID:14269388
大小:72.00 KB
页数:7页
时间:2018-07-27
《hibernate面试题汇总》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、hibernate是什么?hibernate是基于ORM对象关系映射(完成对象数据到关系数据映射的机制)实现的,做数据持久化的工具HttpSession与Hibernate中Session的区别1.javax.servlet.http.HttpSession是一个抽象接口用途:存放这个用户的一些经常被用到的信息,例如:用户名,权限等2.它是hibernate操作数据库的一个句柄对象手动或者通过业务层获取0.Hibernate介绍Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常
2、轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。1.Hibernate有哪几种查询数据的方式(1)导航对象图查询(2)OID查询(3)HQL(4)QBC(5)本地SQL2.load()和get()的区别load加载方法:Usersuser
3、=(Users)session.load(Users.class,userId);get加载方法:Usersuser=(Users)session.get(Users.class,userId);两加载方法区别:区别1:如果数据库中,没有userId的对象。如果通过get方法加载,则返回的是一个null;如果通过load加载,则返回一个代理对象,如果后面代码如果调用user对象的某个属性(比如user.getPassword())会抛出异常:org.hibernate.ObjectNotFoundExc
4、eption;区别2:load支持延迟加载,get不支持延迟加载。也就是说:Usersuser=(Users)session.load(Users.class,userId);这句代码不会去执行数据库查询,只有用到user时才会去执行数据库查询。而:Usersuser=(Users)session.get(Users.class,userId);则立即去执行数据库查询。所以Usersuser=(Users)session.load(Users.class,userId);不会执行任何sql。注意:Use
5、rsuser=(Users)session.load(Users.class,userId);System.out.println(user.getId());上面这2句代码,不会去执行数据库操作。因为load后会在hibernate的一级缓存里存放一个map对象,该map的key就是userId的值,但是当你getId()时,它会去一级缓存里拿map的key值,而不去执行数据库查询。所以不会报任何错。不会执行任何数据库操作。2.1请解释Session的load方法和get方法的不同;以及Query的l
6、ist和iterator方法的不同load():现在session缓存中寻找,如果找到了返回该对象,如果没找到,程序会新建一个对象,并且返回,存在session中,不会在数据库中查找,在程序中如果没有用到这个实体类,可以节省一次数据库连接。如果在程序中用到了这个实体类,这个实体类就会在数据库去查找,如果没有查找到就会抛异常。(延时加载)get():在缓存在查找,如果找到该对象,返回该对象。如果没找到,会到数据库中查找,如果数据库中有则返回该对象,如果没找到这返回空。(立即加载)3.Hibernate工作
7、原理及为什么要用?原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Transation5.持久化操作6.提交事务7.关闭Session8.关闭SesstionFactory为什么要用:1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作3.hibernate使用Java反射机制,而不是字节码增
8、强程序来实现透明性。4.hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。4.Hibernate是如何延迟加载?1.Hibernate2延迟加载实现:a)实体对象b)集合(Collection)2.Hibernate3提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载
此文档下载收益归作者所有