企业商用项目总结.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《企业商用项目总结.doc》由会员分享,可在线阅读,更多相关《企业商用项目总结.doc(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Struts部分1. Struts工作原理:之前MVC开发的流程(执行的流程),以登录为例:先编写JSP的登录表单 Servlet(接收参数,整合或验证参数,调用DAO进行处理,跳转) JSP信息提示等操作使用Struts后的流程:先编写登录表单(使用Struts标签完成) Action(接收参数,整合或验证参数,调用DAO进行处理,跳转) JSP信息提示操作Struts的工作原理谈到Struts,我们就不得不提到MVC设计模式。MVC即Model-View-Controller的缩写,它是web应用当中的常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
2、Struts是MVC的一种实现,它很好的结合了Jsp,Java Servlet,Java Bean ,Taglib等技术。那么我们来看看Struts框架的工作原理:控制:在Struts中,ActionServlet起着一个控制器(Controller)的作用。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充 Action Form(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实
3、现核心商业逻辑,它可以访问java bean 或调用EJB。所有这些控制逻辑利用Struts-config.xml文件来配置。视图:主要是由Jsp来控制页面输出的。它接收到Action Form中的数据,利用html,taglib,bean,logic等显示数据。模型:在Struts中,主要存在三种bean,分别是:Action,ActionForm,EJB或者Java Bean。ActionForm用来封装客户请求信息,Action取得ActionForm中的数据,再由EJB或者Java Bean进行处理。2.Struts的组织3. struts.xml里的分发配置可以通过路径来分发不同的方
4、法:action=dept_insertdept表示进入的Action,insert表示Action中要执行的方法名。在forward.jsp中,可以加入自动跳转功能。$message ,5秒后自动跳转!如果没有跳转,请点这里!Struts2中自动处理中文乱码,只要编码使用的是UTF-8,就不会出现乱码。其原理就是Filter过滤器。过滤器可以实现编码过滤,以及登录过滤功能Action中的validate验证方法,也支持分发操作。可以针对某一个方法来进行验证。public void validateInsert() if (dept.getDname() = null | dept.getDn
5、ame().trim().equals() super.addFieldError(dname, 部门名称不能为空!);/pages/suc.jsp/index.jsp/error.jsp/forward.jsp/pages/dept/dept_list.jsp/pages/dept/dept_update.jsp 4.Struts的循环和判断标签 0$deptno $dname $loc 修改删除没有查询到任何数据!Hibernate部分3.1、Hibernate对象的三种状态通过Session操作pojo对象时,这些pojo对象在被操作的过程中,会处于以下三种状态之一:瞬时态:对象没有被持
6、久化过(没有保存到数据库中的对象)持久态:数据库中有该对象对应的数据,而且有一个Session操作过此对象(该对象与某一个当前存在的Session关联)游离态:数据库中有该对象对应的数据,但操作该对象的Session没有了。三种状态之间的转换:瞬时 持久:Session的save()、saveOrUpdate()持久 瞬时:Session的delete()游离 持久:Session的update()、saveOrUpdate()持久 游离:Session的close()通过Session.get()返回的对象是持久态。持久态对象存在以下两个特点(特性):1) 同一条数据,使用同一个Sessio
7、n返回的持久态对象只能存在一个。a) 此设定的主要目的是为了提高查询性能b) 这种方式称为Hibernate的一级缓存,但由于连接需要关闭,所以一般不能使用c) 以后还会有一个二级缓存,并不会因为连接关闭而销毁,可以使用。2) 当修改持久态对象的属性时,如果提交了事务,则数据库会一起修改。a) 一般可以用在登录后,修改登录时间的功能。3.2主键生成方式id generator表示主键生成方式,需要根据表的设计来选择,可以使用以下几种之一:1) assigned:由程序提供主键值2) sequence:主键使用序列自增长(Oracle)3) native:主键使用关键字的形式完成自增长(MySQ
8、L,SQLServer,DB2)4) increment:程序实现自增长(通用)5) uuid.hex:随机生成主键值(32位)3.3、Hibernate的三种查询功能Hibernate中有三种方法可以实现数据库的查询功能:1) Session查询:get()/load()方法按主键查询2) Query(HQL)查询:通过HQL/SQL语句来完成查询3) Criteria(QBC)查询:通过纯Java代码,不写语句,动态生成条件。get和load之间的关系,有什么区别?两个方法都是根据类型和主键查询数据库,并返回对应的持久态对象的。当没有查询到数据库时,get会返回空值,load方法则会直接提
9、示异常。使用load查询时,可能会出现Hibernate经典的懒汉式加载异常。org.hibernate.LazyInitializationException: could not initialize proxy - no Session为了提高查询性能,Hibernate想到了通过懒汉式加载数据库数据的方式来节省内存想解决这个问题只有两种方法:1) 不关闭连接(不推荐)2) 别用懒汉式Query查询中一般使用的是HQL语句,不支持添加功能,但支持修改和删除。删除功能:Session的删除代码简单,性能低,无法一次删除多条数据。Query的删除代码复杂,性能高,支持批量删除。平时开发中使用
10、Session的,只有当实现批量删除功能时,才使用Query。修改功能:Session的代码简单,修改的是所有字段(适合正常的修改功能)Query的代码复杂,可以自行选择要修改的字段,适合在修改某一个值时使用(例如:切换推荐状态,加积分)没有添加功能的原因是,即便使用了语句来编写添加,也和Session的save()方法上没有任何区别,因此HIbernate就没有准备这个功能。编写查询HQL语句时,可以不写SELECT,这时返回的就是pojo对象或其集合。也支持写SELECT关键字,如果写了这个关键字,返回的会是:1) 如果SELECT后只有一个属性,则返回的集合中就是这个属性的类型。2) 如
11、果SELECT后有多个属性,默认返回的每一条数据是一个Object,但我们想要的是pojo对象,因此需要进行转换,可以使用一个转换器(ResultTransformer)来完成数据转换。通过测试可以发现,这样编写比较复杂,因此开发中不建议使用。Query有一个子接口SQLQuery,支持SQL语句的数据库处理的。但使用SQL也需要配合转换器才能将结果自动转换为pojo对象。Criteria是Query的同级接口,也支持分页,查询等方法,但不支持添加,修改以及删除功能。通过传入的pojo类型来决定查询的表,通过传入的各种方法生成查询条件。查询条件包括deptno = 15Restrictions
12、.eq(deptno, 15)deptno 15Restrictions.gt(deptno, (byte)15)deptno between 10 and 30Restrictions.between(deptno, (byte) 10, (byte) 30)dname LIKE ?Restrictions.like(dname, %d%)deptno IN (10,30,50)Byte datas = 10,30,50; c.add(Restrictions.in(deptno, datas);AND 和OR不推荐,需要多条件方法嵌套排序使用AddOrder和Order类分组或统计还要使用
13、其他的一组类来完成。注意掌握查询全部以及加入Like查询条件的方法,在后面 Spring + Hibernate时会用到。3.4、复合主键映射复合主键表在开发中一般都会尽量避免,只有一种情况会出现,就是多对多关系的中间表。例如:学生选课、权限设计这里以学生选课为例,应该包括三张表:学生表:学生编号(字符),姓名,性别等课程表:课程编号(数字),课程名称,类型,学分等选课表(中间表):学生编号,课程编号中间表只有两个字段时,一般会设计成复合主键。主键的作用是作为数据的唯一标识。如果不是复合主键,是单一主键时,判断主键是否重复,只需要让两个主键值直接进行比较就可以了。但如果是复合主键,需要保证所有
14、主键都相同,才是重复,因此必须准备一个比较的方法。因此这里将所有的主键单独放到了一个类中,称为Id类。判断主键重复时,只需要比较这个Id类即可,该类中必须覆写equals和hashCode注意编写HQL语句时,要按照类中的关系来处理,需要查找对象中对象的属性。3.5、继承关系映射如果项目是先设计pojo类,再根据pojo反向推导表来完成开发的,就有可能会使用继承映射。Hibernate支持反向生成表的功能,可以将带有继承关系的pojo类映射到对应的表中。假设有三个类:1) 人类:id、name,age2) 学生类:score3) 工人类:sal表设计:1) 三张表a) 人表i. id(主键)i
15、i. nameiii. ageb) 学生表i. id(主键,外键)ii. scorec) 工人表i. id(主键,外键)ii. sald) 优点:标准范式,可扩展性强e) 缺点:代码很复杂,SQL语句关联查询非常多,需要多次SQL操作才能完成添加、修改或删除2) 一张表:a) 人表i. idii. nameiii. ageiv. scorev. salvi. typeb) 优点:代码容易c) 缺点:可扩展性差。使用Hibernate后,可以从两种设计中选择一种,并可以自动解决出现的问题。重点掌握表示外键。Set容器映射的功能和使用场景与多对多关系完全相同。但Set容器映射认为中间表其实只关系一
16、个字段就够了。也就是说,在角色对象中,不保存权限对象的集合,而是只保存权限ID的集合。但列表显示时,也只能显示ID了。3.6、一对多关系映射(重点)一对多是表中的概念,两张表才会有一对多的这种关系。两张表之间必须存在外键,同时外键不能是主键。对应生成类后,也应该有两个类。假设现在有省份和城市两张表,外键在城市表中。对应生成类后怎样描述关系?1) 省份对象中要包含城市的Set集合2) 城市对象中要包含省份的对象建立表时,一定要加入外键,否则生成映射不会自动带有一对多关系,还需要手工配置。在映射中,会出现一个inverse属性,作用为:关联关系由对方进行维护。现在有Province和City两张表
17、关联,因为存在外键,所以两张才关联,因此可以说外键就是关联关系。外键在City表中,也就是说,修改City表可以改变外键,也就是说,外键由City来维护。因此关联关系由City来维护。inverse是配置在Province的映射文件中的,因此City对于Province来说就是对方。对于Province来说,关联关系就是由对方来进行维护的。一对多关系中,外键肯定在多的一方,肯定由多的一方来维护关系。inverse肯定要配置到一的一方,所以这个配置是固定的,不需要修改。fetch表示关联查询方式,可以选择select或joinjoin表示直接关联查询出省份信息select表示只查询城市,用到省份
18、时再查询省份(懒汉式)针对一对多关系,应用最多的功能就是查询。先看从省份关联查询城市。注意lazy=false的使用,当出现懒汉式异常时,再根据情况加入lazy。3.7、Hibernate的缓存机制Hibernate中的缓存一般使用二级缓存。一级缓存也叫Session缓存,Session关闭就消失了。二级缓存也叫SessionFactory,只有当服务器关闭时,才会销毁。还有一种Query查询缓存,是在二级缓存开启的基础上加入的扩展功能。配置缓存需要第三方的支持,一般使用ehcache或oscache。配置步骤:1) 在核心配置文件中打开缓存2) 配置缓存类和使用的缓存方式a) read-on
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 企业 商用 项目 总结
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内