篇一:达内电信计费系统项目介绍
李洪鹤/lihh@tarena.com.cn
一、回顾
1、Spring核心功能
1)IOC
将对象的创建权、注入权交给Spring来 管理,由Spring容器负责做这些事。由于 Spring是通过配置实现的这些逻辑,因此 可以降低对象之间的耦合度。
2)AOP
面向切面编程,主要解决的是针对一批 组件的通用逻辑编程的问题,它采用了 公共的类+配置的方式实现这个逻辑,可以 降低公共类和组件之间的耦合度。
3)整合
Spring可以整合JDBC、MyBatis、
Struts2、Hibernate框架/技术,
可以简化对这些框架/技术的使用。
4)MVC
Spring实现了MVC,按照MVC思想对 代码进行了分层,从而降低了项目中 代码之间的耦合度。
2、Java知识体系
画图
二、项目介绍
1、项目整体需求
1)项目背景
电信公司有UNIX服务器出租业务,针对 该出租业务需要一套办公系统来提升办事 效率,提升该业务信息化程度(无纸化 办公),我们的系统就是针对该出租业务 而提供的完整解决方案。
2)整体解决方案
画图
2、解决方案
1)NETCTOSS(要讲)
--名词解析
Net China Telecom Operation
Support System
中国电信运营支撑系统-网络版
--功能
用于创建账号,创建资费标准,以及查询用户的消费情况等。
--使用者
电信公司营业员
--部署
应用服务器
2)DMS(讲过)
--功能
解析客户登录、登出UNIX服务器的时间,并将解析到的信息存入数据库,即实现了客户登录服务器的数据采集功能。 --使用者
自动运行
--部署
DMS Client部署在每一台UNIX服务器上;DMS Server部署在引用服务器上。
3)PL/SQL(不讲)
--功能
自动计算出客户本月的消费情况,由Oracle任务自动在月底调用。
--使用者
Orcale任务调度。
--部署
Orcale数据库。
4)自服务(不讲)
--功能
可以查询客户的套餐余量,可以修改客户的资费等,类似于移动/联通营业厅APP。
--使用者
客户
--部署
应用服务器
3、项目计划
1)Unit01
day01-day02,完成资费管理模块。
2)Unit02
day03-day04,完成账务账号模块。
3)Unit03
day05-day06,完成业务账号模块。
4)Unit04
day07-day10,完成角色模块、管理员 模块以及登录相关的功能。
5)Unit05
day11,学习AOP,并应用到项目中。
6)Unit06
day12,学习事务管理,并应用到项目中。 如果时间允许,做项目总结及分享。
4、项目目标
1)基本要求
完成资费模块
2)达标
再完成账务账号模块,登录功能。
3)要求
自己写代码
4)目标
具备独立开发的能力
5、技术架构
1)开发环境
Linux+MyEclipse6.0+JDK1.6+
Tomcat7+Oracle10g
2)使用的技术
Java+Spring+MyBatis+JSP+JQuery
3)结构
基于MVC代码的分层思想,将代码分为 如下几层
表现层(V):JSP+JQuery
控制层(C):
DispatcherServlet+Controller,即主要由Spring MVC实现。 业务层(C):
由于业务相对简单,不用独立的业务层,而是直接在Controller中实现 业务,在企业真实的项目中,往往 这里是有独立的业务层。
持久层(M):
Spring整合MyBatis来实现数据库的访问。
三、搭建环境
1、声明
在项目组中搭建项目环境应该由项目经理、 结构师、设计师来完成,我们只需要下载 他们构建好的代码,添加业务代码即可。 因此这项内容了解即可,不是重点。
2、搭建环境大致步骤
1)解决访问数据库的问题
使用Spring整合MyBatis来实现数据库 的访问
2)解决处理请求的问题
使用Spring MVC来处理请求
篇二:云笔记复习笔记
云笔记上课笔记整理
1.云笔记(简介) 笔记管理系统
包含:笔记本管理,笔记管理,收藏和分享, 回收站管理,用户登录退出,活动管理等 2.采用技术架构(B/S)
Spring : SpringMVC,SpringIOC,SpringAOP
MyBatis: 数据库操作
Ajax : Asynchronus JavaScript and JSON 异步请求和响应处理
--以XMLHttpRequest对象为核心 --以XML或JSON作为数据交互格式 --以JavaScript语言为基础
--以HTML/CSS技术作为数据渲染 jQuery:客户端js框架
封装了:选择器,属性函数,文档处理函数, 事件函数,隐藏和显示函数,Ajax函数
(HTML)--jQuery/Ajax-->Spring+MyBatis 所有请求都采用Ajax方式交互
ajax请求
-->DispatcherServlet -->HandlerMapping -->Controller=Service
=Dao-->数据库操作 -->调用jackson开发包
(使用:在Controller方法前加@ResponseBody)
(作用:将Controller返回结果转成json字符串输出)
$.ajax({async:true,url:xx,type:post})$.post()
$.get(url)-->$.getJSON()$("div").load("hello.html")
hide();slideUp();show();slideDown()
value:val()/val("xxx")
class:addClass(xxx)/removeClass(xxx)
其他:attr(属性,值)/attr(属性) 文本:text()/text(文本)
HTML:html()/html(html内容)
$("span").append("<a>链接</a>");$("span").empty();$("#login").click(fn);$("#login").click();
JavaScript Object Notation
JavaScript对象格式 var i = 10; var s = "hello"; var arr = [1,2,4];
var json = {"name":"tom","age":20}; json.name json.age
var person = {"name":"tom",
"friends":["rose","jenny"]}; for(var i=0;i<person.friends.length;i++){ person.friends[i]; }
var persons = [{"name":"tom","age":20}, {"name":"scott","age":21}];for(var i=0;i<persons.length;i++){ persons[i].name; persons[i].age; }
请求1--》响应1 请求2--》响应2
==========项目开发=========== 1.创建数据库(MySQL)
show databases;//查看有哪些库 create database jsd1508db;//创建库 drop database xxx;//删除库 use jsd1508db;//使用xxx库 create table xxx( 字段名类型, 字段名类型 )
show tables;//查看当前库中有哪些表 desc 表名;//查看表结构
------cloud_note.sql文件导入---------
set names utf8;//设置客户端和链接编码 source xxx.sql;//sql文件导入
/home/soft01/cloud_note.sql
===========系统登录============== 功能描述:用户输入用户名和密码后, 点击"登录"按钮,发出Ajax请求,
进入服务器端的检测,服务器返回JSON结果, Ajax回调函数解析JSON结果,错误提示错误信息成功进入edit.html界面
1.客户端实现(HTML页面,js,ajax)a.获取请求参数,发送Ajax 获取用户名和密码,发送Ajaxb.Ajax回调函数 有错误显示错误信息 没有错误跳转到edit.html
2.服务器端实现(Spring+MyBatis) /user/login.do -->DispatcherServlet -->HandlerMapping -->LoginController -->UserService
-->UserDao-->cn_user -->返回JSON结果
3.搭建开发环境
--WebRoot引入客户端资源html/js/图片等 --lib添加服务器资源,spring开发包,
mybatis开发包,mybatis-spring.jar整合包 --src添加applicationContext.xml主配置文件
4.响应JSON结果统一格式 var result = {
"status":状态值,"msg":消息,"data":数据 }
$.ajax({
url:xxx,//请求地址type:xxx,//提交方式data:xxx,//提交的数据async:xxx,//同步异步
dataType:xxx,//返回数据类型
success:function(result){...},//成功回调error:function(){...}//失败回调 });
org.tarena.note.entity
if(user != null){
if(user.getPassword().equals(password)){ 正确}else{ 密码错误} }else{
用户名不存在 }
org.tarena.note.controller.user
org.tarena.note.controller.notebook org.tarena.note.controller.note
=====注册====== 1.客户端
a.发送Ajax请求
单击"注册"按钮,发送请求 请求要提交用户名,昵称,密码 b.Ajax回调函数
解析NoteResult数据,成功就切换到登录界面 失败给出提示信息
2.服务器端 /user/regist.do
-->DispatcherServlet -->HanlderMapping -->RegistController -->UserService
-->UserDao-->cn_user(插入)
-->返回NoteResult结构的json数据
/user/regist.do ?name=xx
==========笔记本列表加载=========== 1.客户端 a.发送请求
页面一出来就发送ajax请求 提交数据:用户ID
b.回调处理
解析返回的NoteResult,将笔记信息解析 在页面生成笔记本列表
2.服务器端
/notebook/loadbooks.do -->DispatcherServlet -->hanldermapping -->LoadBooksController -->BookService
-->NoteBookDao-->cn_notebook(查询) -->返回NoteResult结构的json
set names utf8;
source ....cloud_note.sql
mybatis-->jdbc-->mysql
jdbc:mysql://localhost:3306/cloud_note
?useUnicode=true&characterEncoding=utf8
在XML文件中,&符号需要使用&
=========查看笔记列表============= 1.客户端 a.发送请求
用户单击"笔记本"li时,发送ajax
提交数据:笔记本ID b.回调处理
解析返回的NoteResult,将笔记信息解析 生成笔记列表元素
2.服务器处理
/notebook/loadnotes.do?bookId=xx -->DispatcherServlet -->HanlderMapping -->LoadNotesController
-->BookService.loadBookNotes -->NoteDao.findByBookId
-->cn_note(查询)
-->返回NoteResult结构的json
select * from cn_note where cn_notebook_id=?
a.实现NoteDao--编写Note实体类
--编写NoteMapper.xml文件(SQL语句)--编写NoteDao接口
js动态绑定:给现有或未来加入页面的元素绑定处理$("父元素选择器").on(
事件类型,子元素选择器,fn函数);
从父元素中寻找和“选择器”匹配 的子元素,绑定fn处理
==========加载笔记内容============ 1.客户端 a.发送请求
点击"笔记"li元素时,发送ajax请求 提交数据:笔记ID b.回调处理
解析NoteResult数据,将data中数据解析 显示到标题和内容区
2.服务器端
/note/load.do?noteId=xxx -->DispatcherServlet
-->handlermapping
-->LoadNoteController.execute -->NoteService.loadnote -->NoteDao.findById
-->cn_note(查询)
-->返回NoteResult结构的json
select * from cn_note where cn_note_id=?
====创建笔记本=====
服务器端:
/notebook/add.do -->DispatcherServlet -->HanlderMapping -->AddBookController -->BookService
-->NoteBookDao-->cn_notebook(insert)-->返回NoteResult结构的json
=========修改笔记本名称=========== 'dblclick'
/notebook/rename.do -->RenameBookController -->BookService
-->NoteBookDao-->cn_notebook -->返回NoteResult结构的json 任务:创建笔记和保存笔记操作
1.创建笔记的实现
/note/add.do
-->AddNoteController -->NoteService -->NoteDao
-->cn_note(插入)
-->返回NoteResult结构的json
2.保存笔记操作的实现 实际上是笔记更新操作
当用户点击"保存笔记"按钮时,
根据笔记ID更新笔记标题,内容,最后一次 修改时间
/note/update.do
-->UpdateNoteController -->NoteService
-->NoteDao-->cn_note(更新) -->返回NoteResult结构的json
$("#note_list").on("click",".btn_slide_down",function(){$("#note_list li .note_menu").hide();var $noteli = $(this).parents("li");
var $menu = $noteli.find(".note_menu");$menu.show(); });
1.笔记删除
/note/recycle.do
-->RecycleNoteController -->NoteService -->NoteDao
-->cn_note(更新)
-->返回NoteResult结构的json
=====分享笔记搜索===== 针对cn_share进行模糊查询 select * from cn_share
where cn_share_title like '%关键字%';
a.客户端
用户输入关键字后,按回车键发送ajax请求 提交参数:用户输入的关键字 b.服务器端
利用关键字查询cn_share,将结果以NoteResult 结构返回json /note/search.do
-->SearchShareController.execute -->NoteService.searchShare() -->ShareDao.findLikeTitle(搜索) -->返回NoteResult结果 c.ajax回调函数
解析NoteResult结果,在搜索结果列表区 (pc_part_6)
1.Spring事务管理 a.事务
事务和数据库(DML insert,update,delete) 操作相关。
可以提交或回滚(撤销)前面执行过的DML语句 try{
update给A账号扣钱 update给B账号加钱 if(B更新0行){ 回滚 }
提交 }catch(){ 回滚 }
update语句-->默认事务就可以
DML语句 --其他逻辑
事务:保障业务处理完整性.操作涉及提交和回滚 当发生异常后,回滚将前面执行过的数据库操作 SQL语句撤销。
JDBC控制事务:
默认自动提交,执行一个DML就自动commit, 遇到异常自动回滚。
使用时,需要采用下面结构 conn.setAutoCommit(false); //执行DML操作 //执行DML操作
//没问题提交事务conn.commit(); //有问题回滚conn.rollback(); MyBatis控制事务:
默认关闭了JDBC的自动提交 sqlSession.commit(); sqlSession.rollback();
Spring+MyBatis控制事务:
默认一个DML操作自动提交。 利用Spring事务管理可以改变。
Spring事务管理: try{
service方法--》registUser(); 提交 }catch(){ 回滚 }
Spring事务管理可以不用修改每个业务处理组件Spring采用了一种AOP方式进行事务控制。 (面向切面编程),可以在不修改原有组件 情况下切入新增功能。
b.Spring事务管理使用方法
--编程式事务管理(基于TransactionTemplate) --*声明式事务管理(基于配置)
1)基于注解配置(简单方便,侵入性稍高)2)基于XML配置(复杂,侵入性低)
c.事务特性 1)读写特性
默认可读写,如果是查询操作,可以使用只读 @Transactional(readyOnly=true) 2)回滚特性
默认RuntimeException会回滚; 若抛出检查异常,不会回滚。
可以使用rollbackFor指定回滚类型
@Transactional(rollbackFor={IOException.class}) public void f1() throws IOException{
业务逻辑 }
3)传播特性
当一个带有@Transactional方法调用另一个 带@Transactional方法
可以使用propagation属性,默认REQUIRED
@Transactional(
propagation=Propagation.REQUIRED)
篇三:云笔记开题报告
本科生毕业设计(论文)开题报告
论文(设计)题目
作者所在系别
作者所在专业
作者所在班级 作 者 姓 名
作 者 学 号 指导教师姓名
指导教师职称
完 成 时 间
基于Spring MVC和MyBatis的云笔记 计算机与遥感信息技术学院 计算机科学与技术 B12511 王硕 20124051117 耿炎 院长 2015 年 1 月
北华航天工业学院教务处制
说 明
1.根据学校《毕业设计(论文)工作暂行规定》,学生必须撰写《毕业设计(论文)开题报告》。开题报告作为毕业设计(论文)答辩委员会对学生答辩资格审查的依据材料之一。
2.开题报告应在指导教师指导下,由学生在毕业设计(论文)工作前期内完成,经指导教师签署意见及所在专业教研室论证审查后生效。开题报告不合格者需重做。
3.毕业设计开题报告各项内容要实事求是,逐条认真填写。其中的文字表达要明确、严谨,语言通顺,外来语要同时用原文和中文表达。第一次出现缩写词,须注出全称。
4.开题报告中除最后一页外均由学生填写,填写各栏目时可根据内容另加附页。
5.阅读的主要参考文献应在10篇以上(土建类专业文献篇数可酌减),其中外文资料应占一定比例。本学科的基础和专业课教材一般不应列为参考资料。
6.参考文献的书写应遵循毕业设计(论文)撰写规范要求。
7.开题报告应与文献综述、一篇外文译文和外文原文复印件同时提交,文献综述的撰写格式按毕业设计(论文)撰写规范的要求,字数在2000字左右。
毕业设计(论文)开题报告
- 1 -
- 2 -
- 3 -