orm框架有哪些_Java⾼频⾯试题160道答案-第8篇(框架篇
SSH)
81,谈谈你对SpringMVC的理解。
答:SpringMvc是基于过滤器对servlet进⾏了封装的⼀个框架,在l⽂件中配置DispatcherServlet类;SpringMvc⼯作时主要是通过DispatcherServlet管理接收到的请求并进⾏处理。这是SpringMVC中的⼀个核⼼类。运⾏过程如下:
1. ⽤户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
2. DispatcherServlet对请求URL进⾏解析,得到请求资源标识符(URI)。然后根据该URI,调⽤HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的),最后以HandlerExecutionChain对象的形式返回;
3. DispatcherServlet 根据获得的Handler,选择⼀个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执⾏的preHandler(...)⽅法)
4. 提取Request中的模型数据,填充Handler⼊参,开始执⾏Handler(Controller)。 在填充Handler的⼊参过程中,根据你的配
置,Spring将帮你做⼀些额外的⼯作:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成⼀个对象,将对象转换为指定的响应信息
数据转换:对请求消息进⾏数据转换。如String转换成Integer、Double等
数据格式化:对请求消息进⾏数据格式化。 如将字符串转换成格式化数字或格式化⽇期等
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
5. Handler执⾏完成后,向DispatcherServlet 返回⼀个ModelAndView对象;
6. 根据返回的ModelAndView,选择⼀个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
7. ViewResolver 结合Model和View,来渲染视图spring系列框架有哪些
8. 将渲染结果返回给客户端。
82、谈谈你对Hibernate的理解。
答:Hibernate是⼀个开放源代码的对象关系映射(ORM)框架,它对JDBC进⾏了⾮常轻量级的对象封装,使得java程序员可以随⼼所欲的使⽤对象编程思维来操纵数据库。ORM,即Object-Relational Mapping,它的作⽤就是在关系型数据库和对象之间做了⼀个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象⼀样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)
使⽤Hibernate的基本流程是:
配置Configuration对象;
产⽣SessionFactory;
创建session对象;
启动事务;
完成CRUD操作;
提交事务;
关闭session。
Hibernate优点:
>对 JDBC 访问数据库的代码做了封装,简化了数据访问层繁琐的重复性代码
>映射的灵活性, 它⽀持各种关系数据库, 从⼀对⼀到多对多的各种复杂关系.
>⾮侵⼊性、移植性会好
>缓存机制: 提供⼀级缓存和⼆级缓存
Hibernate缺点:
>⽆法对 SQL 进⾏优化
>框架中使⽤ ORM原则, 导致配置过于复杂
>执⾏效率和原⽣的JDBC 相⽐偏差: 特别是在批量数据处理的时候
>不⽀持批量修改、删除。
83,谈谈你对Spring的理解。
答:Spring 框架是 Java 应⽤最⼴的框架,它的成功来源于理念,⽽不是技术本⾝,它的理念包括 IoC (Inversion of Control,控制反转)和 AOP(Aspect Oriented Programming,⾯向切⾯编程)。Spring 提倡以“最少侵⼊”的⽅式来管理应⽤中的代码,这意味着我们可以随时安装或者卸载 Spring。
Spring框架的作⽤:
①.Spring 能帮我们根据配置⽂件创建及组装对象之间的依赖关系。
②.Spring ⾯向切⾯编程能帮助我们⽆耦合的实现⽇志记录,性能统计,安全控制。
③.Spring 能⾮常简单的帮我们管理数据库事务。
④.Spring 还提供了与第三⽅数据访问框架(如Hibernate、Mybatis)⽆缝集成,⽽且⾃⼰也提供了⼀套JDBC访问模板来⽅便数据库访问。
⑤.Spring 还提供与第三⽅Web(如Struts1/2、JSF)框架⽆缝集成,⽽且⾃⼰也提供了⼀套Spring MVC框架,来⽅便web层搭建。
⑥.Spring 能⽅便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(⽐如缓存框架)
84,谈谈Struts的优缺点
答:优点:
实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现;
丰富的标签库,⼤⼤提⾼了开发的效率;
Struts2提供丰富的实现;
通过配置⽂件,就可以掌握整个系统各个部分之间的关系;
异常处理机制,只需在配置⽂件中配置异常的映射,即可对异常做相应的处理;
可扩展性⾼。
缺点:
获取参数稍显⿇烦;
校验稍显繁琐;
越来越复杂,不灵活,学习成本⾼;
安全漏洞!这是最致命的。⽬前此框架基本已经被抛弃!
85,MyBatis与Hibernate有什么不同?
答:Mybatis不是⼀个完全的ORM框架。
Mybatis学习门槛低,简单易学,程序员直接编写原⽣态sql,可严格控制sql执⾏性能,灵活度⾼,⾮常适合对关系数据模型要求不⾼的软件开发。但缺点就是⽆法做到数据库⽆关性,如果需要⽀持多个数据库,则需要⾃定义多套sql映射⽂件,⼯作量⼤。
Hibernate对象/关系映射能⼒强,数据库⽆关性好,对于关系模型要求⾼的软件(例如需求固定的定制化软件)如果⽤hibernate开发可以节省很多代码,提⾼效率。但是Hibernate的学习门槛⾼,要精通门槛更⾼,⽽且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样⽤好Hibernate需要具有很强的经验和能⼒才⾏。
86,在hibernate进⾏多表查询每个表中各取⼏个字段,也就是说查询出来的结果集没有⼀个实体类与之对应如何解决?
答:返回的是⼀个List这样的类型,你可以另外创建⼀个DTO然后通过循环,把Object[]中的每⼀个值,与dto中的字段对应,组成⼀个List的对象。举例说明:
有实体类People和Card,代表⽤户和卡⽚,其属性分别如下:
People:id,name,age
Card:id,num
现在通过查询取出People中的id,name和Card中的id,num。
此时得到的属性是4个,分别是People中的id,name和Card中的id,num
以上两个实体类都不能保存这4个属性。此时可以新定义⼀个类,假设叫PeopleCard,属性如下:
PeopleCard:peopleId,name,cardId,num
把从Hibernate中得到的List中的元素循环,取出Object[]中的相应的数据放⼊PeopleCard各个属性中。得到⼀个List集合。这个集合中就是你想要的数据集了。
87,介绍⼀下Hibernate的⼆级缓存
答:缓存就是把以前从数据库中查询出来和使⽤过的对象保存到内存中(⼀个数据库结构中),这个数据库结构通常是或类似HashMap,当以后要使⽤某个对象时,先查询缓存中是否有这个对象,如果有则
使⽤缓存中的对象,如果没有则去查询数据库,并将查询出来的对象保存到缓存中,以便下次使⽤。
hibernate的session就是⼀种缓存,我们通常将其称为hibernate的⼀级缓存,当想使⽤session从数据库中查询出⼀个对象时,session 也是先从⾃⼰内部查看是否存在这个对象,存在则直接返回,不存在才去访问数据库,并将查询的结果保存在⾃⼰内部。
由于session代表⼀次会话过程,⼀个session与数据库连接相关联,所以session最好不要长时间保持打开,通常仅⽤于⼀个事务当中,在事务结束时就应关闭。并且session是线程不安全的,被多个线程共享时容易出现问题。通常只有那种全局意义上的缓存才是真正意义的缓存应⽤,才有较⼤的缓存价值。因此,hibernate的session这⼀级缓存作⽤并不明显,应⽤价值不⼤。
hibernate的⼆级缓存就是要为hibernate配置⼀种全局缓存,让多个线程和多个事务都可以共享这个缓存,我们希望的是⼀个⼈使⽤过,其他⼈也可以使⽤,session没有这种效果。
⼆级缓存是独⽴于hibernate的软件部件,属于第三⽅产品。多个⼚商和组织都提供有缓存产品,例如EHCache和OSCake等等。在hibernate中使⽤⼆级缓存,⾸先就要在l配置⽂件中配置使⽤哪个⼚家的缓存产品,接着需要配置这缓存产品⾃⼰的配置⽂件,最后配置hibernate中的哪些实体对象要纳⼊⼆级缓存的管理中。明⽩了⼆级缓存的原理和有了这个思路后,很容易配置起hibernate的⼆级缓存。
88,JDO是什么?
答:JDO(Java Data Object )是Java对象持久化的新的规范,也是⼀个⽤于存取某种数据仓库中的对象的标准化API。
JDO提供了透明的对象存储,因此对开发⼈员来说,存储数据对象完全不需要额外的代码(如JDBC AP
I的使⽤)。这些繁琐的例⾏⼯作已经转移到JDO产品提供商⾝上,使开发⼈员解脱出来,从⽽集中时间和精⼒在业务逻辑上。另外,JDO很灵活,因为它可以在任何数据底层上运⾏。
说明:以上内容来⾃百度,因为现在基本不使⽤这种,所以⼤家了解⼀下就可以了。
89,Hibernate的⼀对多和多对⼀双向关联的区别?
答:⼀对多关联映射和多对⼀关联映射实现的基本原理都是⼀样的,既是在多的⼀端加⼊⼀个外键指向⼀的⼀端外键,⽽主要的区别就是维护端不同。
⼀对多关联映射是指在加载⼀的⼀端数据的同时加载多的⼀端的数据多对⼀关联映射是指在加载多的⼀端数据的同时加载⼀的⼀端的数据。如果是双向关联,则不论是加载⼀的⼀端数据还是加载多的⼀端的数据,都会把另⼀端的数据加载进来。这种⽅法建议少⽤,因为会产⽣⼤量的内存浪费。除⾮确实有这样的需要。
90,Hibernate是如何延迟加载?
答:Hibernate从数据库获取某⼀个对象数据、获取某⼀个对象的集合属性时,获取某⼀个对象所关联的另⼀个对象时,由于没有使⽤该对象的数据,hibernate并不从数据库加载真正的数据。⽽是为该对象创建⼀个代理对象来代表这个对象,这个对象上的所有属性都为默认值,只有在真正的需要该对象
的数据时才创建这个真实的对象,真正的从数据库中加载数据。这就是延迟加载。
当调⽤Session上的load()⽅法加载实体时,就会采⽤延迟加载。
当Session加载某个实体时,会对这个实体中的集合属性值采⽤延迟加载,会对这个实体所单端关联(one-to-one,many-to-one)的另⼀个实体对象采⽤延迟加载。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论