乐趣区

关于springboot:07SpringBootMyBatisSpring-技术整合实现商品品牌模块的CRUD操作

需要剖析

任何一个电商零碎中都有一个商品子系统, 而与商品相关联都会有一个品牌信息管理, 在以后业务零碎设计中咱们就是要对商品品牌信息的治理进行设计和实现.

业务架构

在品牌 (Brand) 信息管理中就是要实现对商品品牌信息的增加, 批改, 查问, 删除等业务, 如图所示:

原型设计

基于品牌业务形容, 对品牌模块的业务原型进行剖析和设计, 如图所示:

技术架构

在品牌治理模块实现过程, 咱们采纳典型的 C / S 架构进行实现. 客户端咱们基于浏览器进行实现, 服务端采纳 tomcat, 数据库应用 MySQL. 具体应用层基于 MVC 分层架构进行实现.

技术栈选型

  • 客户端技术:html,css,javascript,bootstrap
  • 服务端技术:spring,mybatis,springboot,thymeleaf
  • 数据库技术:MySQL,SQL

数据库及表设计

drop database if exists dbbrand;
create database dbbrand default character set utf8;
use dbbrand;
create table tb_brand(
     id bigint primary key auto_increment,
     name varchar(100) not null,
     remark text,
     createdTime datetime not null
)engine=InnoDB;

我的项目环境初始化

筹备操作

1)JDK 1.8
2)Maven 3.6.3
3)IDEA 2020.2
4)MySQL 5.7+

初始化数据库

关上 mysql 自带客户端, 登录 mysql.

mysql -uroot -proot

设置客户端编码

set names utf8;

执行 sql 脚本

source d:/brand.sql

创立我的项目 Module

增加我的项目 Module 依赖

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <scope>runtime</scope>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>2.1.3</version>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

我的项目 Module 根底配置

关上我的项目 Module 配置文件 application.properties, 并增加如下内容:

server.port=80

spring.datasource.url=jdbc:mysql:///dbbrand?serverTimezone=GMT%2B8&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

mybatis.mapper-locations=classpath:/mapper/*/*.xml

logging.level.com.cy=debug

spring.thymeleaf.cache=false
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

启动我的项目进行初步环境测试剖析

品牌模块整体 API 设计

品牌数据的查问及出现

业务形容

将数据库中的品牌信息查问进去, 而后在客户端基于 html 技术进行出现, 如图所示:

服务端查问时序设计

畛域对象 (POJO) 设计及实现

设置 Brand 对象, 基于此对象封装从数据库查问到的品牌信息, 代码如下:

package com.cy.pj.brand.pojo;
import java.util.Date;
public class Brand{
    private Integer id;
    private String name;
    private String remark;
    private Date createdTime;
    //.....
}

数据逻辑对象 (DAO) 查询方法设计及实现

第一步: 定义 BrandDao 接口, 代码如下:

package com.cy.pj.brand.dao;
@Mapper
public interface BrandDao{}

第二步: 在 BrandDao 中定义品牌查询方法, 代码如下:

List<Brand> findBrands(String name);

第三步: 基于查询方法定义 SQL 映射(本次 sql 映射基于注解形式定义), 代码如下:

@Select("select * from tb_brand where name like concat ('%',#{name},'%')")
List<Brand> findBrands(String name);

当然, 对于这个 SQL 映射也能够写到映射文件(BrandMapper.xml)

第四步: 对数据层的查询方法进行单元测试, 代码如下:

package com.cy.pj.brand.dao;
@SpringBootTests
public class BrandDaoTests{
     @Autowired
     private BrandDao brandDao;
     @Test
     void testFindBrands(){List<Brand> list=brandDao.findBrands("TCL");
        for(Brand b:list){System.out.println(b);
        }
     }

}

第五步: 测试过程中的 BUG 剖析?

  • 测试输入为对象地址表现形式, 而不是内容?(查看 toString 办法是否重写)

业务逻辑对象 (Service) 查询方法设计及实现

管制逻辑对象 (Controller) 查询方法设计及实现

客户端品牌列表页面设计及实现

启动服务进行拜访测试并对后果进行剖析

启动及运行过程中的 Bug 剖析及解决方案

退出移动版