1,环境准备
1.1,新建springboot工程
1.1.1,配置pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.study</groupId>
<artifactId>springboot09_axios_element_vue</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot09_axios_element_vue</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.3.4.RELEASE</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-test</artifactId>
<scope>test</scope>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.24</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!--mybatis-spring-boot-starter-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
1.1.2,配置application.yml
# 公共配置
server:
port: 8888 # 修改内嵌服务器端口号
servlet:
context-path: /spring-boot-day09
spring:
mvc:
static-path-pattern: /**
web:
resources:
static-locations: classpath:/META-INF/resources/, classpath:/resources/, classpath:/static/, classpath:/public/,classpath:/resources/static/
# 数据源相关配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 指定连接池类型
driver-class-name: com.mysql.jdbc.Driver # mysql 5.x版本驱动
# driver-class-name: com.mysql.cj.jdbc.Driver # mysql 8.x版本驱动
url: jdbc:mysql://localhost:3306/school?characterEncoding=UTF-8 # 指定url
username: root # 指定用户名和密码
password: Root-123 # 指定密码
logging:
level:
root: info # 指定根日志级别(一般不推荐修改根日志,输出信息太多,推荐使用子日志)
com.study.dao: info #指定dao包中日输出级别
1.1.3,新建启动类SpringBootDay09Application
package com.study;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//入口类加入如下配置:
@SpringBootApplication
@MapperScan("com.study.mapper")
public class SpringBootDay09Application {
public static void main(String[] args) {
SpringApplication.run(SpringBootDay09Application.class, args);
}
}
1.1.4,新建HelloController
package com.study.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("hello")
public class HelloController {
@GetMapping("get")
public String get(){
return "get hello success";
}
}
1.1.5,测试
2,整合mybatis-plus
2.1,添加mybatis-plus相关的maven
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<!--<version>3.0.5</version>-->
<version>3.5.1</version>
</dependency>
<!-- 代码自动生成器依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
<!--逆向工程需要模板引擎-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
2.2,修改application.yml
# mybatis-plus相关配置
mybatis-plus:
type-aliases-package: com.study.entity
mapper-locations: classpath:**/*Mapper.xml
# mybatis相关配置
mybatis:
type-aliases-package: com.study.entity
mapper-locations: classpath:**/*Mapper.xml
2.3,完成代码生成工具类
package com.study.utils;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;
public class MysqlCodeGenerator {
private static final String URL = "jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTC";
private static final String username = "root";
private static final String password = "Root-123";
private static final String author = "";
public static void main(String[] args) {
packMybatisPlus("tb_brand");
}
static void packMybatisPlus(String table) {
FastAutoGenerator.create(new DataSourceConfig.Builder(URL, username, password)
.dbQuery(new MySqlQuery())
.typeConvert(new MySqlTypeConvert())
.keyWordsHandler(new MySqlKeyWordsHandler()))
.globalConfig(builder -> {
// 设置作者
builder.author("".equals(author) ? System.getProperty("user.name") : author)
// 使用java8新的时间类型
.dateType(DateType.TIME_PACK)
// 指定日期格式化方式
.commentDate("yyyy-MM-dd hh:mm:ss")
.outputDir("E:\\a_linailong\\myProject\\springboot_basics\\springboot09_axios_element_vue\\src\\main\\java");
})
.packageConfig(builder -> {
// TODO 设置父包名
builder.parent("com.study")
// 设置父包模块名
// .moduleName("system")
.entity("pojo")
.service("service")
.serviceImpl("service.impl")
.mapper("mapper")
.xml("mapper.xml")
.controller("controller");
})
.strategyConfig(builder -> {
builder
// 设置需要生成的表名 不设置表名则生成全部表
.addInclude(table)
// 开启跳过视图
.enableSkipView();
// 设置实体类策略
builder.entityBuilder()
// 开启链式模型
.enableChainModel()
// 开启lombok
// .enableLombok()
// 移除boolean的is前缀
.enableRemoveIsPrefix()
// 从数据库中生成字段注解
.enableTableFieldAnnotation()
// 命名规则下划线转驼峰
.naming(NamingStrategy.underline_to_camel)
// 数据库表字段映射到实体的命名策略
.columnNaming(NamingStrategy.underline_to_camel)
// 设置表字段自动填充
.addTableFills(new Column("create_time", FieldFill.INSERT))
.addTableFills(new Column("update_time", FieldFill.INSERT_UPDATE));
// mapper 生成策略
builder.mapperBuilder()
// 开启@Mapper注解
.enableMapperAnnotation();
// service 生成策略
builder.serviceBuilder()
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImpl");
// controller 生成策略
builder.controllerBuilder()
// 开启驼峰连字符
.enableHyphenStyle()
// 开始@RestController
.enableRestStyle();
})
// 使用Freemarker引擎模板,默认的是Velocity引擎模板
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
}
2.4,运行过后生成代码结构为
2.6 完成查询所以商品接口
2.6.1,封装返回体
2.6.1.1,完成ResultCode常量类
package com.study.common;
public class ResultCode {
public static final Integer SUCCESS = 200;
public static final Integer ERROR = 500;
public static final int NOT_LOGIN = 600;
public static final int NOT_AUTH = 700;
}
2.6.1.3,完成返回体 ResponseResult
package com.study.entity;
import com.study.common.ResultCode;
import lombok.Data;
import java.io.Serializable;
@Data
public class ResponseResult<T> implements Serializable {
private Boolean success;//是否成功
private Integer code;//状态码
private String message;//返回消息
private T data;
public ResponseResult() {
}
public static <T> ResponseResult<T> ok(){
ResponseResult<T> responseResult = new ResponseResult<T>();
responseResult.setSuccess(true);
responseResult.setCode(ResultCode.SUCCESS);
responseResult.setMessage("执行成功");
return responseResult;
}
public static <T> ResponseResult<T> ok(T data){
ResponseResult<T> responseResult = new ResponseResult<T>();
responseResult.setSuccess(true);
responseResult.setCode(ResultCode.SUCCESS);
responseResult.setMessage("执行成功");
responseResult.setData(data);
return responseResult;
}
public static <T> ResponseResult<T> error(Integer code){
ResponseResult<T> responseResult = new ResponseResult<T>();
responseResult.setSuccess(false);
responseResult.setCode(code);
responseResult.setMessage("执行失败");
return responseResult;
}
public static <T> ResponseResult<T> error(){
ResponseResult<T> responseResult = new ResponseResult<T>();
responseResult.setSuccess(false);
responseResult.setCode(ResultCode.ERROR);
responseResult.setMessage("执行失败");
return responseResult;
}
public ResponseResult<T> success(Boolean success){
this.setSuccess(success);
return this;
}
public ResponseResult<T> code (Integer code){
this.setCode(code);
return this;
}
public ResponseResult<T> message (String message){
this.setMessage(message);
return this;
}
public static<T> ResponseResult<T> exist (String message){
ResponseResult<T> responseResult = new ResponseResult<T>();
responseResult.setSuccess(true);
responseResult.setCode(ResultCode.SUCCESS);
responseResult.setMessage(message);
responseResult.setSuccess(true);
return responseResult;
}
public static<T> ResponseResult<T> exist (){
ResponseResult<T> responseResult = new ResponseResult<T>();
responseResult.setSuccess(true);
responseResult.setCode(ResultCode.SUCCESS);
responseResult.setSuccess(true);
return responseResult;
}
}
2.6.2,修改 TbBrandService接口
package com.study.service;
import com.study.entity.ResponseResult;
import com.study.pojo.TbBrand;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author admin
* @since 2023-01-17 03:39:02
*/
public interface TbBrandService extends IService<TbBrand> {
/**
* 查询所以商品接口
* @return
*/
ResponseResult getAllTrand();
}
2.6.3,修改 TbBrandServiceImpl
package com.study.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.study.entity.ResponseResult;
import com.study.pojo.TbBrand;
import com.study.mapper.TbBrandMapper;
import com.study.service.TbBrandService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author admin
* @since 2023-01-17 03:39:02
*/
@Service
public class TbBrandServiceImpl extends ServiceImpl<TbBrandMapper, TbBrand> implements TbBrandService {
@Autowired
TbBrandMapper tbBrandMapper;
/**
* 查询所以商品接口
* @return
*/
@Override
public ResponseResult getAllTrand() {
QueryWrapper<TbBrand> queryWrapper = new QueryWrapper<>();
List<TbBrand> tbBrands = tbBrandMapper.selectList(queryWrapper);
return ResponseResult.ok(tbBrands);
}
}
2.6.4,修改 TbBrandController
package com.study.controller;
import com.study.entity.ResponseResult;
import com.study.service.TbBrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 前端控制器
* </p>
*
* @author admin
* @since 2023-01-17 03:39:02
*/
@RestController
@RequestMapping("/brand")
public class TbBrandController {
@Autowired
TbBrandService tbBrandService;
/**
* 查询所以商品接口
* @return
*/
@GetMapping("/getAllTrand")
public ResponseResult getAllTrand(){
return tbBrandService.getAllTrand();
}
}
2.6.5,测试
http://localhost:8888/spring-boot-day09/brand/getAllTrand
3,完成添加商品接口
3.1,修改 TbBrandService接口
/**
* 添加商品
* @param tbBrand
* @return
*/
ResponseResult addTrand(TbBrand tbBrand);
3.2,修改 TbBrandServiceImpl
/**
* 添加商品
* @param tbBrand
* @return
*/
@Override
public ResponseResult addTrand(TbBrand tbBrand) {
int insert = tbBrandMapper.insert(tbBrand);
if(insert != 0){
return ResponseResult.ok("添加成功");
} else {
return ResponseResult.ok("添加失败");
}
3.3,修改 TbBrandController
/**
* 添加商品
* @param tbBrand
* @return
*/
@PostMapping("/addTrand")
public ResponseResult addTrand(@RequestBody TbBrand tbBrand){
return tbBrandService.addTrand(tbBrand);
}
3.4,测试
http://localhost:8888/spring-boot-day09/brand/addTrand
4,完成根据id查询商品接口
4.1,修改 TbBrandService接口
/**
* 根据id查询商品
* @param id
* @return
*/
ResponseResult getBarnkInfoById(String id);
4.2,修改 TbBrandServiceImpl
/**
* 根据id查询商品
* @param id
* @return
*/
@Override
public ResponseResult getBarnkInfoById(String id) {
TbBrand tbBrand = tbBrandMapper.selectById(id);
return ResponseResult.ok(tbBrand);
}
4.3,修改 TbBrandController
/**
* 根据id查询商品
* @param id
* @return
*/
@GetMapping("/getBarnkInfoById/{id}")
public ResponseResult getAllTrand(@PathVariable("id")String id){
return tbBrandService.getBarnkInfoById(id);
}
4.4,测试
http://localhost:8888/spring-boot-day09/brand/getBarnkInfoById/36
5,完成编辑商品接口
5.1,修改 TbBrandService 接口
/**
* 编辑商品
* @param tbBrand
* @return
*/
ResponseResult updateTrand(TbBrand tbBrand);
5.2,修改 TbBrandServiceImpl
/**
* 编辑商品
* @param tbBrand
* @return
*/
@Override
public ResponseResult updateTrand(TbBrand tbBrand) {
int update = tbBrandMapper.updateById(tbBrand);
if(update != 0){
return ResponseResult.ok("编辑成功");
} else {
return ResponseResult.ok("编辑失败");
}
}
5.3,修改 TbBrandController
/**
* 编辑商品
* @param tbBrand
* @return
*/
@PostMapping("/updateTrand")
public ResponseResult updateTrand(@RequestBody TbBrand tbBrand){
return tbBrandService.updateTrand(tbBrand);
}
5.4,测试
6,完成删除商品接口
6.1,修改 TbBrandService
/**
* 删除商品
* @param id
* @return
*/
ResponseResult deleteBarnkInfoById(String id);
6.2,修改 TbBrandServiceImpl
/**
* 删除商品
* @param id
* @return
*/
@Override
public ResponseResult deleteBarnkInfoById(String id) {
int deleteById = tbBrandMapper.deleteById(id);
if(deleteById != 0){
return ResponseResult.ok("删除成功");
} else {
return ResponseResult.ok("删除失败");
}
}
6.3,修改 TbBrandController
/**
* 删除商品
* @param id
* @return
*/
@GetMapping("/deleteBarnkInfoById/{id}")
public ResponseResult deleteBarnkInfoById(@PathVariable("id")String id){
return tbBrandService.deleteBarnkInfoById(id);
}