JAVA-SSH面试题.docx
Java-SSH(MVC)1.谈谈你mvc的理解MVC是ModelVieW-ControIer的简称。即模型一视图一控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。MVC中的模型、视图、控制器它们分别担负着不同的任务。视图:视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业务逻辑处理。模型:模型表示业务数据和业务处理。相当于JavaBean.一个模型能为多个视图提供数据。这提高了应用程序的重用性控制器:当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。然后根据处理的结果调用相应的视图来显示处理的结果。MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用户。Struts1.strutsl.2和struts2.0的区别?如何控制两种框架中的单例模式?strutsl.2和struts2.0的对比a、Action类:strutsl.2要求Action类继承一个基类。struts2.0Action要求继承ActionSupport基类b、线程模式StrUtS1.2ACtiOn是单例模式的并且必须是线程安全的,因为仅有一个ACtiOn的实例来处理所有的请求。单例策略限制了Strutsl.2Action能做的事情,并且开发时特别小心。Action资源必须是线程安全的或同步的。struts2.0Action为每一个请求产生一个实例,因此没有线程安全问题。c,SerVlet依赖strutsl.2Action依赖于ServletAPI,因为当一个Action被调用时HttpServIetRequest和HttpservIetResponse被传递给execut方法。struts2.0Action不依赖于容器,允许Action脱离容器单独测试。如果需要,Struts2ACtiOn仍然可以访问初始的Request和Response。但是,其他的元素减少或者消除了直接访问HttpServIetRequest和HttpservIetResponse的必要性。d、可测性测试StrUtS1.2Action的一个主要问题是execute方法暴露了ServletAPI(这使得测试要依赖于容器)。一个第三方扩展:strutsTestCase提供了一套strutsl.2的模拟对象来进行测试。StrUtS2.0ACtiOn可以通过初始化、设置属性、调用方法来测试,“依赖注入”也使得测试更容易。2. 项目中为什么使用SSH1 .使用Struts是因为struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更关注于业务逻辑的实现:第二,StrUtS有着丰富的taglib,如能灵活运用,则能大大提高开发效率。2 .使用Hibernate:因为hibernate为JaVa应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功能丰富。3 .使用Spring:因为spring基于IoCfInversionofControl,反向控制)和AoP构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块:采用IoC使得可以很容易的实现bean的装配,提供了简洁的AoP并据此实现事务管理(TranSCationManagment),等等3. struts与spring是如何继承的不懂题目之意:是否是说的struts的action都继承自org.apache.StrutsactiomAction而SPring中的继承就不清楚了。4. struts如何实现国际化以下以两国语言(中文,英文)为例:1 .在工程中加入StrUtS支持2 .编辑ApplicationResource.Properties文件,在其中加入要使用国际化的信息,例如:lable.welcome.china=Welcome!3 .创建英文资源文件ApplicationResource_en.properites4 .创建临时中文资源文件APPliCationReSOUrce_temp.properites例如:IabIe.welcom.china=uP国欢迎您!5 .对临时中文资源文件进行编码转换。可以使用myedipse的插件,也可以在dos下执行:native2ascii-encodinggb2312ApplicationResource_temp.propertiesApplicationResource_zh_CN.properties6 .在jsp中加入struts的bean标记库<%tagliburi三"WEB-INFstruts-bean.tld"prefix三"bean"%>显示信息:Vbeanmessagekey="label.welcome.china">可以在StrutS-Config-XmI文件中定义多个资源包,而每个资源包可使用key属性指定包的名称。5. struts2.0的常用标签1 .往action里传值:<inputname="userName"type="te×t"class="input6,'size="15">2 .显示标签property用于输出指定值:<s:PrOPertyValUe="userName"/>3,用于从页面往action中(USer)的对象内传值:<s:textname="user.userName"id="username">4 .判断<s:if></s:if>用于在页面中判断指定数据<s:iftest三"userName=admin">.</s:if><selse>.</s:else>5,迭代<s:iterator>用于将list、Map、ArrayLiSt等集合进行循环遍历<s:iteratorvalue="userList"id=',user"status=,u"><s:propertyvalue="userName"><a></s:iterator>6. URL地址标签,<s:url>用于生成一个URL地址,可以通过URL标签指定的<s:Param>子元素向URL地址发送请求参数<s:urlaction=""><s:paramname=""value=""x/s:param></s:url>7. 超链接<ahref>一般和<s:Url>标签一起使用,用于带多个参数。<ahref="<s:urlaction=",><s:paramname=",'value=""x/s:param><s:paramname=""value=""x/s:param><s:paramname=",value=""x/s:param></s:url>">超链接<a>8. set标签,用于将某个值放入指定的范围内。例如application,session等。<s:setname=,user"value="userName"scoe=wrequestw>6.struts中怎么配置form-bean、action>tiles此处配置的是strutsl.2的form-bean配置:(在配置文件struts-config.×ml中):<form-beans><form-beanname=""type=""><form-bean><form-beans>name:指定form的名字;type指定form的类型:包名+类名:action配置:(在配置文件struts-config.×ml中)<action-mappings><actionpath=""attribute=""input=""name=""parameter=""scope="request"type=1'"><action><action-mappings>path:请求ACtiOn的名字;attribute:form的名字,与form-bean中的name对应;input:输入页的路径;name:如果配置了attribute,name不起作用JJattribUte一样;Parameter:使用分发ACtion时,指定调用分发ACtion中的方法名;scope:ACtiOn的范围;type:ACtiOn的类型:包名+类名:tites配置:1 .新建一个tiles-defs.xml文件,并在其中做如下配置:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEtiles-definitionsPUBLIC"-/ApacheSoftwareFoundationDTDTilesConfiguration1.1/EN""http:/jakarta.apache.org/struts/dtds/tiles-config_l_l.dtd"><tiles-definitions><definitionname=,member-definition"path="Jsplayout.jsp"><utname=,to"value=,mTo.do'7><putname=',left"value="mLeft.do"><putname="main"value-ldefaultMmain.do"><definition><tiles-definitions>2 .在web.xml和struts-config.×ml和web.xml中做相应配置:在struts-config.xml中配置如下:*<plug-inclassName="org.apache.struts.tiles.TilesPlugin"><set-propertyproperty="definitions-config"value="WEB-INFtiles-defs.×m,><set-propertyproperty="definitions-parser-validate"value=,'true"><plug-in>*在web.xml中配置如下:*<init-param><param-name>definitions-config<param-name><param-value>WEB-INFtiles-defs.xml<param-value><init-param>*3 .调用Tiles组件Tiles组件是通过StrutsAction来调用的,在struts-config.xml中做如下action配置:*<actionpath="member"parameter="member-definition"type="org.apache.struts.actions.ForwardAction">*7.1OgiC标签有哪几个?此标签库可以分为三种类型:条件、循环、转发/重定向。1 .条件类型(没标注的都比较简单)Iogiciempty,IogicmotEmpty;Iogiciequal,IogicinotEquaI,IogicdessThan,IogicigreaterThanzIogicdessEquaI,IogicigreaterEquaI;Iogicrpresent,IogicrnotPresent;Iogicimatch,IogicmotMatch;比较两字符串是否相等,可以比较字符串的开始的、结尾的或其中的某个部分。IocatiOn属性:指定从某个位置开始进行比较。2 .循环类型Iogicriterate3 .转发/重定向类型Iogiciforward和IOgiredirectIogiciforward标签和jsp:forward标签相似,但它可以使用globalforward中的一个ActionForward例如:Vlogiuforwardname="login"/>与上面相关的globalforward中的代码:<global-forwards><forwardname="login"path=,7oginForm.jsp"><global-forwards>Iogiciredirect标签和上面的标签类似,但它默认调用的方法是response.sendRedirect(),取代了上面的requestDispatcher.forward()0最大的不同是它支持所有html:Iink标签的属性,所以你能够指定request参数:<logic:redirectname="login"paramld="employeeld"paramName="employee"property=,id"/>在MVC框架下,不推荐使用这两个标签,你应该是从controller中选择下一个VieW,而不是从view中选择.在Jsp页面中不要过多的使用logic标签。8. action是单实例还是多实例,为什么?action是单实例的。当多个用户访问一个请求的时候,服务器内存中只有一个与之对应的action类对象。因为当服务器第一次加载struts的配置文件的时候,创建了一个Action后,每发送一个请求,服务器都会先去检索相应的范围内(request,session)是否存在这样一个action实例,如果存在,则使用这个实例,如果不存在,则创建一个action实例。9. ClispatchAction是用什么技术实现的?DispatchAction是Aciton的一个子类,主要解决了一个请求处理多个功能的问题普通的Action你只能写execute方法来处理业务,而想用这一个Action处理多个任务,你必须要请求参数进行解析,用if语句块来处理举一个小例子:有如下一个url:http:/localhost:8080/myApp/addUserAction.do如果你处理这个Url的是一个普通的ACtion,那么就只能在execute里面执行插入的相关操作,如果换成一下url:http:/localhost:8080/myApp/UserAction.do?method=adcl你就应该根据method对象的值来执行相应的操作,如再有一个路径http:/localhost:8080/myApp/UserAction.do?method=delete这个还可以使用那个ACtion来处理的,只是多判断一下而已.如果你用DiSPatChACtiOn,就简单多了,所以dispatchAction还是用的Action的这么一个技术。10. struts2.0的mvc模式?与strutsl.0的区别?struts2的mvc模式:当用户在页面提交用户请求时,该请求需要提交给struts2的控制器处理。struts2的控制器根据处理结果,决定将哪个页面呈现给客户端。与Strutsl最大的不同是:struts2的控制器。struts2的控制器不再像Strutsl的控制器,需要继承一个Action父类,甚至可以无需实现任何接口,StrUtS2的Action就是一个普通的POJ0。实际上,Struts2的Action就是一个包含execute方法的普通JaVa类该类里包含的多个属性用于封装用户的请求参数。11. STRUTS的配置文件是什么?StrutS-Config.XmI12. 请写出Struts的工作原理。13. struts的处理流程。一、ActionServlet的初始化ActionServlet作为Struts组件的前端控制器,由于web.xml的相应配置:<load-on-startup>0<load-o11-startup>在应用一加教时即会被实例化并调用其init方法,init方法所做的主要工作有二:1 .加载StrUtS配置文件,并创建用于封装配置信息的ModUIeCOnfig对象2 .加载资源文件,并创建用于封装资源文件的MeSSageReSoUrCeS对象需要注意两点:如果web.xml有多模块配置,将创建多个ModuleConfig对象和MessageResources对象分别用于封装各个模块的struts配置文件和资源文件。针对各个模块所创建的ModuleConfig对象和MessageResources对象将存储在ServletContext中,对应的属性名中有该模块名称的相应标识。另外,如果有相应配置的话,init方法还将初始化数据源和PIUgln二、ActionServlet的process所有形如*.do的请求(根据web.xml中的相关配置)将提交给ActionServlet,最终将调用其process方法0process方法的主要工作有三:1. 根据请求信息获知所请求的模块名称,从ServIetcOnteXt中获得与请求模块对应的的ModUleConfig对象,并存储到request中。2. 根据模块信息获得相应的ReqUeStProCeSSOr对象,一个模块对应一个ReqUeStPrOCeSSor对象,RequestProcessor对象将关联与所属模块对应的ModuleConfig对象。3. 调用RequestProcessor对象的process方法,将request和response作为参数传递给它。三、RequestProcessor的processRequestProcessor对象的ProCeSS方法的主要工作有五步:1. 调用自己的ProcessPreprocess(request,response)方法,该方法不进行任何操作,用于子类重写扩展其功能。2. 获得与请求地址所匹配的ActionMapping对象,AcionMapping对象用于封装一个特定acion的配置信息3. 根据ActionMapping中的配置信息获得ActionForm对象(该对象将缓存到request或session中),并将表单数据填充到ACtiOnFOrm中,然后根据AClionMaPPing的配置决定是否验证ACIiOnFOrnb如果验证,将调用ActionForm的validate方法,若其返回的ActionErros对象中包含ActionMessagc对象则表示验证失败,将转向action配置信息input屈性所指示的地址。4. 如果ActionForm无需验证或验证通过将创建并缓存与请求地址匹配的Action对象,将ActionMapping对象、ActionForm对象、request和response作为参数调用其execute方法。5. 根据Action对象的execute方法返回的ActionForward对象,将请求转发或重定向到该ACtionFOrWard所封装的地址。14. 用struts+hibernate做一个增删查改(机试)15. Struts2.0与Strutsl.×有何区别。特征Struts的一Struts的2行动班StrUtS的一要求采取行动班,以延长一个抽象的基类。个共同的问题在Struts的12Struts的行动,引能实施一项行动的界面,随着其他接口,使可选和定制服务。Struts的2提供了相应的actionsupport流的执行一,是编程抽象类而不是接口。线程模型StrUtS的一行动是单身,必须线程安全的,因为将只有一个实例一类来处理所有的请求采取行动。单身人士策略地方的限制,可以做些什么与Struts的一行动,并要求加倍小心发展。行动的资源,必须线程安全的或同步。Servlet的依赖Struts的一行动,依赖于该Servlet的空气污染指数以来,httpservletrequest>R1httpservletresponse传递给Execute方法,当一个行动是引用。测试收获的投入一个主要障碍,以测试StrUtS的行动是Execute方法暴露了Servlet的空气污染指数。第三党的扩展,StrUtS的testcase,提供了一套模拟对象的Struts1oStruts的使用actionform对象捕获输入。样的行动,所有actionforms必须扩大基地,流的。由于其他的JaVaBeanS不能被用来作为actionforms,开发商常常造成多余的班,以捕捉的投入。dynabeans可以用来作为种替代创造常规actionform班,但这里太,发展商可能会redescribing现有的JavaBeans0常用的接II。虽然,这项行动的界面是不是必需的。任何波霍对象与执行的签名可以被用来作为个Struts的二行动的时象。2Struts的行动对象是实例对于每个请求,因此没有线程安全问题。(在实践中,SerVIet的容器,产生许多扔离家出走的对象,每次请求,并多一个对象不施加表现罚款,或影响垃圾收集)°StrUtS的行动,二是不耦合的一个货柜。最经常的Servlet的背景是派代表作为简单的地图,让行动,以测试陷入孤立的境地。2Struts的行动仍然可以使用原来的请求和响应,如果普要。不过,其他建筑元素,减少或消除褥要访问Kttpservetrequest或httpservletresponse直接。2Struts的行动可以测试实例化的行动,设置属性,引用的方法。依赖注入的支持也使测试更简单。Struts的2使用性能的行动作为输入属性,不再需要第二个输入对象。输入属性可能是丰富的对象类型可能有自己的属性。行动性质可以从网页上通过taglibs。Struts的2还支持actionform模式,以及波霍形式,对象和波霍行动。丰富的对象类型,其中包括商业利益或域对象,可以被用来作为输入/输出对象。该modeldriven功能简化taglb的提述,波霍投入对象。语言表达有约束力 的价值观 纳入意见StnJtS的一整合与jstl,所以它使用jstl下午。的日已基本对象图遍历,但相对薄弱的收集和索引财产的支持。Struts的一使用标准的JSP机制,有约束力的物体进入该网页的背景下访问。StrUtS的二可以使用jstl,但框架也支持一个更强大和灵活的语言表达所谓的''对象图形符号语言”(ognl)oStruts的2使用''Valuestack”技术,使该taglibs可以访问的价值观没有耦合您的看法,以对象类型,这是演染。该VaIiJeStaCk策略允许重用的意见覆盖的类型可能有相同的属性名称,但不同的属性类型。类型转换Struts的actionform属性通常是所有Struts的2使用Ognl为类型转换。该框架包字符串。Struts的一用途的商品beanutils为类型转换。转换器每级的,而不是配置的每个实例。括转换为基本和共同的对象类型和原始。验证控制行动的执行Struts的一支持手册审定通过验证方法对actionform,或通过个扩展到商品校验。班级可以有不同的验证背景为同一阶层,但不能链,以验证就分对象。Struts的一支持独立的请求处理器(生命周期)为每个单元,但所有的行动,在该模块必须共用相同的生命周期。Struts的2支持手册审定通过验证的方法和XWOrk的验证框架。该XWOrk的验证框架支持链接验证分为分性能的使用验证的定义为性能流的类型和验证。2Struts的支持,创造不同的生命周期对每行动的基础上通过拦截堆登。自定义栈,才能创造和使用不同的行动,视需要。16. Struts/webwork的工作机制,它有哪些标签Struts2框架的大致处理流程如下:O浏览器发送请求,例如请求mypage.action、reportsmyrcport.pdf等。核心控制器FilterDiSPatCher根据请求决定调用合适的ActionoWcbWork的拦截器链自动对请求应用通用功能,例如WOrkflow、ValidatiOn或文件上传等功能。O回调ACtiOn的execute方法,该execute方法先获取用户请求参数,然后执行某种数据库操作,既可以是将数据保存到数据库,也可以从数据库中检索信息。实际上,因为ACtion只是一个控制器,它会调用业务逻辑组件来处理用户的请求。SACtion的execute方法处理结果信息将被输出到浏览器中,可以是HTML页面、图像,也可以是PDF文档或者其他文档。此时支持的视图技术非常多,既支持JSP,也支持VeIoCity、FreeMarker等模板技术。Hibernate1. 什么是Hibernate的并发机制?怎么去处理并发问题?Hibernate并发机制:a、Hibernate的Session对象是非线程安全的,对于单个请求,单个会话,单个的工作单元(即单个事务,单个线程),它通常只使用一次,然后就丢弃。如果一个Session实例允许共享的话,那些支持并发运行的,例如Httprequest,sessionbeans将会导致出现资源争用。如果在HttpSession中有hibernate的Session的话,就口J能会出现同步访问HttpSession0只要用户足够快的点击浏览器的“刷新”,就会导致两个并发运行的线程使用同一个Session.b、多个事务并发访问同一块资源,可能会引发第一类丢失更新,脏读,幻读,不可重匏读,第二类丢失更新一系列的问题。解决方案:设置事务隔离级别。Serializable:串行化。隔离级别最高RepeatableRead:可重复读ReadCommitted:id提交数据读ReadUncommitted:未提交数据读。隔离级别最差设置锁:乐观锁和悲观锁。乐观锁:使用版本号或时间戳来检测更新丢失,在<dass>的映射中设置OPtimiStiC-IOCk="all"可以在没有版本或者时间戳属性映射的情况下实现版本检查,此时Hibernate将比较一行记录的每个字段的状态行级悲观锁:Hibemate总是使用数据库的锁定机制,从不在内存中锁定对象!只要为JDBC连接指定一下隔离级别,然后让数据库去搞定一切就够了。类LockMode定义了Hibernate所需的不同的锁定级别:LoCkMode.UPGRADE,lockMode.UPGRADE_NOWAIELOCkMOde.READ;2. Hibernate和spring中常出现的几个异常org.springframework.beans.factory.BeanCreationE×ception:Errorcreatingbeanwithname'SessionFactory'definedinServIetContextresourceWEB-INFapplicationContext.xml:Initializationofbeanfailed;nestedexceptionisorg.hibernate.MappingException:Repeatedcolumninmappingforentity:com.xindeco.myregister.pojo.MyRegisterInfocolumn:password(shouldbemappedwithinsert="false"update="false")出错原因:password和repassword同时对应数据库表中的PaSSWOrd一列,同时update和insert都设为true。Xml文件如下:<propertyname="password"type="java.Iang.String"update=,true"insert="true"access="property"column="password"length="32"/><propertyname="repassword"type="java.Iang.String"update="false"insert="false"access="property"column="password"length="32">解决方法:将repassword的insert和update设为false。org.springframework.beans.factory.BeanCreationE×ception:Errorcreatingbeanwithname'SessionFactory'definedinServIetContextresourceWEB-INFapplicationContext.xml:Initializationofbeanfailed;nestedexceptionisorg.hibernate.PropertyNotFoundException:CouldnotfindagetterforIDinclass错误原因:hibernate的映射文件中ID是大写的,而poj。的类中id是小写的解决方法:要么将poj。类中的id改称大写,要么把hibernate的映射文件中的ID改称小写。3. Hibernate与jdbc的联系hibernate是jdbc的轻量级封装,包括jdbc的与数据库的连接(用hibernate.property的配置文件实现当然本质是封装了jdbc的forname).和查询,删除等代码,都用面向对象的思想用代码联系起来,hibernate通过hbm配置文件把p。类的字段和数据库的字段关联起来比如数据库的id,在po类中就是praviteLongid;publicLonggetld();publicsetld(Longid);然后hql语句也是面向对象的,它的查询语句不是查询数据库而是查询类的,这些实现的魔法就是xml文件,其实hibernate=封装的jdbc+xml文件4. Hibernate与spring的联系hibernate中的一些对象可以给Spring来管理,让Spring容器来创建hibernate中一些对象实例化。例如:SessionFactorytHibernateTempIate等。Hibernate本来是对数据库的一些操作,放在DAO层,而Spring给业务层的方法定义了事务,业务层调用DAO层的方法,很好的将Hibernate的操作也加入到事务中来了。5. Hibernate自带的分页机制是什么?如果不使用Hibernate自带的分页,则采用什么方式分页?1、hibernate自带的分页机制:获得SeSSiOn对象后,从Session中获得Query对象。用QiIery.setFirstResult():设置要显示的第一行数据,Query-SetMaxResuItsO:设置要显示的最后一行数据。2、不使用hibernate自带的分页,可采用sql语句分页,如:5:为每页显示的记录,2为当前页:select*top5fromtablewheretabidnotin(selecttabidtop(2-l)*5fromtable);6. hibernate的对象的三种持久化状态,并给出解释?不清楚hibernate的对象的三种持久化状态,只知道hibernate对象的三种状态,下面有介绍。7. hibernate中一对多配置文件返回的是什么?hibernate中一对多配置文件会相应的映射为两张表,并且它们之间的关系是一对多的。例如:一个StUdent和dasses表的关系。一个学生只能是一个班的,一个班可以有多个学生。8. updateO和SaVeOrUPdate()的区别?UPdate()和SaVeOrUPdate()是用来对跨SeSSiOn的PO进行状态管理的。UPdate()方法操作的对象必须是持久化了的对象。也就是说,如果此对象在数据库中不存在的话,就不能使用UPdate()方法。SaVeorUPdate()方法操作的对象既可以使持久化了的,也可以使没有持久化的对象。如果是持久化了的对象调用SaVeorUPdate()则会更新数据库中的对象:如果是未持久化的对象使用此方法,则SaVe到数据库中。9. hibernate的三种状态之间如何转换当对象由瞬时状态(TranSient)-save。时,就变成了持久化状态。当我们在Session里存储对象的时候,实际是在Session的Map里存了一份,也就是它的缓存里放了一份,然后,又到数据库里存了一份,在缓存里这一份叫持久对象(PerSiStent)。Session-ClOSe()了,它的缓存也都关闭了,整个SeSSiOn也就失效了,这个时候,这个对象变成了游离状态(Detaehed),但数据库中还是存在的。当游离状态(DetaChed)UPdate()时,又变为了持久状态(PerSiStent)。当持久状态(PerSiStent)delete。时>又变为了瞬时状态(TranSient),此时,数据库中没有与之对应的记录。10. hibernate拒绝连接、服务器崩溃的原因?最少写5个1 .db没有打开2 .网络连接可能出了问题3 .连接配置错了4 .驱动的driver,Url是否都写对了5 .LIB下加入相应驱动,数据连接代码是否有误6 .数据库配置可能有问题7 .当前联接太多了,服务器都有访问人数限制的8 .服务器的相应端口没有开,即它不提供相应的服务9 hibernate有哪些缓存,分别怎么使用?10你对hibernate的了解到了一个什么样的程度?11写出一个Sql语句体现hibernate中一对多的关系11. Hibernate介绍Hiberrlate是个开放源代码的时象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得JaVa程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibemate可以应用在任何使用JDBC的场合,既可以在JaVa的客户端程序使用,也可以在SerVlet/JSP的Web应用中使用,最具革命意义的是,Hibemate可以在应用EJB的J2EE罢构中取代CMP,完成数据持久化的重任:Hibernate的核心接口-共有5个,分另U为:SeSSion、SessionFactory.Transaction.QUerV和ConfigUratiOn。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控处