乐趣区

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

需要剖析

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

业务架构

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

原型设计

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

技术架构

在品牌治理模块实现郭晨,咱们采纳典型的 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;
insert into tb_brand values (null,'联想','very good',now());
insert into tb_brand values (null,'小米','very good',now());
insert into tb_brand values (null,'美的','very good',now());
insert into tb_brand values (null,'九阳','very good',now());
insert into tb_brand values (null,'TCL','very good',now());
insert into tb_brand values (null,'创维','very good',now());
insert into tb_brand values (null,'华为','very good',now());

我的项目环境初始化

筹备操作

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

初始化数据库

在 cmd 窗口下进行如下操作

登录 mysql
mysql -uroot -proot
设置客户端编码
set names utf8;
执行 sql 脚本
source:d/brand.sql

创立我的项目 Mouble

增加我的项目 Moudle 依赖

<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>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
    </exclusions>
</dependency>

我的项目 Mouble 根底配置

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

server.port=80
spring.datasource.url=jdbc:mysql:///dbgoods?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 对象,基于此对象封装从数据库查问到的品牌信息,代码如下
第一步:定义 BrandDao 接口,代码如下:

package com.cy.pj.brand.pojo;
import java.util.Date;
public class Brand {
    private Integer id;
    private String name;
    private String logo;
    private String remark;
    private Date createdTime;
    public Integer getId() {return id;}
    public void setId(Integer id) {this.id = id;}
    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
    public String getLogo() {return logo;}
    public void setLogo(String logo) {this.logo = logo;}
    public String getRemark() {return remark;}
    public void setRemark(String remark) {this.remark = remark;}
    public Date getCreatedTime() {return createdTime;}
    public void setCreatedTime(Date createdTime) {this.createdTime = createdTime;}
    @Override
 public String toString() {
        return "Brand{" +
                "id=" + id +
                ", name='" + name + '''+", logo='"+ logo +''' +
                ", remark='" + remark + '''+", createdTime="+ createdTime +'}';
    }
}

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

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

package com.cy.pj.brand.dao;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public class 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;
import com.cy.pj.brand.pojo.Brand;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class BrandDaoTests {
    @Autowired
 private BrandDao brandDao;
    @Test
 public void testFindBrands(){List<Brand> list=brandDao.findBrands("TCL");
        for (Brand b:list) {System.out.println(b);
        }
    }
}

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

SQL 异样:查看本人的数据库语句是否正确
输入异样:测试输入对象为对象地址表现形式,而不是内容?(查看 toString 办法是否重写)

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

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

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

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

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

退出移动版