框架基础知识

上传人:m**** 文档编号:189579780 上传时间:2023-02-23 格式:DOCX 页数:8 大小:28.89KB
返回 下载 相关 举报
框架基础知识_第1页
第1页 / 共8页
框架基础知识_第2页
第2页 / 共8页
框架基础知识_第3页
第3页 / 共8页
点击查看更多>>
资源描述
SSH 基础Struts,Spring,Hibernate 框架基础1. Hibernate 工作原理及为什么要用?原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建 SessionFactory 3.打开 Session 4. 创建事务 Transation 5.持久化操作 6.提交事务 7.关闭 Session 8.关闭 SesstionFactory 为什么要用: 1. 对 JDBC 访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复 性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他 很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程 序来实现透明性。 4. hibernate 的性能非常好,因为它是个轻量级框架。映射的灵活性很出 色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。2Hibernate 是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象b)集合(Collection)2. Hibernate3提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在 与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省 了服务器的内存开销,从而提高了服务器的性能。3Hibernate 中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们 程序中把所有的表与类都映射在一起,它们通过配置文件中的 many-to-one、one-to-many、 many-to-many4.Struts1 流程:1、客户端浏览器发出HTTP请求。2、根据web.xml配置,该请求被ActionServlet接收。3、 根据struts-config.xml配置,ActionServlet先将请求中的参数填充到ActionForm中,然后 ActionServlet 再将请求发送到 Action 进行处理。 4、是否验证,需要验证则调用 ActionForm 的validate方法,验证失败则跳转到input,成功则继续。5、Action从ActionForm获得数据, 调用javabean中的业务方法处理数据。6、Action返回ActionForward对象,跳转到相应JSP 页面或Actiono 7、返回HTTP响应到客户端浏览器。MVC设计模式:modal:“模型” 也称业务逻辑, 是正真完成任 务的代码,相当与 JavaBeanview:视图,其实就是显示界面,相当于JSPcontroller:控制器,他控制模型和视 图的交互过程,相当于servletstruts1是基于MVC设计模式hibernate是基于ORM对象关系 映射5.struts 是什么?struts1是基于JSP和servlet的一个开源的Web应用框架,使用的是MVC的设计模式struts2 是基于webwork技术的框架,是sun和webwork公司联手开发的一个功能非常齐全的框架, struts2 和 struts1 没有任何关系,是一个全新的框架6.spring 是什么?spring是一个集成了许多第三方框架的大杂烩,其核心技术是IOC (控制反转,也称依赖注入)和AOP (面向切面编程)7. hibernate 是什么?hibernate是基于ORM对象关系映射(完成对象数据到关系数据映射的机制)实现的,做数据 持久化的工具8. JSF 是什么?JavaServer Face是基于组件的web开发框架,跟sturts差不多的框架9. 数据库里面的索引和约束是什么? 索引是为了提高数据的检索速度,索引是建立在数据表上,根据一个或多个字段建立的约束 是为了保持数据的完整性,约束有非空约束,主键约束,外键约束等等。10. spring 是什么这个问题,往往可以通过我们为什么要使用spring这个问题来切入:AOP让开发人员可以 创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后, 公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会 增加域对象的对象模型的复杂性。 IOC 允许创建一个可以构造对象的应用环境,然后向这 些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC就像反 过来的JNDI。没有 使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction), 每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)0 Spring 即使一个 AOP 框架,也是一 IOC 容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用JavaBean属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需 要时替换具有类似接口的协作对象。11. 用自己的话简要阐述 struts2 的执行流程。Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action 和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,包含 了框架内部的控制流程和处理机制。业务控制器 Action 和业务逻辑组件是需要用户来自己 实现的。用户在开发 Action 和业务逻辑组件的同时,还需要编写相关的配置文件,供核心 控制器FilterDispatcher来使用。Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是 WebWork的升级版本。基本简要流程如下1、客户端浏览器发出HTTP请求。2、根据web.xml 配置,该请求被 FilterDispatcher 接收。3、根据 struts.xml 配置,找到需要调用的 Action 类和方法,并通过IoC方式,将值注入给Aciton。4、Action调用业务逻辑组件处理业务 逻辑,这一步包含表单验证。5、Action执行完毕,根据struts.xml中的配置找到对应的返 回结果result,并跳转到相应页面。6、返回HTTP响应到客户端浏览器。Hibernate 工作原理及为什么要用?原理:1. 读取并解析配置文件2. 读取并解析映射信息,创建 SessionFactory3. 打开 Sesssion4. 创建事务 Transation5. 持久化操作6. 提交事务7.关闭 Session8. 关闭 SesstionFactory为什么要用:1. 对 JDBC 访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的 简化 DAO 层的编码工作3. hibernate 使用 Java 反射机制,而不是字节码增强程序来实现透明性。4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系 数据库,从一对一到多对多的各种复杂关系。2 Hibernate 是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当 Hibernate 在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时, 对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器 的性能。3Hibernate 中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们 程序中把所有的表与类都映射在一起,它们通过配置文件中的 many-to-one、one-to-many、 many-to-many、4 说下 Hibernate 的缓存机制1. 内部缓存存在 Hibernate 中又叫一级缓存,属于应用事物级缓存2. 二级缓存:a) 应用及缓存b) 分布式缓存条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统 频繁使用、非 关键数据c) 第三方缓存的实现5 Hibernate 的查询方式Sql、Criteria,object comptositionHql:1、 属性查询2、参数查询、命名参数查询3、关联查询4、分页查询5、统计函数6 如何优化 Hibernate?1.使用双向一对多关联,不使用单向一对多2. 灵活使用单向一对多关联3. 不用一对一,用多对一取代4. 配置对象缓存,不使用集合缓存5对多集合使用Bag,多对多集合使用Set6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰7. Struts工作机制?为什么要使用Struts?工作机制:Struts 的工作流程:在web应用启动时就会加载初始化ActionServlet,ActionServlet从 struts-config.xml文件中读取配置信息,把它们存放到各种配置对象 当 ActionServlet 接收到一个客户请求时,将执行如下流程.-检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到 ActionForm 对象中 ;-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法; -(4)如果 ActionForm 的validate。方法返回 null或返回一个不包含 ActionMessage的 ActuibErrors 对象, 就表示表单验证成功;-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果 相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;-(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward 对象指向的 JSP 组件;-(7)ActionForward 对象指向 JSP 组件生成动态网页,返回给客户;为什么要用:JSP、Servlet、JavaBean 技术的出现给我们构建强大的企业应用系统提供了可能。但用这些 技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来 的规则,这就是框架,Struts便应运而生。基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件8. Struts 的 validate 框架是如何验证的?在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。9 说下 Struts 的设计模式MVC模式:web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配 置好的 ActionForm 对象被创建, 并被填入表单相应的数据, ActionServler 根据 Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的 Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先 创建这个对象,然后调用Action的execute ()方法。Execute ()从ActionForm对象中获 取数据,完成业务逻辑,返回一个 ActionForward 对象, ActionServlet 再把客户请求转发给 ActionForward 对象指定的 jsp 组件, ActionForward 对象指定的 jsp 生成动态的网页,返回 给客户。10 spring 工作机制及为什么要用?1. spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负 责对请求进行真正的处理工作。2. DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的 Controller.3. DispatcherServlet 请请求提交到目标 Controller4. Controller进行业务逻辑处理后,会返回一个ModelAndView5. Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视 图对象6. 视图对象负责渲染返回给客户端。为什么用:AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序 代码中。使用AOP后,公共服务(比如日志、持久性、事务等)就可以分解成方面并应 用到域对象上,同时不会增加域对象的对象模型的复杂性。IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如 单词倒置所表明的,IOC就像反过来的JNDI。没有使用一堆抽象工厂、服务定位器、 单元素(singleton)和直接构造(straight construction),每一个对象都是用其协作对象构造 的。因此是由容器管理协作对象(collaborator)oSpring即使一个AOP框架,也是一 IOC容器。Spring最好的地方是它有助于您替换对象。 有了 Spring,只要用JavaBean属性和配置文件加入依赖性(协作对象)。然后可以很容易 地在需要时替换具有类似接口的协作对象。 其它知识点:不会涉及到2级缓存以及hqll. Configuration读取 hibernate.cfg.xml.并把.hbm.xml 文件交给 HbmBinder 做第一次处理,HbmBinder 根 据.hbm.xml 解析出 PersistentClass, Collection,然后在创建 SessionFactory 的时候,会对 Collection 做第 2 次处理塞入关联2 PersistentClass根据.hbm.xml产生的描述要持久化的类的信息的类.主要的实例变量包括List vProperty propertiesProperty对象里的有个Value属性value,通过value来描述该property和数据库里的哪些列对应以及获得该property对应的type3 Value 主要分为SimpleValue,Collection,Component,ToOneSimpleValue主要包括Table和Columns属性,用于描述简单属性或单主键 Collection 主要属性包括collectionTable 表示 Collection 里面 element 对象所对应的 Tablekey表示CollectionTable里的哪几列和Collection owner所对应的表的主键做关联 element,描述了主表(referencingTable)从表的 EnityName,以及从表对应的 PersistentClass Component 可以用来描述多主键,通过属性 properties 来表示ToOne包括被引用的属性名,被引用的实体名columns,(被引用的属性名不能 和 columns 同时设置),用于 OneToOne,ManyToOne4 SessionFactory在创建 SessionFactory 的时候,会根据 Configuration 里 Classes 和 Collections,仓U建 EntityPersister 和 CollectionPersister.SessionFactory 会缓存这些 persisters. EnityPersistenter 的 key 是 EntityName,CollectionPersister 的 key 是 entityName+propertyName5 EntityPersister分为SingleTableEntityPersister(一个实体一个表/一个类继承结构一个表)通过一个字段做标识JoinedSubclassEntityPersister(每个子类一个表) UnionSubclassEntityPersister(每个具体类一个表)6 CollectionPersister 封装对一个 Collection 的 crud 操作.不过做insert,update,delete,recreate的时候,会判In verse是否为false .如果为false才会执行相 应的操作,表示是由Collection维护关系.如果Inverse=true,表示关联关系是由多端来维护(即直接通过操作Collection里的element来 维护,而不是通过操作 Collection 来维护)则该 CollectionPersister 不会做任何操作7 Type主要包括对 SqlTypes 的封装,以及 CollectionType,EntityType (ManyToOneType,OneToOneType)主要接口有 nullSafeGet( 从 ResultSet 拼装出对象),nullSafeSet(给 PreparedStatement setParameter).可以通过Value.getType(获得Type对于 EntityType,CollectionType就是通过 resolve 方法从ResultSet 中拼装出对象EntityType的nullSafeSet,就是获取One端对象的主键所对应 的 Type 进行 nullSafeSetCollectionType没有实现nullSafeSet,通过保存时的Cascade 或者 CollectionPersister,将 Collection 的 Element 一个一个的 set 也可以自定义Type,实现UserType接口具体见 封装对一个 entity 的 crud 操作,在创建 EntityPersister 实例过程中,会产 生crud的sql,可以在以后的操作提高效率。不过如果是DynamicInsert, DynamicUpdate,则会 根据对象修改的属性动态的生成sqlDAS 不支持类继承的映射,因此只会用到 SingleTableEntityPersister8 StatefulPersistenceContext StatefulPersistenceContext 和 SessionImpl 是一 一对应的,会缓存通过 SessionImpl操作过的对象,包括entity和collection.主要属性有 EntitiesByKey key=EntityKey, value=entity.(EntityKey=id+EntityPersister+EntityMode entityMode) entityEntries key=entity, value=EntityEntry.EntityEntry用于描述一个对象的持久化状态,如DELETED,MANAGED等等CollectionsByKey key=CollectionKey, value=PersistentCollection CollectionKey=CollectionPersister+key+EntityMode这个 Key 是通过 Collection.value.getType.nullSafeGet(得到的 PersistentCollection 是 hibernate 对于 Collection 的封装,主要用于实现延迟加载collectionEntries key=PersistentCollection,value=CollectionEntry StatefulPersistenceContext的主要用途可以实现对象之间的关联关系 的设置,动态的更新,以及对缓存的数据无需显示调用save,update,delete的 方法就可以实现这些操作,是因为在Tmit()的时候会调用 session.flush(),会保证内存对象状态和数据库的一致性9 Cascade,CascadeStyle,CascadingAction在 Cascade 执行级联操作的时候,会通过 CascadeStyle.doCascade( CascadingAction)来判断是否可以执行cascade,并且当要保存的对象有外键 约束的关联对象时候会通过ForeignKeyDirection来判断是应该在保存该对象 之前要保存关联对象还是在保存该对象之后再保存关联对象10 Loader,CriteriaQueryTranslator,Criteria,QueryParameters, CriteriaJoinWalker 用于 Criteria api 对实体的查询Criteria是一个查询entity的api。可以设置类似where条件的表达式, Select字段,order等等当使用 Criteria 查询时,首先会创建 CriteriaLoader,CriteriaLoader 会通过 CriteriaQueryTranslator 从 Criteria 中得到查询参数QueryParameters,通过 CriteriaJoinWalker 把 Criteria 变成 sql,然后执行查询11 ActionQueue当调用 session 对实体进行 insert,update,delete 的时候,只是会创建相应的action放入ActionQueue,然后在session.flush()的时候才会真正操作 数据库ActionQueue 的执行顺序:executeActions( insertions );executeActions( updates );executeActions( collectionRemovals );exec uteActions( collectionUpdates );executeActions( collectionCreations );executeActions( deletions )12 Tuplizer用于根据 entityname 实例化出对象,以及 set/get property hibernate 内置的有 PojoEntityTuplizer,Dom4jEntityTuplizerDAS 是在 hibernate 基础之上实现了 DataObject 的持久化,支持 DataObject 对象之间的关联, 延迟加载,级联,控制反转,不支持 DataObject 的继承1.新实现了一个 SDOEntityTuplizer支持创建 DataObject,以及 set/get DataObject 的属性SDOEntityTuplizer实现抽象类中规定的如下方法SDOEntityTuplizer 类的 buildInstantiator 方法用来根据 mapping 信息来为相应的实体建立不 同的构造器,我们用SDOEntityInstantiator来实现SDO的构造器:2其中SDOComponentInstantiator是用来当实体有复合主键用于实例化表示主键的类3PropertyAccessor是Hibernate中定义的一个接口,用来表达在访问mapping的实体对象的 属性的时候使用的“属性访问器”它有两个相关的接口: Getter接口和Setter接口。 DASPropertyAccessor的内部结构如下图所示:其中 getGetter 方法和 getSetter方法是 PropertyAccessor 接口定的规格DASGetter 实现 Getter 接口,DASSetter 类实现 Setter 接口。4自定义type,支持blob,clob的存储BlobFileType从一个文件路径读取文件存入数据库blob字段从数据库读取 blob字段,生成文件放在临时目录,返回路径BlobByteArrayType把一个byte数组存入blob字段.从数据库读取blob 字段放入 byteClobFileType从一个文件路径读取文件存入数据库clob字段从数据库读取 clob字段,生成文件放在临时目录,返回路径ClobStringType把一个String存入blob字段.从数据库读取blob字段放入 String 5 对查询实体的支持增加一个查询实体定义文件.dbquery.因为查询实体没有唯一标识,所以默认的 id的是”$queryEntityId$”用户也可以自己指定一个列做唯一标识.在Loader.prepareQueryStatement()里增加转换带查询实体的Sql.SelectFragment.addColumn()做了判断,如果列名是$queryEntityId$査询的 column 就替换 成queryEntityId常量.在 Loader.getRow()增加判断如果 key.getIdentifier()是queryEntityId 的话,则不做检查,看内存是否存在. AbstractEntityPersister.getDatabaseSnapshot()里修改生成的查询 语句,如果有QueryEntity则用定义的sql替换QueryEntity
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!