开发轨迹
业务分析
DAO层实现
接口设计 + SQL编写
使用Junit测试功能
Service层实现
Web层实现
高并发优化
业务分析
针对业务需求做功能分割分层,抽象出实体和业务逻辑设计数据库
DAO层实现
涉及包:
dao
Data Access Object 数据访问对象
将非对象数据以对象的形式操纵
entity
数据库表映射的实体
流程:
使用配置文件整合Spring和MyBatis
设计和建立数据库及表,根据ORM规则创建Entity类
根据业务逻辑(CRUD)创建DAO接口
根据DAO接口创建对应的mapper.xml,手动书写SQL语句
注意:多参数传递要使用@Param注解
创建Junit4测试用例,并整合Spring
测试MyBatis的DAO层自动实现的功能
优点:
与其他层实现分离(DAO层拼接等逻辑在Service层实现)
DAO层工作演变成:接口设计 + SQL编写
代码与SQL分离,方便Review
Service层实现
涉及包:
service
具体业务实现接口定义
service.impl
实现service接口的实现类
dto
Data Transfer Object 数据传输对象
用于在不同层直接的数据传输(如Service层与Web层)
隔离不同层,降低层间耦合
exception
自定义的业务exception
enums
数据字典,存放业务相关的常量数据
流程:
设计Service接口,dto数据传输对象,自定义Exception和enum
设计Service接口实现类
配置Spring service层的xml配置及注解
创建Junit4测试用例并进行测试
Web层实现
前端交互设计:
根据需求设计前端交互流程
人员
产品
解读用户需求,设计满足用户需求的文档
前端
负责页面展示
后端
负责存储展示
Restful接口
一种优雅的URI表述方式
资源的状态和状态转移
示例
GET /seckill/list
OK
POST /seckill/execute/{seckillId}
WRONG
POST /seckill/{seckillId}/execution
OK(使用名词执行,POST表动作)
GET /seckill/delete/{id}
WRONG
DELETE /seckill/{id}/delete
OK
Restful规范
GET
查询操作
POST
添加或修改操作
非幂等
PUT
修改操作
幂等,可以使用相同参数重复执行,并能获得相同结果的函数,不用担心重复执行会对系统造成改变
对同一URL的多个请求应该返回同样的结果
DELETE
删除操作
URL设计
/模块/资源/{标示}/集合1/…
例子
/user/{uid}/friends 好友列表
/user/{uid}/followers 关注者列表
秒杀API的URL设计
GET /seckill/list 秒杀列表
GET /seckill/{id}/detail 详情页
GET /seckill/time/now 系统时间
POST /seckill/{id}/exposer 暴露秒杀
POST /seckill/{id}/{md5}/execution 执行秒杀
SpringMVC基础
围绕Handler开发
URL映射 注解@RequestMapping
- 支持标准URL
- Ant风格URL(?匹配一个字符,匹配任意字符,*匹配任意路径)
- 带{xxx}占位符的URL
请求参数绑定
@PathVariable(“xxx”)
对应URL中的占位符{xxx}
@RequestParam(“xxx”)
对应的请求参数
请求方法限制
@RequestMapping(method=RequestMethod.xxx)
GET,POST,PUT,DELETE
请求转发和重定向
转发
return “redirect:/url”;
请求转发:request.getRequestDispatcher("/test.jsp").forword(request,response);
转发的特点
- 地址栏不发生变化,显示的是上一个页面的地址 请求次数
- 只有1次请求
- 根目录:http://localhost:8080/项目地址/,包含了项目的访问地址
- 请求域中数据不会丢失
重定向
return “forward:/seckill/list”;
重定向:response.sendRedirect("/test.jsp");
重定向的特点
- 地址栏:显示新的地址
- 请求次数:2次
- 根目录:http://localhost:8080/ 没有项目的名字
- 请求域中的数据会丢失,因为是2次请求
?????疑问?????
问:什么时候使用转发,什么时候使用重定向?
如果要保留请求域中的数据,使用转发,否则使用重定向。
以后访问数据库,增删改使用重定向,查询使用转发。
问:转发或重定向后续的代码是否还会运行?
无论转发或重定向后续的代码都会执行
数据模型赋值
ModelAndView或Model
调用addAttribute方法
返回json数据
@RequestMapping(produces=”application/json;charset=UTF-8”)
@ResponseBody
直接返回POJO就能转换成json
cookie访问
参数注解 @CookieValue(value=”xxx”,require=”false”)
涉及包:
dto
封装泛型JSON result
Web层实现
实现Controller
流程:
创建Controller及各接口映射的方法
使用注解描述各接口的映射,限制及参数获取
调用Service(由SpringDI注入)完成业务逻辑,封装到Model中返回给相应视图
完成视图设计
部署到服务器上调试