5分钟带你实现一个简易springboot脚手架,废话不多说,直接开始。

  • 打开spring官网:spring.io

就这么简单又好记的几个字母直奔主题,英语好不好没关系,记住关键词就行

  • quickstart

页面正中间俩按钮,点击全大写的QUICKSTART,快速开始,进入快速开始引导页面,直接往下划拉看"step 1"第一步,有一个带超链的start.spring.io,点击进入里面,如果记性好,刚开始直接到这一步也省事。

我们可以在这个页面左边选择项目相关的配置,右边选择项目相关依赖,这里我们仅简单增加lombok、mybatis、mysql、spring-web相关依赖,然后点击下面的GENERATE直接下载配置好的项目。




推荐最高的spring boot脚手架 springboot脚手架搭建_mysql


spring官方快速生成项目

  • 导入项目

将生成的项目解压缩,用idea进行导入,稍等片刻待依赖导入完毕。


推荐最高的spring boot脚手架 springboot脚手架搭建_mysql_02

等待项目加载完毕


加载完毕直接执行DemoApplication类启动Springboot,结果看到报错。


推荐最高的spring boot脚手架 springboot脚手架搭建_数据源_03

项目直接启动失败

难道是官网下的demo都有问题么?说是也对说不是也对,为啥呢,看错误原因,提示说缺少数据库配置,怪官网只给咱加了mysql和mybatis依赖,却没有让配置数据源,那好吧,如果这时候没有数据源,咱就想验证下springboot能不能启动,那也不是没有办法,点击左侧的项目选项卡,再点击底下的外部库展开,直接写入autoconfig如图:


推荐最高的spring boot脚手架 springboot脚手架搭建_数据源_04

idea里面所有的树形菜单都可以这样直接搜索

我们找到springboot对应的autoconfigure,即:

Mave:org.springframework.boot:spring-boot-autoconfigure [1]:2.4.1

点击展开此依赖库,顺序展开MATE-INF目录, 打开spring.factories[2]文件,搜索DataSource关键字,找到DataSourceAutoConfiguration自动配置类,然后回到启动类上,在注解SpringBootApplication后面增加exclude参数:


SpringBootApplication(exclude = DataSourceAutoConfiguration.class)


然后再次启动,可以看到已经可以正常启动了:


推荐最高的spring boot脚手架 springboot脚手架搭建_mysql_05

排除DataSource正常启动

那我们不能总这样来启动项目吧,如果就要采用数据源启动那该咋办呢,此时我们可以打开项目里面的Resources目录,会发现有一个application.properties文件,我们把这个文件改成ymal/yml文件格式:


推荐最高的spring boot脚手架 springboot脚手架搭建_spring_06


然后在文件中增加DataSource相关配置,再把启动类的注解还原,再次启动项目,发现已经可以带数据源启动了:


推荐最高的spring boot脚手架 springboot脚手架搭建_spring_07

带数据源正常启动

  • 配置mybatis

有了数据源,那我们就可以配置mybatis来实现数据持久化了,但是mybatis相关的配置该如何添加呢,不急,我们先建立数据库表:


CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `loginName` varchar(30) NOT NULL COMMENT '登录名称',
  `password` varchar(32) NOT NULL COMMENT '密码',
  `email` varchar(60) DEFAULT NULL COMMENT '邮箱',
  `type` smallint(6) NOT NULL DEFAULT '0' COMMENT '0、普通用户 1、管理员',
  `status` smallint(6) NOT NULL DEFAULT '1' COMMENT '0、禁用 1、正常',
  `createTime` datetime NOT NULL COMMENT '创建时间',
  `lastTime` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '最后登录时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';


有了表我们在来生成实体和对应的mapper文件,那实体和mapper文件又该如何生成,这里我们有个自动生成mapper文件及实体的maven插件,mybatis-generator,相信各位开发同学都知道这个吧,直接进入官网quick start guide快速开始引导,可以看到右侧的启动命令需要加载一个generatorConfig.xml配置文件,往下划拉可以看到几个配置模板,依样画葫芦复制到我们项目的resources目录下。


推荐最高的spring boot脚手架 springboot脚手架搭建_spring_08

增加mybatis-generator配置

然后再点击左侧的“Running MyBatis Generator”菜单,展开后有个with maven选项,点击可以看到右边有相应的maven plugin依赖配置,复制到pom文件中,再往下划拉看到一个Classpath Issues标题,里面有数据源驱动问题的解决方法,把依赖也复制到pom里:


推荐最高的spring boot脚手架 springboot脚手架搭建_数据源_09

demo中用的mysql数据库因此换成mysql的驱动依赖

然后我们打开最右边的maven选项卡,展开demo下的插件,可以看到有个mybatis-generator插件,展开后双击第一个mybatis-generator:generate开始生成实体和mapper,等执行成功后可以在项目里看到已经生成了相应的文件:


推荐最高的spring boot脚手架 springboot脚手架搭建_spring_10

mybatis-generator已经生成相应的实体和mapper文件

有了实体和mapper文件,我们就可以配置mybatis了,刚开始我们查看autoconfigure的时候就看到有个mybatis相关的autoconfigure,相应的我们可以在对应spring.factories文件中找到自动配置类MybatisAutoConfiguration,可以看到类信息上有相关属性配置注解,对应的配置类为MybatisProperties.class:


推荐最高的spring boot脚手架 springboot脚手架搭建_数据源_11


打开这个类可以看到对应的yml配置前缀为:mybatis,我们直接在yml文件配置上配置:


mybatis:
  mapperLocations: classpath:mapper/*.xml


然后在数据库里插入一条数据,重写User实体类的toString方法,再修改启动类读取UserMapper加载数据库数据打印试试:


public class DemoApplication {

	public static void main(String[] args) {
		ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
		UserMapper userMapper = context.getBean(UserMapper.class);
		final List<User> users = userMapper.selectByExample(new UserExample());
		for (User user : users) {
			System.out.println(user);
		}
	}

}


改好后我们启动试试,发现还是报错,提示说找不到mapper的实现:


推荐最高的spring boot脚手架 springboot脚手架搭建_springboot导入项目依赖报错_12

未找到UserMapper实现报错

这里牵扯到mybatis的mapper加载问题,两种解决方案:

1、给每个mapper接口增加Mapper注解,实际开发中那可不得累坏了

2、启动类上增加MapperScan注解,并指定basePackages(value默认就是basePackages)

看来还是第2种方式简单,话不多说,直接加注解执行:


推荐最高的spring boot脚手架 springboot脚手架搭建_推荐最高的spring boot脚手架_13

增加MapperScan正常启动并打印数据日志

打完收工!


日志中报红一行:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

说是mysql的驱动类已经过时需要换成com.mysql.cj.jdbc.Driver,查看依赖发现引用的是8.0.22版本,修改pom文件重新指定version为5.1.47后重启,发现还有报红:

Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

将dataSource的url改为jdbc:mysql://localhost:3306/test?useSSL=false后解决。

参考

  1. ^spring-boot-autoconfigure https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-auto-configuration-classes.html#auto-configuration-classes
  2. ^spring.factories https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-understanding-auto-configured-beans