1. 环境准备与工具安装
在开始构建基于VS Code的SpringBoot+MyBatis-Plus开发环境前,我们需要先完成基础工具的安装配置。这个环节看似简单,但实际配置过程中存在不少容易踩坑的细节。
1.1 VS Code核心插件配置
作为轻量级编辑器,VS Code需要通过插件扩展Java开发能力。以下是必装插件清单及其作用说明:
-
Java Extension Pack:微软官方提供的Java开发套件,包含语言支持、调试器、Maven工具等核心功能。安装后会自动依赖以下组件:
- Language Support for Java(TM) by Red Hat(Java语言基础支持)
- Debugger for Java(调试器)
- Java Test Runner(测试运行器)
- Maven for Java(Maven项目管理)
- Project Manager for Java(项目管理)
-
Spring Boot Extension Pack:Spring官方推出的开发套件,包含:
- Spring Boot Tools(SpringBoot专用工具)
- Spring Initializr(项目初始化)
- Spring Boot Dashboard(项目仪表盘)
注意:安装后建议在设置中开启"java.settings.url"配置,指向公司内部Maven仓库(如有),可显著加快依赖下载速度。
1.2 JDK版本选择与配置
SpringBoot 2.7.x版本推荐使用JDK11或17(LTS版本),这里以JDK17为例说明配置要点:
- 从Oracle或AdoptOpenJDK官网下载对应系统的JDK安装包
- 安装完成后,在VS Code中配置
java.home路径:
json复制{
"java.home": "C:\\Program Files\\Java\\jdk-17.0.2"
}
- 验证配置:按Ctrl+Shift+P输入
Java: Configure Java Runtime,确认JDK版本显示正确
常见问题排查:
- 如果出现"Java 17 or more recent is required"错误,检查环境变量JAVA_HOME是否指向JDK17
- Maven编译时报错可尝试在pom.xml中显式指定Java版本:
xml复制<properties>
<java.version>17</java.version>
</properties>
1.3 MySQL安装与初始化
推荐使用MySQL 8.0+版本,安装时需特别注意:
- 安装过程中选择"Developer Default"配置
- 设置root密码时建议勾选"Use Strong Password Encryption"
- 安装完成后创建项目专用数据库:
sql复制CREATE DATABASE demo_db
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
配置连接参数备忘:
- 默认端口:3306
- 新版驱动类名:com.mysql.cj.jdbc.Driver
- 连接URL需添加时区参数:
code复制jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=Asia/Shanghai
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 项目初始化与基础配置
2.1 使用Spring Initializr创建项目
在VS Code中按Ctrl+Shift+P,输入Spring Initializr创建项目,关键配置项:
- Project: Maven Project
- Language: Java
- Spring Boot: 2.7.8 (当前稳定版)
- Group: com.example
- Artifact: demo
- Dependencies:
- Spring Web
- Lombok
- MySQL Driver
- MyBatis Framework
创建完成后,手动在pom.xml中添加MyBatis-Plus依赖:
xml复制<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
2.2 基础配置调整
application.yml关键配置示例:
yaml复制server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: yourpassword
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启SQL日志
global-config:
db-config:
id-type: auto # 主键自增策略
2.3 项目结构规范
推荐的项目结构:
code复制src/main/java
└── com.example.demo
├── config # 配置类
├── controller # 控制器
├── entity # 实体类
├── mapper # Mapper接口
├── service # 服务层
│ ├── impl # 服务实现
└── DemoApplication.java # 启动类
3. MyBatis-Plus核心功能集成
3.1 实体类与Mapper基础配置
使用Lombok简化实体类定义:
java复制@Data
@TableName("user") // 指定表名
public class User {
@TableId(type = IdType.AUTO) // 主键自增
private Long id;
private String name;
private Integer age;
private String email;
}
Mapper接口只需继承BaseMapper即可获得CRUD方法:
java复制public interface UserMapper extends BaseMapper<User> {
// 可自定义扩展方法
}
别忘了添加Mapper扫描注解:
java复制@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
3.2 服务层封装示例
建议的服务层实现模式:
java复制public interface UserService extends IService<User> {
// 自定义业务方法
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
implements UserService {
@Override
public List<User> selectByName(String name) {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.like(User::getName, name);
return baseMapper.selectList(wrapper);
}
}
3.3 分页插件配置
MyBatis-Plus的分页需要特别配置拦截器:
java复制@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
使用示例:
java复制Page<User> page = new Page<>(1, 10); // 第1页,每页10条
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.ge(User::getAge, 18);
Page<User> result = userService.page(page, wrapper);
4. RESTful接口开发实战
4.1 基础CRUD接口实现
标准控制器示例:
java复制@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public Result<User> getById(@PathVariable Long id) {
return Result.success(userService.getById(id));
}
@PostMapping
public Result<Boolean> save(@RequestBody User user) {
return Result.success(userService.save(user));
}
@PutMapping
public Result<Boolean> update(@RequestBody User user) {
return Result.success(userService.updateById(user));
}
@DeleteMapping("/{id}")
public Result<Boolean> delete(@PathVariable Long id) {
return Result.success(userService.removeById(id));
}
}
统一返回结果封装:
java复制@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {
private Integer code;
private String msg;
private T data;
public static <T> Result<T> success(T data) {
return new Result<>(200, "success", data);
}
}
4.2 复杂查询接口示例
带条件的分页查询接口:
java复制@GetMapping("/page")
public Result<Page<User>> page(
@RequestParam(defaultValue = "1") Integer current,
@RequestParam(defaultValue = "10") Integer size,
@RequestParam(required = false) String name,
@RequestParam(required = false) Integer minAge) {
Page<User> page = new Page<>(current, size);
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(name)) {
wrapper.like(User::getName, name);
}
if (minAge != null) {
wrapper.ge(User::getAge, minAge);
}
return Result.success(userService.page(page, wrapper));
}
4.3 接口测试与调试
VS Code推荐安装REST Client插件,可以直接编写.http文件测试接口:
code复制### 创建用户
POST http://localhost:8080/user
Content-Type: application/json
{
"name": "张三",
"age": 25,
"email": "zhangsan@example.com"
}
### 分页查询
GET http://localhost:8080/user/page?current=1&size=10&minAge=20
5. 开发效率提升技巧
5.1 代码自动生成配置
MyBatis-Plus提供了强大的代码生成器,建议配置如下:
java复制public class CodeGenerator {
public static void main(String[] args) {
AutoGenerator generator = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
gc.setAuthor("YourName");
gc.setOpen(false);
generator.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=Asia/Shanghai");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("yourpassword");
generator.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.example.demo");
generator.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
strategy.setInclude("user"); // 表名
generator.setStrategy(strategy);
generator.execute();
}
}
5.2 VS Code调试技巧
- 条件断点:右键点击断点可以设置条件表达式
- 日志点:在不暂停的情况下输出变量值
- 调试控制台:可以直接执行表达式测试代码片段
- 推荐配置launch.json:
json复制{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Debug DemoApplication",
"request": "launch",
"mainClass": "com.example.demo.DemoApplication",
"projectName": "demo"
}
]
}
5.3 常见问题解决方案
-
Mapper注入报错:
- 检查启动类是否添加@MapperScan
- 确认Mapper接口添加了@Repository注解
-
分页不生效:
- 检查是否配置了分页插件
- 确保Page对象作为第一个参数
-
字段映射问题:
- 使用@TableField指定数据库字段名
java复制@TableField("user_name") private String name; -
事务管理:
- 在Service方法添加@Transactional
- 确认数据库引擎是InnoDB
这套技术栈组合在实际项目中已经过充分验证,从个人经验来看,MyBatis-Plus的Lambda表达式写法可以极大减少SQL编写错误,配合VS Code的轻量级体验,特别适合快速迭代的中小型项目开发。对于复杂查询场景,建议仍然使用XML映射文件保持SQL的可维护性。
