业务描述

需求分析

大概描述了开发这个项目的目的、市场需求、和预期达到的一个目的

业务架构分析

业务架构分析就是对项目功能的分析,此项目实现的功能是增删改查,{RD01J0S61K\(QR0FU}28H3R.png

业务基本原型设计

基于品牌业务描述,对品牌模块的业务原型进行分析和设计

项目技术架构分析及设计

在品牌管理模块实现过程,我们采用典型的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进行设计

image.png

数据库的准备

库的创建和表的建立

注意点

编码方式,如果利用的脚本的形式,需要加上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

功能模块

查询

业务描述

时序设计

TPNS$O\)\)JCZOX7MLO2C@9IU.png

领域对象设计及实现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按钮就数据提交到服务端进行保存.

添加时序分析及设计

image.png

数据逻辑对象(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查询品牌信息并呈现在页面上,其时序分析如图所示:

image.png

数据逻辑对象(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 异常

image.png

  • 呈现的数据不正确

image.png

  • 页面元素解析异常

image.png


真理求知者
4 声望0 粉丝

在黑暗在探索光明,在迷茫中寻找真理!