SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建,深入剖析反面典型案例

user_id int(11) NOT NULL AUTO_INCREMENT,

user_name varchar(50) CHARACTER SET utf8 NOT NULL COMMENT ‘账号’,

password varchar(50) CHARACTER SET utf8 NOT NULL COMMENT ‘密码’,

user_state varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT ‘1’ COMMENT ‘状态,逻辑删除’,

PRIMARY KEY (user_id)

) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

/*Data for the table user */

LOCK TABLES user WRITE;

insert into user(user_id,user_name,password,user_state) values (1,‘keafmd’,‘keafmd’,‘1’),(3,‘21312321’,‘123’,‘0’),(11,‘213’,‘213’,‘1’),(12,‘keafmd’,‘666’,‘0’);

UNLOCK TABLES;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

后端搭建

==============================================================

1、快速创建个SpringBoot项目


第一步:Spring Initializr

在这里插入图片描述

第二步:Spring Initializr Project Settings

在这里插入图片描述

第三步:添加个Lombok工具

在这里插入图片描述

第四步:Finish

在这里插入图片描述

初始化的样子:

在这里插入图片描述

2、引入依赖


此处贴上整个pom.xml,部分依赖可能对于简单需求而言是多余的,可以自行舍弃。

pom.xml代码:

<?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”>

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.4.5

com.keafmd

springboot-server

0.0.1-SNAPSHOT

springboot-server

Demo project for Spring Boot

<java.version>1.8</java.version>

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-devtools

org.projectlombok

lombok

org.apache.commons

commons-lang3

com.google.guava

guava

20.0

com.baomidou

mybatis-plus-boot-starter

3.3.2

mysql

mysql-connector-java

5.1.49

com.baomidou

mybatis-plus-generator

3.3.2

test

org.freemarker

freemarker

2.3.31

test

io.github.yedaxia

japidocs

1.4.3

test

com.google.code.gson

gson

2.8.6

test

com.alibaba

fastjson

1.2.73

commons-beanutils

commons-beanutils

1.9.4

org.bouncycastle

bcprov-jdk15on

1.68

com.auth0

java-jwt

3.4.0

org.springframework.boot

spring-boot-maven-plugin

org.projectlombok

lombok

3、编写代码快速生成代码


因为此代码为辅助代码,放在test包下即可,相关的数据库信息以及包信息需要和你们自己的保持一致,自行修改,如何包命名和我一致,只需要修改数据库相关信息即可。

CodeGenerator:

package com.keafmd.mp;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;

import com.baomidou.mybatisplus.core.toolkit.StringPool;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;

import com.baomidou.mybatisplus.generator.AutoGenerator;

import com.baomidou.mybatisplus.generator.InjectionConfig;

import com.baomidou.mybatisplus.generator.config.*;

import com.baomidou.mybatisplus.generator.config.po.TableInfo;

import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

/**

  • Keafmd

  • @ClassName: CodeGenerator

  • @Description: 代码生成器

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-29 17:06

  • @Blog: https://keafmd.blog.csdn.net/

*/

