版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序员常见的问题解答1.Configuration接口的功能,主要作用?创建一个Configuration对象配置和启动hibernate框架创建SessionFactory对象的实例读取hibernate.cfg.xml核心配置文件2.Hibernate持久化操作的七步?1.创建Configuration对象2.创建SessionFactory对象3.创建Session对象4.开始事物5.持久化操作6.提交事物7.关闭Session3.怎么样使用HQL查询方法?创建一个查询createQuery()创建一个Query查询接口的实例,该实例可以利用HQL语言来进行数据库的查询操作。HOL语句要给createQuery()方法作为参数才可以让Query方法来进行查询操作4.事务具有几个基本特征,都是什么吗?(ACID):1Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。2Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。3Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。4Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。5.如果两个事物并发运行,就可能出现以上五种并发问题,都是什么?1第一类丢失更新(Lostupdate)2.脏读取(DirtyReads):3.虚读(PhantomReads)4.不可重复读取(Non-repeatableReads)5第二类丢失更新(Secondlostupdatesproblem)6.hibertnate中的关联关系包括1.一对一的关联模式2.一对多的关联模式3.多对多的关联模式7.怎么样把映射表的xml文件配置到Hibernate核心配置文件中:<mappingresource="model/Student.hbm.xml"/>8.ORM全称?(Object-RelationMapping)对象关系映射9.ORM的工作原理?把持久化类映射成数据库中的表把对象映射成数据库中表的一行记录把对象的属性映射成数据库中表的字段10.Session接口的功能它是应用程序与数据库之间交互的但线程对象,一个session同样对应一个数据库,所以它是hibernate提供的与进行持久化操作的对象(持久化操作为增,删,改,查)同时它也是一个事物对象的工厂,及Transaction对象两种创建方式11.session中最常用的几种持久化操作的方法?save()delete()update()load()get()12.Session缓存的作用?1、减少访问数据库的频率。2、保证缓存中的对象于数据库中的相关记录保持同步。当缓存中持久化对象的状态发生了变化,Session并不会立即执行相关的SQL语句,而是在清理Session缓存时一并执行13.什么是Hibernate的一级缓存,二级缓存一级缓存:Session、二级缓存:SessionFactory14.配置二级缓存的步骤1.选择需要使用第二级缓存的持久化类,设置它的命名缓存的并发访问策略2.选择合适的缓存插件,每一种缓存插件都有自带的配置文件需要手工编写该配置文件15.hibernate框架提供的最常用的检索方式?1.OID检索方式、2.HQL检索方式、3.SQL检索方式16.HQL最常用的5种实用技术?1.实体查询、2.属性查询、3.实体更新和删除、4.排序、5.参数动态绑定17实体对象的生命周期即三种状态?Transient(瞬态)、Persistent(持久态)、Detached(游离态)一个实体对象的实例通过不同的操作可以在这三种状态之间相互转换18.Persistent(持久态)对象的特征?每个Persistent状态的实体对象都与一个Session对象的实例相关联。处于Persistent状态的实体对象是与数据库中的记录相关联的。Hibernate会依据Persistent状态的实体对象的属性变化而改变数据库中相对应的记录。19.error和exception有什么区别?Error是错误,exception是异常20.Hibernate中最常用的连接池组件?C3P0组件扩展提1,如何在添加多方时建立hibernate中的级联关系?扩展提2,如何在删除多方时解除hibernate的级联关系?扩展提3,<set>有什么作用?建立关系使用的关键字扩展提4,<set中的Inverse和cascade都是什么意思,分别能添什么属性?>Inverse:设置关系的维护端,如果为true,则把对方设为维护端Cascade:设置级联属性:有deletesave-updateall21.ajax的全称?异步的javascript和xmlAsynchronismjavaScriptAndXML22.ajax是由什么技术组成的?Html,javascript.DHTML和DOM组成23.ajax的核心技术是什么?JavaScript24.ajax核心的对象?XMLHttpRequest25.ajax以什么样的方式发送请求?异步的方式26.XMLHttpRequest调用什么方法来建立连接?Open()27.XMLHttpRequest以什么样的方式发送请求?Send()28.XMLHttpRequest在不同的版本浏览器中是否有不同的new法?是29.readyState:提供当前HTML的就绪状态?0-(未初始化)还没有调用send()方法1-(载入)已调用send()方法,正在发送请求2-(载入完成)send()方法执行完成,已经接收到全部响应内容3-(交互)正在解析响应内容4-(完成)响应内容解析完成,可以在客户端调用了30.XMLHttpRequest用什么方法来规定处理响应请求的方法?XMLHttpRequest.onreadystatechange=updatePage;1、Spring实化例对象的几种方法使用类构造器方法、使用静态工厂方法、使用实例工厂方法2、Spring注入对象的几种方法构造函数注入、属性注入、工厂方法注入、注解注入3、什么是控制反转应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的,这样控制权就由应用本身转移到了外部容器,控制权的转移就是所谓的控制反转。4、什么是依赖注入在运行期,由外部容器动态地将依赖对象注入到组件中5、什么是SpringSpring是一个开源的控制反转和面向切面的容器框架,它的主要目的是简化企业开发。6、Spring的主要功能组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:核心容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。SpringAOP:通过配置管理特性,SpringAOP模块直接将面向方面的编程功能集成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何对象支持AOP。SpringAOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用SpringAOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。SpringDAO:JDBCDAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。SpringDAO的面向JDBC的异常遵从通用的DAO异常层次结构。SpringORM:Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有这些都遵从Spring的通用事务和DAO异常层次结构。SpringWeb模块:Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。所以,Spring框架支持与JakartaStruts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。SpringMVC框架:MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量视图技术,其中包括JSP、Velocity、Tiles、iText和POI。7、Spring主要管理Web程序中的什么代替工厂管理对象组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:核心容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。SpringAOP:通过配置管理特性,SpringAOP模块直接将面向方面的编程功能集成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何对象支持AOP。SpringAOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用SpringAOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。SpringDAO:JDBCDAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打和开关闭连接)。SpringDAO的面向JDBC的异常遵从通用的DAO异常层次结构。SpringORM:Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有这些都遵从Spring的通用事务和DAO异常层次结构。SpringWeb模块:Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。所以,Spring框架支持与JakartaStruts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。SpringMVC框架:MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量视图技术,其中包括JSP、Velocity、Tiles、iText和POI。Spring框架的功能可以用在任何J2EE服务器中,大多数功能也适用于不受管理的环境。Spring的核心要点是:支持不绑定到特定J2EE服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。struts2有以下优点:1>Struts2没有像struts1那样跟ServletAPI和strutsAPI有着紧密的耦合,Struts2的应用可以不依赖于ServletAPI和strutsAPI。Struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计。publicclassOrderListActionextendsAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{}}2>Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。3>Strut2提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型。在Struts1中,如果我们要实现同样的功能,就必须向Struts1的底层实现BeanUtil行才。4>Struts2提供支持多种表现层技术,如:JSP、freeMarker、Velocity等5>Struts2的输入校验可以对指定方法进行校验,解决了Struts1长久之痛。搭建Struts2环境时,我们一般需要做以下几个步骤的工作:1》找到开发Struts2应用需要使用到的jar文件.2》编写Struts2的配置文件3》在web.xml中加入Struts2MVC框架启动配置struts2.1以后就需要fileupload的jar包通过包来管理功能相似的模块在struts1中,通过<actionpath=“/test/helloworld节点的”>path属性指定访问该action的URL路径。在struts2中,情况就不是这样了,访问struts2中的action的URL路径由两部份组成:包的命名空间+action的名称,例如访问本例子HelloWorldAction的URL路径为:/test/helloworld(注意:完整路径为:http://localhost:端口/内容路径/test/helloworld)。另外我们也可以加上.action后缀访问此Action。常用的常量定义<!--指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法和freemarker、velocity的输出--><constantname="struts.i18n.encoding"value="UTF-8"/><!--该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。--><constantname="struts.action.extension"value="do"/><!--设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭--><constantname="struts.serve.static.browserCache"value="false"/><!--当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开--><constantname="struts.configuration.xml.reload"value="true"/><!--开发模式下使用,这样可以打印出更详细的错误信息--><constantname="struts.devMode"value="true"/><!–与spring集成时,指定由spring负责action对象的创建--><constantname="struts.objectFactory"value="spring"/><!–该属性设置Struts2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false。--><constantname="struts.enable.DynamicMethodInvocation"value="false"/><!--上传文件的大小限制--><constantname="struts.multipart.maxSize"value=“10701096"/>基于网页上传文件大小不要超过5M否则应考虑开发插件来保证上传的稳定struts2对于每一个请求,都会创建一个新的actionstruts1:create-->cache动态方法调用(不推荐使用该方法,建议关闭)<constantname="struts.enable.DynamicMethodInvocation"value="false"/>使用通配符定义action自定义类型转换器ActionContext:TheActionContextisthecontextinwhichanActionisexecuted.Eachcontextisbasicallyacontainerofobjectsanactionneedsforexecutionlikethesession,parameters,locale,etc.TheActionContextisthreadlocalwhichmeansthatvaluesstoredintheActionContextareuniqueperthread.SeetheThreadLocalclassformoreinformation.Thebenefitofthisisyoudon'tneedworryaboutauserspecificactioncontext,youjustgetit:ActionContextcontext=ActionContext.getContext();Finally,becauseofthethreadlocalusageyoudon'tneedtoworryaboutmakingyouractionsthreadsafe.ServletActionContext:Web-specificcontextinformationforactions.ThisclasssubclassesActionContextwhichprovidesaccesstothingsliketheactionname,valuestack,etc.Thisclassaddsaccesstowebobjectsservletparameters,requestattributesandthingsliketheHTTPsession.文件上传FileUtils工具类自定义拦截器拦截器栈因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截器需要引用系统默认的defaultStack,这样应用才可以使用struts2框架提供的众多功能。如果希望包下的所有action都使用自定义的拦截器,可以通过<default-interceptor-refname=“permissionStack”把/>拦截器定义为默认拦截器。注意:每个包只能指定一个默认拦截器。另外,一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用。文章分为十三个小块儿对Hibernate性能优化技巧进行总结性分析,分析如下:一、在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中,这缓存大太时会严重显示性能,所以在使用Hibernate处理大数据量的,可以使用session.clear()或者session.evict(Object)在处理过程中,清除全部的缓存或者清除某个对象。二、对大数据量查询时,慎用list()或者iterator()返回查询结果,<1>.使用List()返回结果时,Hibernate会所有查询结果初始化为持久化对象,结果集较大时,会占用很多的处理时间。<2>.而使用iterator()返回结果时,在每次调用iterator.next()返回对象并使用对象时,Hibernate才调用查询将对应的对象初始化,对于大数据量时,每调用一次查询都会花费较多的时间。当结果集较大,但是含有较大量相同的数据,或者结果集不是全部都会使用时,使用iterator()才有优势。<3>.对于大数据量,使用qry.scroll()可以得到较好的处理速度以及性能。而且直接对结果集向前向后滚动。三、对于关联操作,Hibernate虽然可以表达复杂的数据关系,但请慎用,使数据关系较为简单时会得到较好的效率,特别是较深层次的关联时,性能会很差。四、对含有关联的PO(持久化对象)时,若default-cascade="all"或者“save-update”,新增PO时,请注意对PO中的集合的赋值操作,因为有可能使得多执行一次update操作。五、在一对多、多对一的关系中,使用延迟加载机制,会使不少的对象在使用时才会初始化,这样可使得节省内存空间以及减少数据库的负荷,而且若PO中的集合没有被使用时,就可减少互数据库的交互从而减少处理时间。六、对于大数据量新增、修改、删除操作或者是对大数据量的查询,与数据库的交互次数是决定处理时间的最重要因素,减少交互的次数是提升效率的最好途径,所以在开发过程中,请将show_sql设置为true,深入了解Hibernate的处理过程,尝试不同的方式,可以使得效率提升。七、Hibernate是以JDBC为基础,但是Hibernate是对JDBC的优化,其中使用Hibernate的缓冲机制会使性能提升,如使用二级缓存以及查询缓存,若命中率较高明,性能会是到大幅提升。八、Hibernate可以通过设置hibernate.jdbc.fetch_size,hibernate.jdbc.batch_size等属性,对Hibernate进行优化。九、不过值得注意的是,一些数据库提供的主键生成机制在效率上未必最佳,大量并发insert数据时可能会引起表之间的互锁。数据库提供的主键生成机制,往往是通过在一个内部表中保存当前主键状态(如对于自增型主键而言,此内部表中就维护着当前的最大值和递增量),之后每次插入数据会读取这个最大值,然后加上递增量作为新记录的主键,之后再把这个新的最大值更新回内部表中,这样,一次Insert操作可能导致数据库内部多次表读写操作,同时伴随的还有数据的加锁解锁操作,这对性能产生了较大影响。因此,对于并发Insert要求较高的系统,推荐采用uuid.hex作为主键生成机制。十、DynamicUpdate如果选定,生则成UpdateSQL时不包含未发生变动的字段属性,这样可以在一定程度上提升SQL执行效能.DynamicInsert如果选定,生则成InsertSQL时不包含未发生变动的字段属性,这样可以在一定程度上提升SQL执行效能十一、在编写代码的时候请,对将POJO的getter/setterprivate,Hibernate将无法对属性的存取进行优化,只能转而采用传统的反射机制进行操作,这将导致大量的性能开销(特别是在1.4之前的SunJDK版本以及IBMJDK中,反射所带来方法设定为public,如果设定为的系统开销相当可观)。十二、在one-to-many关系中,将many一方设为主动方(inverse=false)将有助性能的改善。十三、由于多对多关联的性能不佳(由于引入了中间表,一次读取操作需要反复数次查询),因此在设计中应该避免大量使用。十四、Hibernate支持两种锁机制:即通常所说的“悲观锁(PessimisticLocking)”和“乐观锁(OptimisticLocking)”。悲观锁带来数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。乐观锁机制在一定程度上解决了这个问题.乐观锁机制避免了长事务中的数据库加锁开销,大大提升了大并发量下的系统整体性能表现。以上便是对Hibernate性能优化技巧总结,希望能对您有所帮助优化hibernate性能的几点建议1、针对oracle数据库而言,FetchSize是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数,一般设置为30、50、100。Oracle数据库的JDBC驱动默认的FetchSize=15,设置FetchSize设置为:30、50,性能会有明显提升,如果继续增大,超出100,性能提升不明显,反而会消耗内存。即在hibernate配制文件中进行配制:1<propertyname="hibernateProperties">2<props>3<propkey="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>4<propkey="hibernate.show_sql">fals
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年国家知识产权局专利局专利审查协作河南中心招聘60人备考题库有答案详解
- 惠农区委全面依法治区委员会办公室关于选聘行政执法监督员20人的备考题库及一套参考答案详解
- 2025年中国科学院高能物理研究所AI应用工程师岗位招聘备考题库附答案详解
- 2025年泸州融兆人力资源管理有限公司关于招聘警务辅助人员的备考题库及一套参考答案详解
- 互联网安全意识培训课件
- 2025年固镇县司法局选聘专职人民调解员16人备考题库及一套完整答案详解
- 机械装备故障诊断与预测维护研究答辩
- 竞业协议豁免合同
- 统一公司合同范本
- 续租地合同协议书
- 2025年甘肃省张掖市培黎职业学院招聘非事业编制工作人员14人(公共基础知识)测试题附答案解析
- 2025年服饰时尚行业数字化转型研究报告
- 机关单位绩效考核系统建设方案
- 物流搬运工合同范本
- 2025年心肺复苏指南课件
- 2025年湖北省宜昌市新质生产力发展研判:聚焦“3+2”主导产业打造长江经济带新质生产力发展示范区图
- 2025 小学二年级数学上册解决问题审题方法课件
- 老年患者术后加速康复外科(ERAS)实施方案
- 2024-2025学年广州市越秀区八年级上学期期末历史试卷(含答案)
- 2025年餐饮与管理考试题及答案
- 2025事业单位考试公共基础知识测试题及答案
评论
0/150
提交评论