1. 打开IDEA,新建项目
2. 更改 Server URL(如果IDEA是新版本的,并且不用Java 8的话可以跳过这一步)
由于使用新版本IDEA内置的 Spring Initializr 创建 Spring Boot 新项目时,没有 Java 8 的选项了,只剩下了 >= 17 的版本,这是因为 Spring Boot 官方不再支持 Spring Boot 的 2.x 版本了,之后全力维护 3.x,而 Spring Boot 3.x 对 JDK 版本的最低要求是 17!所以 Spring 官方的项目初始化工具自然不再支持 Java 8 了,用网页版也是一样的
如果想要创建项目的时候使用 Java 8 ,可以使用阿里云提供的脚手架镜像(https://start.aliyun.com/),只要在 IDEA 里更改 Server URL 即可:
3. 设置项目信息,选择 Spring Boot 的版本以及项目所需要的依赖,点击 Create 即可完成创建
4. 项目结构
以下为 Spring Boot 项目的项目结构,可以根据自己的需求参考使用
4.1 如果需要连接MySQL,则需要在application.yml
文件中添加如下配置:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# 数据库地址 端口 数据库名
url: jdbc:mysql://localhost:3306/router?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false
username: root # 账号
password: root # 密码
hikari:
minimum-idle: 3
maximum-pool-size: 5
max-lifetime: 0
connection-test-query: SELECT 1
4.2 如果需要使用MyBatis-Plus,则需要在pom.xml
文件下添加以下依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
在application.yml
文件中推荐添加如下配置:
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 0 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 1 # 逻辑未删除值(默认为 0)
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: false # 关闭驼峰
如果需要使用分页插件,则需要编写配置文件:
package com.example.demo.common.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.example.demo.mapper")
public class MybatisPlusConfig {
// 最新版
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
4.3 Result
文件
package com.example.demo.common;
import lombok.Data;
@Data
public class Result {
private String code;
private String msg;
private Object data;
public static Result success(Object data, String msg) {
Result result = new Result();
result.setCode("200");
result.setData(data);
result.setMsg(msg);
return result;
}
public static Result error(String msg) {
Result result = new Result();
result.setCode("404");
result.setMsg(msg);
return result;
}
}
4.4 DemoApplication
文件
package com.example.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.demo.mapper") //这里改成项目的mapper的包路径
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
4.5 User
类文件
package com.example.demo.entity;
import lombok.Data;
import java.io.Serializable;
@Data
public class User implements Serializable {
private Integer id;
private String community_id;
}
4.6 UserMapper
文件(数据库表的映射实体类)
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper extends BaseMapper<User> {
}
4.7 UserService
文件
package com.example.demo.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@Service
public class UserService extends ServiceImpl<UserMapper, User> {
@Resource
private UserMapper userMapper;
public User getUserById(Integer id) {
// 访问数据库的耗时统计
long start = System.currentTimeMillis();
QueryWrapper<User> query = new QueryWrapper<User>().eq("id", id);
User user = userMapper.selectOne(query);
log.info("getUserById 耗时统计 {}ms", System.currentTimeMillis() - start);
return user;
}
public List<User> getUser() {
// 访问数据库的耗时统计
long start = System.currentTimeMillis();
List<User> userList = userMapper.selectList(null);
log.info("getUser 耗时统计 {}ms", System.currentTimeMillis() - start);
return userList;
}
public Page<User> findUserPage(Page<User> page) {
// 访问数据库的耗时统计
long start = System.currentTimeMillis();
Page<User> userPage = userMapper.selectPage(page, null);
log.info("findUserPage 耗时统计 {}ms", System.currentTimeMillis() - start);
return userPage;
}
}
4.8 UserController
文件
package com.example.demo.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.common.Result;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
@GetMapping("/getUserById")
public Result getUserById(@RequestParam Integer id) {
Optional<User> user = Optional.ofNullable(userService.getUserById(id));
if (!user.isPresent()) {
return Result.error("查询不到用户");
}
return Result.success(user, "查询成功");
}
@GetMapping("/getAllUser")
public Result getUser() {
Optional<List<User>> userList = Optional.ofNullable(userService.getUser());
if (!userList.isPresent()) {
return Result.error("查询不到用户");
}
return Result.success(userList, "查询成功");
}
@GetMapping("/getUserPage")
public Result findDeviceByUserId(@RequestParam Integer pageNum,
@RequestParam Integer pageSize) {
Page<User> page = userService.findUserPage(new Page<>(pageNum, pageSize));
return Result.success(page, "查询成功");
}
}
4.9 运行DemoApplication
主文件,在浏览器访问 http://localhost:9090/user/getUserById?id=1
5. 注意事项
5.1 如果要将项目打包成 jar 包,推荐直接在 IDEA 里面进行打包,点击右侧的 Maven,先点击 clean 清理,完成后点击 package 进行打包,打包成功后的 jar 包会放在项目的 target 目录下
5.2 如果打包后的 jar 包运行提示没有主清单属性,则有可能缺少了项目maven打包插件 spring-boot-maven-plugin,或者是没有指定具体的项目的Main方法入口或启动类,可以将 pom.xml 配置文件中打包配置部分换成下面的代码
<!-- 打包格式 -->
<packaging>jar</packaging>
<!-- 打包插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<executable>true</executable>
<layout>JAR</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<attach>false</attach>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>