业务描述
需求分析
大概描述了开发这个项目的目的、市场需求、和预期达到的一个目的
业务架构分析
业务架构分析就是对项目功能的分析,此项目实现的功能是增删改查,
业务基本原型设计
基于品牌业务描述,对品牌模块的业务原型进行分析和设计
项目技术架构分析及设计
在品牌管理模块实现过程,我们采用典型的C/S架构进行实现.客户端我们基于浏览器进行实现,服务端采用tomcat,数据库使用MySQL.具体应用层基于MVC分层架构进行实现.
项目技术栈应用分析及选型
- 客户端技术:html,css,javascript,bootstrap
- 服务端技术:hikaricp,mybatis,spring,springboot,thymeleaf
- 数据库技术:mysql,sql
- 开发工具集:jdk1.8,maven3.6.3,idea2020.2
项目品牌模块核心API分析与设计
基于分层架构设计思想,现对品牌API进行设计
数据库的准备
库的创建和表的建立
注意点
编码方式,如果利用的脚本的形式,需要加上set names gbk在查看,否则会出现乱码,执行基本语句:`
source d:/brand.sql
项目所需依赖
- MySQL 驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
- Srping Jdbc 提供了HikariCP连接池
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
- MyBatis 资源
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
- Spring Web 依赖 (内置一个tomcat服务)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- Thymeleaf 依赖 (html模板引擎)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
健康管理依赖
<dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
热部署
<dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
项目配置文件
#spring server
server.port=80
# spring datasource
spring.datasource.url=jdbc:mysql:///dbbrand?serverTimezone=GMT%2B8&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
# spring mybatis
mybatis.mapper-locations=classpath:/mapper/*/*.xml
# spring log
logging.level.com.cy=debug
#spring thymeleaf
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
功能模块
查询
业务描述
时序设计
领域对象设计及实现POJO
private Integer id;
private String name;
private String remark;
private Date createdTime;
注意点
属性设计需要和数据库里的属性设计名称一样
数据逻辑对象(DAO)查询方法设计及实现
第一步:定义BrandDao接口,代码如下:
第二步:在BrandDao中定义品牌查询方法,代码如下:
第三步:基于查询方法定义SQL映射.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cy.pj.brand.dao.BrandDao">
<select id="findBrands" resultType="com.cy.pj.brand.pojo.Brand">
select id,name,remark,createdTime
from tb_brand
<if test="name!=null and name!=''">
where name like concat("%",#{name},"%")
</if>
</select>
</mapper>
注意点
映射文件的命名需要和配置里设置的一样
业务逻辑对象(Service)查询方法设计及实现
业务逻辑对象负责模块的具体业务处理,例如参数校验,事务控制,权限控制,日志记录等.
第一步:定义业务接口
第二步:在BrandService接口中添加品牌查询方法
第三步:定义BrandService接口实现类BrandServiceImpl.
第四步:定义BrandService接口方法的单元测试类,并业务进行测试分析
控制逻辑对象(Controller)查询方法设计及实现
在控制逻辑对象中主要是负责请求和响应逻辑控制,例如请求url映射,参数映射,请求方式,结果集的封装,解析,响应的设计等.
第一步:定义Controller类
第二步:在Controller添加处理查询请求的方法
1)@GetMapping描述方法时,表示这个方法只能处理Get请求,注解内部的value属性可以指定多个url.
2)@PathVariable 用于描述方法参数,表示方法参数的值可以来自url中{}内部的变量值,required=false表示参数可以不传值.
客户端品牌列表页面设计及实现
在项目的templates目录下创建brand目录并添加brand.html页面,
1)${}为thymeleaf为中的EL表达式,用于从服务端model中获取数据
2)th:each为thymeleaf定义的自定义标签属性,用于迭代数据.
3)th:text为thymeleaf定义的自定义标签属性,用于设置文本内容.
品牌模块删除业务分析及实现
业务描述
在品牌列表页面中,点击当前行记录后面的删除按钮,基于当前行的记录id执行品牌删除操作
业务时序分析与设计
数据逻辑对象(DAO)中删除方法设计及实现
基于业务,在BrandDao接口中添加删除方法
基于删除方法,定义SQL映射(本次直接以注解方式进行定义):
在BrandDaoTests单元测试类中添加单元测试方法,对删除操作进行测试,
业务逻辑对象(Service)中删除方法设计及实现
在业务逻辑对象方法中,要处理删除操作需要的一些业务逻辑(后续有参数校验,权限控制,....).
第一步:在BrandService接口中添加,品牌删除的业务方法
第二步:在BrandServiceImpl类中添加删除业务的具体实现
控制逻辑对象(Controller)中删除方法设计及实现
在控制层对象中定义处理删除请求的方法
客户端删除按钮事件定义及处理
在tbody的tr中添加一列,
定义javascript函数,处理删除事件
function doDeleteById(id){
//给出提示信息
if(!confirm("您确认删除吗"))return;//confirm为浏览器中window对象的函数
//执行删除业务
location.href=`http://localhost/brand/doDeleteById/${id}`;
}
品牌模块添加业务分析及实现
业务描述
在列表页面上,设计添加按钮,当点击添加按钮时,跳转到添加页面,然后在添加页面上数据品牌信息,点击Save按钮就数据提交到服务端进行保存.
添加时序分析及设计
数据逻辑对象(Dao)中方法设计及实现
第一步:在BrandDao中添加用于保存品牌信息的方法,代码如下:
第二步:在BrandMapper中添加品牌保存操作对应的sql映射,代码如下:
<insert id="insertBrand">
insert into tb_brand
(name,remark,createdTime)
values
(#{name},#{remark},now())
</insert>
业务逻辑对象(Service)中方法设计及实现
第一步:在BrandService业务接口中中定义用于保存品牌信息的方法
第二步:在BrandServiceImpl业务实现类中添加保存品牌信息的具体实现
控制逻辑对象(Controller)中方法设计及实现
第一步:在BrandController中添加用于处理请求添加页面的方法
第二步:在BrandController添加用于处理添加品牌信息页面的方法
品牌添加操作客户端业务分析、设计及实现.
第一步:设计品牌添加页面brand-add.html,
第二步:在品牌列表brand.html页面,设计添加按钮
第三步:点击添加按钮时,加载品牌添加页面,事件处理函数
品牌模块修改业务分析及实现
业务描述
在品牌列表页面,点击当前行的修改按钮,先基于id查询当前行记录,并将记录呈现在编辑页面,
业务时序分析与设计
基于id查询品牌信息并呈现在页面上,其时序分析如图所示:
数据逻辑对象(Dao)中方法设计与实现
在BrandDao中添加基于id查询品牌信息的方法及SQL映射,代码如下:
@Select("select * from tb_brand where id=#{id}")
Brand findById(Integer id);
在BrandDao中添加基于id执行品牌更新的方法及SQL映射,代码如下:
@Update("update tb_brand set name=#{name},remark=#{remark} where id=#{id}")
int updateBrand(Brand Brand);
业务逻辑对象(Service)中方法设计与实现
在BrandService 中添加基于id查询品牌信息和更新品牌信息的方法,代码如下:
Brand findById(Integer id);
int updateBrand(Brand brand);
在BrandServiceImpl中基于id查询品牌信息和更新品牌信息的方法
控制逻辑对象(Controller)中方法设计与实现
在BrandController中添加基于id查询品牌信息的方法
在BrandController中添加更新品牌信息的方法
客户端品牌编辑页面设计与实现
第一步:设计品牌修改页面brand-update.html
启动及运行过程中的BUG分析
- 405 异常
- 呈现的数据不正确
- 页面元素解析异常
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。