OA项目开发

编程技术  /  houtizong 发布于 3年前   146
准备环境

1,数据库
创建数据库
2,MyEclipse工程
1,新建Web Project
改工程的默认编码为UTF-8
改JSP的默认编码为UTF-8
Java代码与注释与Xml代码的行宽设为150个字符
(只打开当前的工程,其他的都关掉并隐藏)
2,添加框架环境(jar包与配置文件)
Junit4
Struts2
Hibernate
Spring

3,整合SSH2
首先整合Spring和Hibernate
在applicationContext.xml文件中配置
                    
<!-- 自动扫描和装配bean --><context:component-scan base-package="cn.itcast.oa"></context:component-scan><!-- 配置sessionFactory(整合hibernate) --><context:property-placeholder location="classpath:jdbc.properties"/><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><!-- 指定Hibernate配置文件的位置 --><property name="configLocation" value="classpath:hibernate.cfg.xml"></property><!-- 配置DataSource --><property name="dataSource"><bean class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 数据库连接信息 --><property name="jdbcUrl" value="${jdbcUrl}"></property><property name="driverClass" value="${driverClass}"></property><property name="user" value="${user}"></property><property name="password" value="${password}"></property><!-- 其他配置信息 --><!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 --><property name="initialPoolSize" value="3"></property><!--连接池中保留的最小连接数。Default: 3 --><property name="minPoolSize" value="3"></property><!--连接池中保留的最大连接数。Default: 15 --><property name="maxPoolSize" value="15"></property><!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --><property name="acquireIncrement" value="3"></property><!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 --><property name="maxStatements" value="8"></property><!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 --><property name="maxStatementsPerConnection" value="5"></property><!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --><property name="maxIdleTime" value="1800"></property></bean></property></bean><!-- 配置声明式事务 ,使用基于注解的方式--><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><tx:annotation-driven transaction-manager="transactionManager"/>


1,了解功能,包括细节(要清楚需要做什么样的功能)。
2,设计实体/表
先设计实体,再生成表,叫正向工程(推荐)。
或先设计表,再生成实体,叫反向工程。
3,分析所有的功能到Action的方法的粒度(就是到每一个请求的粒度)
4,实现功能
1,写出Action类并定义出其中的方法,并确定每个Action方法要做什么事。
2,实现Action方法,确定出要使用的Service方法。
3,实现Service方法,确定出要使用的Dao方法。
4,实现Dao方法。
5,写JSP页面。
5,测试。



===================== 设计实体 ==========================
1,有几个实体?
2,实体之间有什么关系?
3,每个实体中都有什么属性?
1,主键
2,关联关系属性
一个关联关系是一条线,有两端,一端有一个表达这个关联关系的属性
3,一般的属性(在显示页面或表单页面等中需要显示或填写的信息)
4,特殊的属性(为解决某问题而设计的属性,如不要设计年龄字段,而是需要一个生日的字段)



===================== 映射实体 ==========================
1,写注释,格式为:什么属性,我与谁的什么关系。例:users属性,我与User的一对多。
2,拷模板
1,多对一的模板
<many-to-one name="" class="" column=""></many-to-one>
2,一对多(Set)
<set name="">
<key column=""></key>
<one-to-many class=""/>
</set>
3,多对多
<set name="" table="" inverse="">
        <key column=""></key>
        <many-to-many class="" column=""></many-to-many>
        </set>
需要某一边把inverse设为true。

3,填空


说明:
<key column=""/> 是指的引用当前对象表主键的那个外键列。



===================== 分析所有的功能到每一个请求的粒度 =========================
增删改查,共4个功能,需要6个请求,就是说需要6个Action方法。
把这个6个Action方法放到同一个Action中,其中的方法声明为:

功能 方法名 返回值 页面
-----------------------------------------------------
列表 list() list list.jsp, dispatcher
删除 delete() toList /xxAction_list.action, redirect
添加页面 addUI() addUI addUI.jsp
添加 add() toList
修改页面 editUI() editUI editUI.jsp
修改 edit() toList





使用了Struts2后,在JSP中写的EL表达式(${})查询变量的顺序为:
1,作用域
2,对象栈的属性
3,Map

Action中增删改查方法的模板为:
/** 列表 */
public String list(){ return "list"; }
/** 删除 */
public String delete(){ return "toList"; }
/** 添加页面 */
public String addUI(){ return "saveUI"; }
/** 添加 */
public String add(){ return "toList"; }
/** 修改页面 */
public String editUI(){ return "saveUI"; }
/** 修改 */
public String edit(){ return "toList"; }




View + Service + Dao --》 View + Service(原Service+原Dao)
注解@Transactional可以被继承,他就可以当前类与子类中的public方法进行事务控制,但对父类的声明的public方法不起作用,所以需要写到父类上,且写一次就可以。


使用Spring的OpenSessionInViewFilter过滤器解决Hibernate的懒加载异常。


部门管理中的小细节
1,转到新建页面时,应默认选中之前列表中显显的上级部门。
2,如果不是在顶级列表页面,则应显示"返回上一级"的按钮。
3,删除、添加、修改成功后转到原列表页面,而不是顶级列表页面(重要)。


========================= 完成一组功能(增删改查)的流程(已经分析完功能) ============================
一、准备Action相关
1,定义XxAction类,要继承BaseAction
2,定义Action中所有的方法(要有注释、方法名、返回值)
3,创建JSP页面
4,配置Action
1,(Spring)在XxAction上写注解:@Controller、@Scope("prototype")
2,(Struts2)在struts.xml中配置action
<action name="xxAction_*" class="xxAction" method="{1}">
<result name="list">/WEB-INF/jsp/xxAction/list.jsp</result>
<result name="saveUI">/WEB-INF/jsp/xxAction/saveUI.jsp</result>
<result name="toList" type="redirectAction">xxAction_list</result>
</action>

二、准备Service相关
1,创建XxService接口,要继承BaseDao
2,创建XxServiceImpl,要继承BaseDaoImpl
3,配置:在XxServiceImpl上写注解 @Service(交给Spring管理这个对象)
4,声明:在BaseAction中写 @Resource private XxService xxService;

三、填充代码
1,Action方法,如果用到了新的Service方法,则创建出来,并写好注释。
1,添加功能的代码步骤为
// 1,新建对象并设置属性(也可以使用model)
// 2,保存
2,修改功能的代码步骤为
// 1,从数据库中获取原对象
// 2,设置要修改的属性
// 3,更新
2,Service方法(主要是实现上一步创建出的新方法)
3,JSP页面
1,拷贝静态页面中的代码到JSP中
2,<%@ include file="/WEB-INF/jsp/public/common.jspf"%>
3,替换 "../" 为 "${pageContext.request.contextPath}/"
4,
1,列表页面
<s:iterator value="..">
<s:a action="..">
2,表单页面
<s:form action="..">
<s:hidden>
<s:textfield>
<s:textarea>
<s:select>
<s:radio>
...
3,公共的
<s:if>
<s:a>
...




Shift + Alt + A  进入或退出块操作模式

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客