任务描述
1、熟悉SpringBoot框架的原理及使用
2、使用IDEA创建基于SpringBoot、MyBatis、MySQL的Java项目
3、当前任务请在client节点上进行
任务指导
1、SpringBoot框架的选择和原理
2、MyBatis-Plus的选择和原理
3、使用IDEA创建基于SpringBoot+MyBatis-Plus+MySQL的Java项目
4、测试SpringBoot项目的基本使用
任务实现
提示:
当前任务在 client节点上进行。
任务使用的IntelliJ IDEA Ultimate版本,只有30天免费使用期;需要自行申请教育ID(免费使用)。
1、SpringBoot框架的选择和原理
本项目是民航大数据平台的缩影,本系统数据量大并涉及大数据的处理,需要进行后端的分离,并且后端选择分布式的成熟框架。
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来建行新Spring应用的初始搭建及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不需要定义样板化的配置。
SpringBoot所具备的特征:
- 可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
- 内嵌Tomcat或Jetty等Servle容器;
- 提供自动配置的”starter”项目对象模型(POMS)以简化Maven配置;
- 尽可能自动配置Spring容器;
- 提供准备好的特性,如指标、健康检查和外部化配置;
- 没有代码生成,不需要配置XML配置。
2、MyBatis-Plus
- MyBatis-Plus 是一个 MyBatis增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。
官网地址:https://mp.baomidou.com/
MyBatis-Plus 特性:https://baomidou.com/pages/24112f/#%E7%89%B9%E6%80%A7
- 在IDEA中创建SpringBoot程序,并使用MyBatis-Plus,首先需要在IDEA中安装MyBatis-Plus插件
3、使用IDEA创建SpringBoot项目
- 双击桌面上的“ideaU”图标,打开IDEA工具
- 点击“+ Create New Project”,开始创建一个新项目:
- 在左侧菜单找到Spring Initializr,点击Next。注意,这里IDEA默认使用https://start.spring.io 提供的在线模板,所以需要保证网络畅通。当然也可以选择Custorm指定链接加载模版。例如,如果出现start.spring.io服务器连接异常或超时的情况,可以修改Server URL,将在线模板服务器设置为国内的服务器,如下所示:
- 按照实际情况依次填写项目信息。Type是Maven或者Gradle,选择JDK版本,Packaging属性下可以选择jar或者war等,填写完毕点击Next:
- 选择Web-->Spring Web Services,点击Next:
注意,这里Spring Boot选择任意版本即可,例如:在图中使用的是2.7.11,但是在实际环境中Spring Boot的版本是动态变化的,请根据自己当前的环境进行设置,一般来说选择一个2.7.x的任意版本都可以。
- 点击Finish,完成创建。
- 等待IDEA构建好项目后,项目结构如下图所示:
- 在IDEA中创建SpringBoot程序,并使用MyBatis-Plus,首先需要在IDEA中安装MyBatis-Plus插件
依次点击 File --> Settings,在打开的面板中选择 Plugins,搜索 MyBatisX并安装即可:
- 项目会下载所需的依赖包,需要待较长的时间,所以可以自行下载安装Maven,并配置国内仓库源
1)从官方网站下载最新版本即可,中文网下载地址: https://maven.org.cn/download.html ,注意,Maven 3.9+ requires JDK 8 or above to execute. It still allows you to build against 1.3 and other JDK versions by using toolchains。当前项目环境已经提供了安装文件,存放在Client节点的/opt/software目录下。
2)进入/opt/software目录,解压安装Maven到/opt/目录下
[root@client ~]# cd /opt/software
[root@client software]# tar -zxvf apache-maven-3.9.1-bin.tar.gz -C /opt/
3)配置Maven使用国内源,进入Maven配置目录 (例如:/opt/apache-maven-3.9.1/conf)
[root@client software]# cd /opt/apache-maven-3.9.1/conf
[root@client conf]# vim settings.xml
4)修改settings.xml文件,在<mirrors></mirrors>标签内将其他的<mirror>标签注释掉或删除掉,然后添加如下内容:
<mirror><id>huaweicloud</id><mirrorOf>*</mirrorOf><url>https://mirrors.huaweicloud.com/repository/maven/</url></mirror>
- 在IDEA工具中配置使用上一步安装配置好的Maven插件
1)依次点击 “File”->"Settings",打开设置面板,然后找到“Build,Execution,Deployment”->“Build Tools”->“Maven”
2)设置如下内容,来配置Maven插件
- 查看pom.xml文件,项目所需依赖都在这里,此时项目会下载所需的依赖包,需要待一段时间
为了支持MyBatis-Plus需要在<dependencies> </dependencies>标签内添加MyBatis-Plus的相关依赖:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version>
</dependency>
还需添加MySQL相关依赖,为了简化代码,引入 lombok 依赖(减少 getter、setter 等方法):
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.18</version>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version>
</dependency>
点击如下图所示图标,更新Maven引用:
替换启动类(DemoApplication.java)头部声明
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
启动项目:
启动成功后显示访问端口8080。
停止项目:
4、实现REST请求
- 创建项目结构
首先我们在com.example.demo包下,分别创建model包(用于存放model)、dao包(用于存放数据访问文件)、controller包(用于存放控制器)、service包(用于存放主要的程序逻辑代码)。
右键com.example.demo选择New-->Package创建包
创建com.example.demo.model包
按照上述方式继续创建dao包、controller包、service包,项目结构如下:
- 实现model
在model包中创建一个Java Class文件,名为Test.java,并写入以下内容:
package com.example.demo.model;public class Test {private final long id;private final String content;public Test(long id,String content) {this.id = id;this.content = content;}public long getId() {return id;}public String getContent() {return content;}
}
- 实现Controller
在controller包中创建一个Java Class文件,名为TestController.java,并写入以下内容:
package com.example.demo.controller;import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.model.Test;@RestController
public class TestController {private static final String template = "Hello,%s!";private final AtomicLong counter = new AtomicLong();@RequestMapping("/test")public Test dealTest(@RequestParam(value="name", defaultValue="World") String name) {return new Test(counter.incrementAndGet(),String.format(template, name));}
}
- 打开DemoApplication.java文件,启动项目
控制台选项卡会打印运行日志,如下我们可以看到监听到本地8080端口。
- 打开浏览器,访问页面
刷新页面,可以看到计数器加1后的效果:
5、创建定时器
使用SpringBoot基于注解来创建定时任务非常简单,代码如下。
- 在com.example.demo包下,创建task包,并在task包中创建一个Java Class文件,名为StaticScheduleTask.java
package com.example.demo.task;import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;@Configuration //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling // 2.开启定时任务
public class StaticScheduleTask {//3.添加定时任务,每隔5秒打印一次“Schedule Task”@Scheduled(cron = "0/5 * * * * ?")private void testTask() {System.out.println("Schedule Task");}
}
- 修改启动文件DemoApplication.java,开启定时任务
package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;@EnableScheduling //开启定时任务
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
- 运行项目,会在控制台显示定时任务,打印的结果,每隔5秒打印一次“Schedule Task”
6、测试MyBatis-Plus的使用
- 在node3节点上,进入mysql客户端命令行模式
[root@node3 ~]# mysql -uroot -p123456
- 创建一个MySQL表,并添加一些测试数据:
DROP DATABASE IF EXISTS testMyBatisPlus;CREATE DATABASE testMyBatisPlus;USE testMyBatisPlus;DROP TABLE IF EXISTS user;CREATE TABLE user
(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (id)
);INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
- 返回Client节点,在项目的resources目录添加 application.yml 文件,在文件中配置 mysql 数据源信息(注意:缩进)
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123456url: jdbc:mysql://node3:3306/testMyBatisPlus?autoReconnect=true&autoReconnectForPools=true&failOverReadOnly=false&serverTimezone=UTC
如上url中的node3不建议修改为IP地址,在真实开发过程中测试环境与生产环境的IP地址不一样。
- 在com.example.demo包下创建entity包,用于存放实体类,在entity包中创建数据库中user表对应的实体类User.java类:
package com.example.demo.entity;import lombok.Data;@Data
public class User {private Long id;private String name;private int age;private String email;
}
- 在com.example.demo包下创建mapper包,用于存放数据操作类,在mapper包中创建操作数据表实体类的Mapper类UserMapper.java,该类直接继承BaseMapper,可以省去xml的编写,当然也支持通过xml自定义sql查询语句:
package com.example.demo.mapper;import com.example.demo.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;public interface UserMapper extends BaseMapper<User> {
}
BaseMapper里封装了一些常用的CRUD方法:
- 实体类、Mapper 类都写好了,就可以使用了,首先需要在启动类DemoApplication 里扫描 Mapper 类,即添加 @MapperScan 注解,修改后的DemoApplication文件内容如下:
package com.example.demo;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;@MapperScan("com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
- 在src/test/java/com/example/demo/包下,创建一个测试类TestMybatisPlusApplicationTests.java 测试一下
package com.example.demo;import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
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
class TestMybatisPlusApplicationTests {@Autowiredprivate UserMapper userMapper;@Testpublic void testSelect() {System.out.println(("----- selectAll method test ------"));List<User> userList = userMapper.selectList(null);for(User user:userList) {System.out.println(user);}}
}
- 注意:MyBatis-plus与Spring的版本有兼容性的要求,例如mybatis-plus-boot-starter 3.4.1对应的Spring的版本使用2.4.5,否则可能会出现与MybatisPlus不兼容的情况,当然也可以选择其他相兼容的版本。
- 所以需要修改pom.xml,将spring-boot-starter-parent的版本改为2.4.5,mybatis-plus-boot-starter 版本为3.4.1
<?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.4.5</version></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version> <name>demo</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web-services</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
- 更新Maven依赖
- 运行测试类