- 浏览: 17513 次
最新评论
1.Spring课程内容重点
1)理论
了解IOC和AOP概念
了解IOC(DI)和AOP(动态代理)原理
*2)熟练掌握Spring和Struts2,Hibernate整合应用
*3)掌握Spring事务管理应用
上面2,3建议采用注解的应用方式。
==========首先完成下面两个案例===========
1)利用Struts2+Hibernate结构完成资费管理模块
(案例hibernate02_2)
2)利用Struts2+Spring+Hibernate结构完成资费管理模块(案例spring04_3)
==========项目重构============
项目SSH版本结构采用ssh-2.jpg结构图。
1.项目一期功能
1)资费管理模块(COST)
对资费信息进行增删改查的维护。资费是为用户提供服务后,对用户收费的一个标准。
2)账务账号模块(ACCOUNT)
对账务账号进行增删改查的维护。用户使用电信服务,必须先开通一个账务账号。
3)业务账号模块(SERVICE)
对业务账号进行增删改查的维护。用户开通一个账务账号后,可以使用电信不同的服务器服务,每一种服务提供了一个业务账号。
4)角色管理(ROLE,ROLE_PRIVILEGE,
privileges.xml)
对角色信息进行增删改查的维护,不同的角色可以有不同的操作权限。
首先在privileges.xml中录入权限操作请求的URL.
然后对角色信息进行维护,主要对ROLE和ROLE_PRIVILEGE表进行操作。
5)管理员管理模块(ADMIN,ADMIN_ROLE)
对管理员信息进行增删改查的维护,不同的管理员可以有不同的角色。
对管理员 信息维护,主要是对ADMIN和ADMIN_ROLE表进行操作.
2.项目二期功能
1)对前面5个模块做SSH重构。
a.主要是采用Spring+Hibernate重构原有的DAO
b.将Action,Service,DAO交给Spring容器管理。
由Spring容器采用IOC机制控制。
c.事务管理采用Spring AOP声明式事务管理实现
d.修改struts.xml的<action>元素的class属性,将该属性值写成容器中的action组件的id值。
2)扩展功能1:权限控制模块
当管理员登录后,执行具体操作时,需要对其进行权限检查,看看是否有该操作权限,如果没有跳转到nopower.html提示页面。
(如果想改变管理员拥有的操作权限,可以通过角色管理和管理员管理模块变更)
3)扩展功能2:生成账单模块
根据用户使用的服务记录和资费标准,调用一个PL/SQL程序生成账单信息。利用一个任务调度组件,每月月底定时触发该PL/SQL程序,统一生成账单信息
4)扩展功能3:账单模块
根据账务账号,身份号等条件查询账单信息。
5)扩展功能4:报表模块
统计某个用户在每个月使用服务器的总时间。
==========SSH重构方法=============
1.工程改造:原工程Struts2+JDBC
目标工程:Struts2+Spring+Hibernate
1)追加jar包
追加Spring框架的开发包(ioc,aop)
追加Hibernate框架的开发包
追加struts2-spring-plugin.jar
追加dbcp连接池开发包
2)追加配置
src下添加Spring配置文件.
--applicationContext-component.xml
--applicationContext-transaction.xml
web.xml中追加ContextLoaderListener配置
--加载路径classpath:applicationContext-*.xml
web.xml中追加OpenSessionInViewFilter配置
---------------------------------------
2.功能改造(账务账号查询功能)
1)熟悉原有设计流程
accountSearch.action
-->AccountSearchAction.execute
-->AccountDAOImpl.findByParameters()
-->/account/account_list.jsp
2)改造AccountDAO.findByParameters()
--检查是否有操作表的POJO类和hbm.xml,没有追加
追加Account.hbm.xml映射描述文件和POJO类
(注意修改POJO和hbm.xml保持一致)
--重新创建一个AccountDAO组件,采用Spring+Hibernate方式实现。
--将AccountDAO组件扫描到Spring容器
在applicationContext-component.xml开启组件扫描。
在AccountDAO类定义前添加@Repository注解.
将SessionFactory给AccountDAO注入。
--单体测试,测试Spring中的AccountDAO
3)改造AccountSearchAction
--将Action扫描到Spring容器
--采用@Resource注入方式使用DAO
--修改<action>配置的class属性值
4)改造完毕,测试
3.追加业务账号查询
1)设计请求处理流程
searchService.action-->SearchServiceAction
-->HibernateServiceDAO-->service/service_list.jsp
2)编写HibernateServiceDAO
--添加操作表的POJO和hbm.xml。检查POJO和hbm.xml是否一致,注意hbm.xml中pojo的包路径。
--在applicationContext-component.xml中的sessionFactory定义中加载hbm.xml
--编写HibernateServiceDAO接口和实现
--将HibernateServiceDAO扫描到Spring容器
3)TODO 编写SearchServiceAction
--将Action扫描到Spring容器
--采用@Resource注入方式使用DAO
--修改<action>配置的class属性值
4)TODO 测试
4.追加权限控制功能
采用Struts2拦截器检查是否登录,是否拥有权限。
未登录定位到登陆页面,登录进行权限检查,没有权限定位提示页面。
1)修改privileges.xml权限配置文件。
将系统操作请求定义到privileges.xml中.
2)权限控制具体方案:
用户登录成功,向用户session写入用户对象信息和该用户具有的权限列表信息。
用户执行每个请求操作时,取出该请求的URL地址,和session中该用户的权限列表对比,如果包含在权限列表中,说明具有操作权限,如果没有包含,说明不具有操作权限。
5.定时执行生成账单任务
采用Quartz任务调度组件定时调用Oracle端的PL/SQL程序完成。
1)根据Service_Detail表生成Bill和Bill_Item表的记录。
2)将变更的业务备份信息同步到Service表
login.do-->LoginAction-->AdminInfoDAO
-->成功index.html(失败login.jsp)
============权限管理的设计==============
1.功能设计:
系统提供了管理员、角色、权限这3部分。
一个管理员可以具有多个角色。
一个角色可以具有多个权限。
一个权限可以具有多个操作请求URL。
系统通过管理员管理模块,角色管理模块可以对管理员、角色等信息进行维护。
权限控制的实现:用户登录成功后,会将用户信息和他具有的权限操作信息写入session.在用户进入系统进行各个操作时,首先会调用Struts2拦截器组件,检查用户是否登录,如果登录,检查当前操作URL是否在权限操作列表中。如果存在此URL,允许执行后续业务处理,不存在定位到没有权限提示页面.
2.数据库设计
Admin_Info(管理员表)
Admin_Role(管理员和角色关系表)
Role(角色表)
Role_Privilege(角色和权限关系表)
Privilege表或privileges.xml (权限表)
========任务调度设计===========
1.存储过程UPDATE_SERVICE_COST
将变更业务资费操作的记录更新到Service表
2.触发器gen_fee
通过DMS数据采集系统,向Service_Detail表插入数据时,执行该触发器处理。
该触发器在采集Service_Detail数据插入时,计算该表中COST费用字段值。根据使用UNIX服务器时间,针对套餐计费和计时计费用户分别进行计算。
3.存储过程GBILL_ALL
根据Service_Detail表的记录,生成Bill和Bill_Item账单信息。
主要逻辑:根据Service_Detail信息,首先生成Bill_Item,然后根据Bill_Item生成Bill记录,放到临时表中。之后从临时表取出数据,向Bill插入记录,有了Bill_ID主键值了,再向Bill_Item插入记录。
4.Java功能端的实现
每月月底自动执行GBILL_ALL(先执行)和UPDATE_SERVICE_COST(后执行)存储过程。
基于Quartz调度组件每月底24:00执行上述两个存储过程。
----------技术调研过程------------
1. Java 定时任务
CSDN
ITEYE
Blog
2.Quartz
了解Quartz作用
3.Quartz 使用入门
了解Quartz主要构成.
了解触发器表达式.
*4.Spring Quartz
Spring+Quartz使用示例
*5.Hibernate 调用存储过程
============账单管理的查询============
姓名
身份证
*账单时间
*账单ID
*账务账号
*账单费用
*支付状态
*支付方式
--------------SQL-------------
select b.ID,b.ACCOUNT_ID,
b.BILL_MONTH,b.COST,
b.PAYMENT_MODE,
b.PAY_STATE,
a.IDCARD_NO,a.REAL_NAME
from BILL b
join ACCOUNT a on(b.ACCOUNT_ID=a.ID)
//where
-------------HQL----------
select b.id,b.accountId,
b.billMonth,b.cost,
b.paymentMode,b.payState,
a.idcardNo,a.realName
from Bill b,Account a
where b.accountId = a.id
=======账单管理的账单明细查询========
需要2个查询语句,一个用于查询上面账单信息显示,
另一个用于查询明细列表信息。
----------1、查询账单信息 HQL--------
select b.id,b.accountId,
b.billMonth,b.cost,
a.idcardNo,a.realName
from Bill b,Account a
where b.accountId = a.id and b.id=?
-----------2、查询账单明细列表 SQL----------
*账单ID
*账单明细ID
*OS 账号
*服务器 IP
*账务账号ID
*时长sum(duration)
*费用
*资费
select bi.ITEM_ID,s.OS_USERNAME,
s.UNIX_HOST,s.ACCOUNT_ID,
bi.COST,c.NAME,sum(sd.DURATION)
from BILL_ITEM bi ,SERVICE s,
COST c,SERVICE_DETAIL sd
where bi.SERVICE_ID=s.ID
and s.COST_ID= c.ID
and sd.SERVICE_ID=s.ID
and bi.BILL_ID=?
group by bi.ITEM_ID,s.OS_USERNAME,
s.UNIX_HOST,s.ACCOUNT_ID,
bi.COST,c.NAME;
-----------3、查询账单明细的使用明细记录 SQL----------
select sd.CLIEND_ID,sd.LOGIN_TIME,
sd.LOGOUT_TIME,sd.DURATION,
sd.COST,c.NAME
from SERVICE_DETAIL sd,SERVICE s,
COST c,BILL_ITEM bi
where sd.SERVICE_ID=s.ID
and s.COST_ID=c.ID
and bi.SERVICE_ID=s.ID
and bi.ITEM_ID=?
===========报表模块查询============
1.客户使用使用时长
select a.id,a.login_name,a.real_name,
a.idcard_no,a.telephone,
to_char(sd.logout_time,'yyyymm') as month,
sum(sd.duration)
from Account a,Service s,Service_Detail sd
where a.id=s.account_id and s.id=sd.service_id
group by a.id,a.login_name,a.real_name,
a.idcard_no,a.telephone,
to_char(sd.logout_time,'yyyymm')
order by a.id,month;
2.时长排行榜
-----获取每一台服务器的前3名账户-----
select * from
(
select s1.unix_host,s1.account_id,a1.real_name,a1.idcard_no, sum(sd1.duration) total
from Service s1,Service_Detail sd1,Account a1
where s1.id=sd1.service_id(+) and s1.unix_host='192.168.0.20' and a1.id=s1.account_id
group by s1.unix_host,s1.account_id,a1.real_name,a1.idcard_no
--having sum(sd1.duration) is not null
order by total desc
)
where rownum<=3
-------------------------------
先查询HOST获取所有服务器信息。
然后在业务层遍历服务器集合,循环获取
每一台服务器按累计时长排序的
前3名账户信息,之后拼成一个
账户信息集合,传递到页面,迭代显示。
3.资费使用率列表实现
可以采用formula子查询映射实现。
参考代码中的Host类和Host.hbm.xml文件
发表评论
-
PLSQL学习笔记
2014-02-12 23:54 1871第一天: 1、 SQL:是单纯的SQL语句, ... -
ORACEL学习笔记
2014-02-12 23:52 11151. SQL语言的分类 1. ... -
自动生成日期的差值.....
2013-12-30 19:48 643自动生成两个日期的差值 后台的验证:String stayDu ... -
Jquery学习笔记
2013-11-25 00:00 527第一天 jQuery介绍 Jquery是一个js框架(其实就是 ... -
Ajax学习笔记
2013-11-24 23:08 401第一天 Ajax的核心是js的 ... -
JDBC学习笔记
2013-11-24 23:05 556-----------------------------JD ... -
PL/SQL学习笔记
2013-11-24 22:50 803SQL:是单纯的SQL语句,PL/SQL:是把DML和sel ...
相关推荐
整合SSH 框架所需 jar 包(maven 项目 pom.xml 格式),包含大部分的 jar 包引入说明
springboot-refactor:针对重构老项目例如SSM或SSH等架构的技术升级重构等总结了一个示例
这是一个基于SSH的DRP系统,已经实现了基础数据管理,分销商库存管理,系统管理等功能,可以直接运行,使用的工具是myeclipse8.5,mySql等,有sql文件,还有关于DRP的ppt,和html模版,需要的朋友可以下载下来参考
商城项目后台,导入后访问地址localhost:8080/tmall_ssh/admin/index.jsp即可
这个本人做的 SSH 集成框架(扫描加注解) 包含整个项目(src) 1、环境是 tomcat6.0 mysql5.5 、eclipse 、jdk1.6 2、有用户登录、单元测试。功能 用户的增、删、改、查, 用户登录有jsp页面 增、删、改、查在...
--------当当网SSH重构---------- 1.DAO需要根据原有接口全部重构. 采用Spring+Hibernate方式实现 2.Service改造工作 采用Spring的IoC注入方式使用DAO 3.Action改造工作 采用整合插件注入方式使用Spring容器中的...
通过SpringBoot使用SpringMVC, Spring, Spring Data JPA重构项目,决定使用这3种框架重新实现bnade的接口。期待有兴趣的朋友加入我们 项目环境 java 1.8 mysql 5.7 redis maven springBoot druid 数据库连接池 ...
人员配备、开发效率等都非常重要,但是开发效率包含很多,如:代码质量(扩展性、重构性等),但是这些都是建立在规范的代码之上来进行,在一个团队中,每个开发者都有自己的习惯方式来进行代码的编写,例如(ssh文件名举例)...
并行SSH parallel-ssh模块和脚本实现了常见SSH任务的并行... parallel-ssh这一分支实现了许多改进,包括对库的重大重构以使其更加模块化和易于扩展,并添加了许多额外的选项以更轻松地管理,查看和保存命令运行的状
•技术方面:对Struts、Spring、Hibernate、Log4J、JDom、Memcache、Quartz、jQuery、JSON等技术能熟练使用,尤其是SSH的整和开发,js ajax的高用户体验的效果,项目的框架设计及OO原则的重要性,代码重构与代码的可维护...
Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 ...
部署者 在Posix系统上远程执行的框架。 重要的关键功能是: 强大的交互式命令行,具有自动补全功能;... (Django项目的)第一个成功的部署仅在几个月后完成,但是自那时以来,所有代码都已经重构了好几次。
注意1:Master分支是开发分支、也是项目重构分支,Origin分支是原来项目全部代码 注意2:目前的版本不会再继续进行新功能开发,只会进行BUG修复,会拉一个分支基于jdk11和javafx11重构项目,重构后会减少内存占用50%...
整个系统使用SSH框架,架构如下:业务流程如下:当接口被调用时,首先执行参数校验,确认输入的参数的合法性,验证参数签名是否正确。确认过程包括调用账户、用户、支付方式、路由等服务来验证用户ID、账户、支付卡...
从骨架(内置或自定义)创建项目内置骨架是default 通过具有自动重新加载功能的内置开发网络服务器为项目提供服务,可在 Windows、Mac OS X 和 Linux 上运行(显然)构建项目通过SSH部署项目(支持公钥认证和简单...
使用CircleCI进行自动化测试,在生命周期绑定Checkstyle,SpotBugs插件保证代码质量版本2:使用ORM(对象关系映射)重构,使用MyBatis框架版本3:通过flyway插件迁移数据,将数据从H2数据库迁移到MySQL数据库版本4:...
使用ASP.NET技术开发网上书店、使用Ajax和Web Service重构网上书店、开发基于Structs/Spring/Hibernate/Ajax的网上信息发布平台、职业导向训练、项目实战、HR/CRM/OA/B2C毕业设计项目开发、Oracl数据库对象和数据...