大学SSH复习资料 7页

  • 64.00 KB
  • 2022-07-30 发布

大学SSH复习资料

  • 7页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
  4. 网站客服QQ:403074932
Q1、Hibernate的工作原理:1、读取并解析配置文件;2、读取并解析映射信息,创建SessionFactory;3、打开Session;4、创建事务Transaction;5、持久化操作;6、提交事务;7、关闭Session;8、关闭SessionFactory;Q2、用Hibernate怎么实现?(SessionFactory和Session是怎么使用的?)hibernate的初始化读取hibernate的配置信息,创建SessionFactory。A、创建Configeration的实例。它的构造方法:将配置文件信息(hibernate-config.xml)读入到内存。一个Configeration实例代表java类到sql数据库映射的集合。B、创建SessionFactory实例。把Configeration的所有配置信息拷贝到SessionFactory的缓存中。SessionFactory是实例代表一个数据库的存储源,创建后不再与Configeration有关联。C、调用SessionFactory创建Session方法。1)、用户自行创建JDBC连接。Connectioncon=dataSource.getConnection();Sessions=SessionFactory.openSession(con);2)、让SessionFactory提供连接Sessions=sessionFactory.openSession();D、通过Session接口提供的各种方法类访问数据库。Q3、Hibernate中类之间的关联关系有几种?Hibernate中的关联(Association)映射主要有3种:一对一关联、一对多(或多对一)关联、多对多关联。每种关联都可以分为单向和双向两种。关联映射的本质:是将关联关系映射到数据库中。类与类之间的关系主要体系在表与表之间的关系进行操作,他们都是对对象进行操作,我们程序中把所有类与表映射到一起,他们通过配置文件中的mang-to-one、one-to-many、many-to-many实现。Q4、什么是Hibernate延迟加载?Hibernate中提供了哪几种延迟加载?延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。1、实体对象的延迟加载:通过将Class的lazy属性设置为true,来开启实体的延迟加载特性。2、集合类型的延迟加载:通过将元素的lazy属性设置为true来开启集合类型的延迟加载特性。\n3、属性延迟加载:通过对元素的lazy属性设置true来开启属性的延迟加载;当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。Q5、Hibernate的缓存体系:一级缓存:Session有一个内置的缓存,其中存放了被当前工作单元加载的对象。每个Session都有自己独立的缓存,且只能被当前工作单元访问。二级缓存:SessionFactory的外置的可插拔的缓存插件。其中的数据可被多个Session共享访问。SessionFactory的内置缓存:存放了映射元数据,预定义的Sql语句。Q6、Hibernate中持久化对象的3种状态:A、临时状态(transient)特征:1、不处于Session缓存中2、数据库中没有对象记录B、持久化状态(persisted)特征:1、处于Session缓存中2、持久化对象数据库中设有对象记录3、Session在特定时刻会保持二者同步C、游离或托管状态(detached)特征:1、不再位于Session缓存中2、游离对象由持久化状态转变而来,数据库中可能还有对应记录。Q7、Hibernate的核心类和接口有:Configuration类、SessionFactory类、Session类、Query和Criteria类、Transaction接口。Q8、事务的4个特性:原子性、一致性、隔离性和持续性。Q9、为什么使用Hibernate?1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码;2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作;3.hibernate使用Java反射机制,而不是字节码增强程序来实现透明性;4.hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。\nQ10、Hibernate的查询方式:Sql、Criteria,objectcomptositionHql:1、属性查询2、参数查询、命名参数查询3、关联查询4、分页查询5、统计函数Q11、Hibernate的分页查询机制:例如:从数据库中的第20000条数据开始查后面100条记录Query q = session.createQuery("from Cat as c");q.setFirstResult(20000);q.setMaxResults(100);List l = q.list();Q12、Hibernate中怎样处理事务?Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的Transaction实际上是底层的JDBCTransaction的封装,或者是JTATransaction的封装。Hibernate可以配置为JDBCTransaction或者是JTATransaction,这取决于在hibernate.properties中的配置。Q13、JDBC连接(步骤):1、载入数据库驱动:Class.forName(“com.mysql.jdbc.Driver”);2、建立数据库连接,获得Connection对象。3、根据SQL语句建立Statement对象或者PreparedStatement对象。4、用Connection对象执行SQL语句,获得结果集ResultSet对象。5、然后一条一条读取结果集ResultSet对象中的数据,保存在某个Java对象中。6、如果是修改或者删除操作需要对数据发Commit命令。7、最后依次关闭各个Statement对象和Connection对象。Q14、Struts的主要配置文件:全局配置文件(struts.properties)核心配置文件(struts.xml)Q15、Struts的核心组件:action、Result、Intercptor。\nQ16、若要在页面中使用Struts应该怎样:<%@taglibprefix=”s”uri=”/struts-tags”%>Q17、Struts2的交互过程:在Struts2中表现层为JSP和Struts标签库,模型层是ActionBean和ActionFormBean,控制层为ActionServlet和ActionMapping。首先在Tomcat启动的时候,自动检查web应用程序内是否有web.xml的配置文件,若没有找到的话就去找Tomcat下的web.xml配置文件,读取struts-config.xml配置信息然后将其加载到内存中!ActionServlet从struts-config.xml文件中读取配置信息将form-beans,action-formward等配置对象实例化!当ActionServlet接受一个来自客户端的请求时:(1)检索和用去请求向匹配ActionMapping实例,如果不存在则返回请求路径无效500错误信息。匹配则进入下一步创建ActionForm.(2)检查是否有ActionFrom实例存在,如果ActionFrom实例不存在,就创建一个ActionForm对象,把用户提交的表单数据保存到ActionFrom中!(3)根据配置决定是否进行表单验证(validate),若需要验证就调用就调用ActionForm的validate()方法。如果ActionForm的validate()方法返回null或者返回一个不包含ActionMessage的ActionErrors的对象,说明验证成功,继续进行下一步,不成功返回错误信息!(4)ActionServlet根据ActionMapping实例所包含的映射信息决定将请求转发给哪个Action,若没有知道相应的Action实例存在,则首先创建这个Action实例,然后调用Action的execute()方法!(5)Action的execute()方法返回一个ActionForward对象。ActionServlet把转发给ActionForward对象指向的jsp组件。(6)ActionForward对象指向的jsp组件生成的动态网页返回给客户端。Q18、CGI(CommonGateInterface)是通用网关接口的简称。Q19、OGNL(ObjectGraphNavigationLanguage)是对象图形导航语言。OGNL有一个根对象的概念,顺着根对象,其他对象被放置在ContextMap中,包括Session、Application、Request和Attr这些Map。所以,访问这些对象时需要使用#来告诉OGNL不要在根对象中寻找,而是在其他的上下文中进行寻找。Q20、Spring的核心概念:Spring是一个轻量级的IOC和AOP框架。Spring的核心要点是——支持不绑定到特定J2EE服务的可重用业务和数据访问对象。Q21、IoC和AOP的定义和作用?IOC(控制反转),控制反转模式的基本概念是——不直接创建对象,但是描述创建它们的方式。作用:系统中通过引入实现了IoC模式的IoC容器,即可由IoC容器来管理对象的生命周期、依赖关系等,使互相依赖的对象之间解耦实现了松耦合。AOP(面向切面),AOP将应用系统分为两部分,核心关注点和横切关注点。其中业务处理的主要流程是核心关注点,与业务无关的通用逻辑是横切关注点。作用:引入AOP以后调用过程中织入,可以分离出系统的核心关注点和横切关注点,从横向的角度,截取业务管理行为的内部消息,以达到织入权限管理逻辑的目的。\n(Spring目前仅支持使用方法调用作为连接点)。Q22、提供AOP有什么好处?SpringAOP作为一种非侵略性的,轻型的AOP框架,开发者无需使用预编译器或其他的元标签,在Java程序中应用AOP。目前,AOP的功能完全集成到了Spring事务管理、日志和其他各种特性的上下文中。Q23、依赖注入的好处是:程序可扩展性更强;利于并行开发。Q24、如何使用Spring2.0实现声明式事务?默认的设置如下:\n事务传播设置是REQUIRED。隔离级别是DEFAULT。事务是读/写。事务超时默认是依赖于事务系统的,或者事务超时没有被支持。任何RuntimeException将触发事务回滚,但是任何CheckedException将不触发事务回滚。Q25、Spring怎么实现依赖注入?Q26、如何配置单向多对一关联?Q27、如何配置单向一对多关联?Q28、Struts1和Struts2的区别:Struts2是基于Webwork的一个全新框架,而不是Struts1的升级。Struts2的核心框架是当作一个filter来实现其功能的,而Struts1是ActionServlet。在Action上,Struts1都少不了要传递Request等参数,还要继承Action父类,而Struts2只要实现一个publicStringexecute()就可以了,这样Action就可以实现脱离Servlet测试。Struts2还提供了拦截器等Struts1所没有的技术。Q29、SSH整合过程的认识,各自提供什么功能:struts、spring、hibernate的整合步骤:(1)导入struts、spring、hibernate所必须的包(2)在web.xml中配置\n    contextConfigLocation  /WEB-INF/applicationContext.xml    org.springframework.web.context.ContextLoaderListener  (3)在struts-config.xml中配置 1、Struts:即表现层(View),控制层(Controller)负责页面转发,业务接口,表单;2、Hibernate:模型层(Model),通过管理实体对象来管理数据库表,并且提供缓存;3、Spring:主要提供IoC依赖注入,事务管理,AOP切面等功能。Q30、事务传播特性事务传播特性是指spring在进行事务的AOP是的一种配置,当当前的service被要求进行AOP代理的时候,就会根据这个事务传播特性策略来配置事务。通常来说,该配置包括:1.PROPAGATION_REQUIRED:如果存在一个事务,则支持当前事务。如果没有事务则开启新的事物。2.PROPAGATION_SUPPORTS:如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。3.PROPAGATION_MANDATORY:如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。4.PROPAGATION_REQUIRES_NEW:总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。5.PROPAGATION_NOT_SUPPORTED:总是非事务地执行,并挂起任何存在的事务。6.PROPAGATION_NEVER:总是非事务地执行,如果存在一个活动事务,则抛出异常7.(spring)PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按TransactionDefinition.PROPAGATION_REQUIRED属性执行。通常来说使用PROPAGATION_SUPPORTS,PROPAGATION_NOT_SUPPORTED就可以满足需求,然而在程序中会有service相互调用等情况出现,这个就需要事务传播的控制了。

相关文档