public class CodeGenerator {

/**

  • 读取控制台内容

*/

public static String scanner(String tip) {

Scanner scanner = new Scanner(System.in);

StringBuilder help = new StringBuilder();

help.append(“请输入” + tip + “:”);

System.out.println(help.toString());

if (scanner.hasNext()) {

String ipt = scanner.next();

if (StringUtils.isNotBlank(ipt)) {

return ipt;

}

}

throw new MybatisPlusException(“请输入正确的” + tip + “!”);

}

public static void main(String[] args) {

// 代码生成器

AutoGenerator mpg = new AutoGenerator();

// 全局配置

GlobalConfig gc = new GlobalConfig();

String projectPath = System.getProperty(“user.dir”);

// System.out.println("projectPath = " + projectPath);

gc.setOutputDir(projectPath + “/src/main/java”);

// gc.setOutputDir(“D:\test”);

gc.setAuthor(“关注公众号:牛哄哄的柯南”);

gc.setOpen(false);

// gc.setSwagger2(true); 实体属性 Swagger2 注解

gc.setServiceName(“%sService”);

mpg.setGlobalConfig(gc);

// 数据源配置

DataSourceConfig dsc = new DataSourceConfig();

dsc.setUrl(“jdbc:mysql://127.0.0.1:3306/data_test?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC”);

// dsc.setSchemaName(“public”);

dsc.setDriverName(“com.mysql.jdbc.Driver”);

dsc.setUsername(“root”);

dsc.setPassword(“18044229”);

mpg.setDataSource(dsc);

// 包配置

PackageConfig pc = new PackageConfig();

pc.setModuleName(null);

pc.setParent(“com.keafmd”);

mpg.setPackageInfo(pc);

// 自定义配置

InjectionConfig cfg = new InjectionConfig() {

@Override

public void initMap() {

// to do nothing

}

};

// 如果模板引擎是 freemarker

String templatePath = “/templates/mapper.xml.ftl”;

// 如果模板引擎是 velocity

// String templatePath = “/templates/mapper.xml.vm”;

// 自定义输出配置

List focList = new ArrayList<>();

// 自定义配置会被优先输出

focList.add(new FileOutConfig(templatePath) {

@Override

public String outputFile(TableInfo tableInfo) {

// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!

return projectPath + “/src/main/resources/com/keafmd/mapper/” + tableInfo.getEntityName() + “Mapper” + StringPool.DOT_XML;

}

});

cfg.setFileOutConfigList(focList);

mpg.setCfg(cfg);

// 配置模板

TemplateConfig templateConfig = new TemplateConfig();

templateConfig.setXml(null);

mpg.setTemplate(templateConfig);

// 策略配置

StrategyConfig strategy = new StrategyConfig();

strategy.setNaming(NamingStrategy.underline_to_camel);

strategy.setColumnNaming(NamingStrategy.underline_to_camel);

strategy.setEntityLombokModel(true);

strategy.setRestControllerStyle(true);

strategy.setInclude(scanner(“表名,多个英文逗号分割”).split(“,”));

strategy.setControllerMappingHyphenStyle(true);

strategy.setTablePrefix(“m_”);

mpg.setStrategy(strategy);

mpg.setTemplateEngine(new FreemarkerTemplateEngine());

mpg.execute();

}

}

4、运行代码生成器生成代码


在控制台输入user(表名)

在这里插入图片描述

红框内为自动生成的代码:

在这里插入图片描述

5、编写application.properties


个人习惯把application.properties改为application.yml,修改端口为80

server:

port: 80

spring:

datasource:

url: jdbc:mysql://127.0.0.1/data_test?useSSL=false&&characterEncoding=UTF-8

driver-class-name: com.mysql.jdbc.Driver

username: root

password: 18044229

jackson:

date-format: yyyy-MM-dd HH:mm:ss

time-zone: GMT+8

mvc:

throw-exception-if-no-handler-found: true

web:

resources:

add-mappings: false

6、在启动类上添加@MapperScan


SpringbootServerApplication:

package com.keafmd;

import org.mybatis.spring.annotation.MapperScan;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

@MapperScan(“com.keafmd.mapper”)

public class SpringbootServerApplication {

public static void main(String[] args) {

SpringApplication.run(SpringbootServerApplication.class, args);

}

}

7、编写测试代码测试数据库是否连接正确


1、在 UserMapper代码页大括号内,按下Alt+Insert,选择Test

在这里插入图片描述

2、Ok

在这里插入图片描述

3、自动生成了测试类

在这里插入图片描述

4、编写测试代码

UserMapperTest :

package com.keafmd.mapper;

import com.keafmd.SpringbootServerApplication;

import com.keafmd.entity.User;

import com.keafmd.service.UserService;

import org.junit.jupiter.api.Test;

import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

import java.util.List;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest(classes = SpringbootServerApplication.class)

class UserMapperTest {

@Resource

UserService userService;

@Test

public void test1(){

List userList = userService.list();

for (User user : userList) {

System.out.println(user);

}

}

}

5、测试结果

在这里插入图片描述

至此,后端和数据库连接没问题。

8、编写后端的工具类代码(封装结果集、日期处理、解决跨域请求)


在这里插入图片描述

1、CommonResult

package com.keafmd.common;

import lombok.Getter;

/**

  • Keafmd

  • @ClassName: CommonResult

  • @Description: 封装结果集

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-29 18:11

  • @Blog: https://keafmd.blog.csdn.net/

*/

@Getter

public class CommonResult {

private Integer code;

private String message;

private Object obj;

private CommonResult(Integer code, String message, Object obj) {

this.code = code;

this.message = message;

this.obj = obj;

}

public static CommonResult nohandler() {

return new CommonResult(ResultCode.NOHANDLER.getCode(), ResultCode.NOHANDLER.getMessage(),null);

}

public static CommonResult success(Object data) {

return new CommonResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(),data);

}

public static CommonResult failed() {

return new CommonResult(ResultCode.FAILED.getCode(), ResultCode.FAILED.getMessage(),null);

}

public static CommonResult failed(String message) {

return new CommonResult(ResultCode.FAILED.getCode(),message,null);

}

public static CommonResult notoken() {

return new CommonResult(ResultCode.NOTOKEN.getCode(), ResultCode.NOTOKEN.getMessage(),null);

}

public static CommonResult nopremiss() {

return new CommonResult(ResultCode.NOPERMISS.getCode(), ResultCode.NOPERMISS.getMessage(),null);

}

}

2、DateConverter

package com.keafmd.common;

import org.springframework.context.annotation.Configuration;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

最后

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

a.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-nteL2jCg-1712701348875)]
[外链图片转存中…(img-GdLO9j23-1712701348875)]
[外链图片转存中…(img-CUryiZOH-1712701348876)]
[外链图片转存中…(img-AeIKQ1PC-1712701348876)]
[外链图片转存中…(img-Z7UKA02z-1712701348877)]
[外链图片转存中…(img-mNP4cIhv-1712701348878)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-dn6MldUD-1712701348878)]

最后

[外链图片转存中…(img-uY0ezIN2-1712701348879)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-9fX2jATU-1712701348879)]

  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值