抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

最近一段时间,由于一些项目的需求,于是被迫用很快的速度学完了 Spring Framework,SpringMVC,Spring Boot。

然而实际上,我认为学习后端框架原理,前端的脚手架开发,搞一些基础建设是远远比每天写单调简单的业务逻辑要收获更多的,就是更多还是要有解决问题的能力和创新进步的想法吧,所以写业务逻辑当然是越省时间越好,机械操作和基础代码就越快搞定越好,这引出了我们为什么要使用 MyBatis-Plus

首先是它的官网快速上手部分:点我跳转

基础使用(利用提供的类进行增删改查)

首先在 maven 的依赖中添加 (最新版在 Maven Repository 查找)

1
2
3
4
5
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
</dependency>

同步依赖后配置注解扫描 mapper

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.grtsinry43.projectpackage;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.grtsinry43.projectpackage.mapper")
public class SimpleBackendApplication {

public static void main(String[] args) {
SpringApplication.run(SimpleBackendApplication.class, args);
}

}

下面我们先创建实体类(model)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.grtsinry43.projectpackage.model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.sql.Timestamp;

/**
* @author grtsinry43
* @date 2024/8/11 11:08
* @description user 的实体类
*/
@Data
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Integer id;
private String name;
private Boolean gender;
private Integer age;
private String phone;
private String password;
private Timestamp createAt;
}

这里使用了 Lombok 的 @Data 注解来自动生成 GetterSetter 方法、toString 方法、hashCode 方法、equals 方法。

下面我们来写对应的 Mapper,在这里,MyBatis-Plus 提供了一个 BaseMapper,我们只需要继承这个接口就可以直接获得增删改查的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.grtsinry43.projectpackage.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.grtsinry43.projectpackage.model.User;

/**
* @author grtsinry43
* @date 2024/8/11 11:13
* @description 用户的 Mapper 接口
*/
public interface UserMapper extends BaseMapper<User> {
}

当然,如果需要一些自定义的 sql 语句,也可以自行配置,这里采用最简单的来举例

在 resources/mapper 新建 UserMapper.xml

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.grtsinry43.projectpackage.mapper.UserMapper">
<select id="selectUsersOlderThan" resultType="com.grtsinry43.projectpackage.model.User">
SELECT * FROM user WHERE age > #{age}
</select>
</mapper>
1
2
3
4
public interface UserMapper extends BaseMapper<User> {
@Select("select * from user where age > #{age}")
List<User> selectUsersOlderThan(Integer age);
}代码生成器

然后在 Service 中,传入 Mapper 和对应的数据模型,继承 ServiceImpl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.grtsinry43.projectpackage.service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.grtsinry43.projectpackage.mapper.UserMapper;
import com.grtsinry43.projectpackage.model.User;
import org.springframework.stereotype.Service;

@Service
public class UserService extends ServiceImpl<UserMapper, User> {
private final UserMapper userMapper;

public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
}

这样,我们的 Service 对象就有了 crud 方法,我们可以在 Controller 类中直接使用~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.grtsinry43.projectpackage.controller;

import com.grtsinry43.projectpackage.dto.ApiResponse;
import com.grtsinry43.projectpackage.model.User;
import com.grtsinry43.projectpackage.service.UserService;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import org.springframework.web.bind.annotation.*;

/**
* @author grtsinry43
* @date 2024/8/11 11:30
* @description 少年负壮气,奋烈自有时!
*/
@RestController
@RequestMapping("/api/user")
public class UserController {
private final UserService userService;

public UserController(UserService userService) {
this.userService = userService;
}

@GetMapping("/{id}")
public ApiResponse<User> getUserInfo(@PathVariable Integer id) {
User user = userService.getById(id);
return ApiResponse.success(user);
}

@PutMapping("/{id}")
public ApiResponse<User> updateUserInfo(@PathVariable Integer id, @RequestBody User user) {
user.setId(id);
userService.updateById(user);
return ApiResponse.success(user);
}

@DeleteMapping("/{id}")
public ApiResponse<Object> deleteUser(@PathVariable Integer id) {
userService.removeById(id);
return ApiResponse.success(null);
}
}

使用代码生成器(完全不用敲代码)

当然,手动敲代码真的是太繁琐了,我真的非常讨厌在简单业务逻辑尤其是基本的 crud 上浪费时间,MyBatis-Plus 也想到了这一点,人家的完整使用方法可不是上面的那复杂,借助代码生成器(Auto Generator)完全无脑搞起来吧!

注意!根据官方文档,新的代码生成器适用于 3.5.1 及以上版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.grtsinry43.mybatisplusquickstart.util;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
* Code generator for MyBatis Plus.
* Author: grtsinry43
* Date: 2024/8/11
*/
public class CodeGenerator {
public static void main(String[] args) {
FastAutoGenerator.create("url",
"username", "password")
// 全局配置
.globalConfig((scanner, builder) -> builder
.author(scanner.apply("请输入作者名称?"))
.outputDir("src/main/java") // Specify the output directory
)
// 包配置
.packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名?")))
// 策略配置
.strategyConfig((scanner, builder) -> builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
.entityBuilder()
.enableLombok()
.addTableFills(
new Column("create_time", FieldFill.INSERT)
)
.build())
// 使用Freemarker引擎模板,默认的是Velocity引擎模板
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}

// 处理 all 情况
protected static List<String> getTables(String tables) {
return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
}
}

这样,就会按照结构生成好啦:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
❯ tree .
.
└── mybatisplusquickstart
├── controller
│   └── UserController.java
├── entity
│   └── User.java
├── mapper
│   ├── UserMapper.java
│   └── xml
│   └── UserMapper.xml
├── MybatisplusQuickstartApplication.java
├── service
│   ├── impl
│   │   └── UserServiceImpl.java
│   └── IUserService.java
└── util
└── CodeGenerator.java

以上,就可以在不用敲代码的情况下实现基本的数据操作,大大提高效率,减少机械操作了

评论

在这里留下你的评论吧~