使用 Spring Boot + MyBatisPlus 提高效率,简化开发

grtsinry43
8/11/2024
36 views
预计阅读时长 15 分钟

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

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

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

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

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

查找)

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

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

JAVA
1package com.grtsinry43.projectpackage;
2
3import org.mybatis.spring.annotation.MapperScan;
4import org.springframework.boot.SpringApplication;
5import org.springframework.boot.autoconfigure.SpringBootApplication;
6
7@SpringBootApplication
8@MapperScan("com.grtsinry43.projectpackage.mapper")
9public class SimpleBackendApplication {
10
11    public static void main(String[] args) {
12        SpringApplication.run(SimpleBackendApplication.class, args);
13    }
14
15}
16

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

JAVA
1package com.grtsinry43.projectpackage.model;
2
3import com.baomidou.mybatisplus.annotation.IdType;
4import com.baomidou.mybatisplus.annotation.TableId;
5import com.baomidou.mybatisplus.annotation.TableName;
6import lombok.Data;
7
8import java.sql.Timestamp;
9
10/**
11 * @author grtsinry43
12 * @date 2024/8/11 11:08
13 * @description user 的实体类
14 */
15@Data
16@TableName("user")
17public class User {
18    @TableId(type = IdType.AUTO)
19    private Integer id;
20    private String name;
21    private Boolean gender;
22    private Integer age;
23    private String phone;
24    private String password;
25    private Timestamp createAt;
26}
27

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

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

JAVA
1package com.grtsinry43.projectpackage.mapper;
2
3import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4import com.grtsinry43.projectpackage.model.User;
5
6/**
7 * @author grtsinry43
8 * @date 2024/8/11 11:13
9 * @description 用户的 Mapper 接口
10 */
11public interface UserMapper extends BaseMapper<User> {
12}
13

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

在 resources/mapper 新建 UserMapper.xml

XML
1<?xml version="1.0" encoding="UTF-8" ?>
2<!DOCTYPE mapper
3        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5
6<mapper namespace="com.grtsinry43.projectpackage.mapper.UserMapper">
7    <select id="selectUsersOlderThan" resultType="com.grtsinry43.projectpackage.model.User">
8        SELECT * FROM user WHERE age > #{age}
9    </select>
10</mapper>
JAVA
1public interface UserMapper extends BaseMapper<User> {
2    @Select("select * from user where age > #{age}")
3    List<User> selectUsersOlderThan(Integer age);
4}代码生成器

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

JAVA
1package com.grtsinry43.projectpackage.service;
2
3import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
4import com.grtsinry43.projectpackage.mapper.UserMapper;
5import com.grtsinry43.projectpackage.model.User;
6import org.springframework.stereotype.Service;
7
8@Service
9public class UserService extends ServiceImpl<UserMapper, User> {
10    private final UserMapper userMapper;
11
12    public UserService(UserMapper userMapper) {
13        this.userMapper = userMapper;
14    }
15}

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

JAVA
1package com.grtsinry43.projectpackage.controller;
2
3import com.grtsinry43.projectpackage.dto.ApiResponse;
4import com.grtsinry43.projectpackage.model.User;
5import com.grtsinry43.projectpackage.service.UserService;
6import jakarta.validation.constraints.NotBlank;
7import jakarta.validation.constraints.NotNull;
8import org.springframework.web.bind.annotation.*;
9
10/**
11 * @author grtsinry43
12 * @date 2024/8/11 11:30
13 * @description 少年负壮气,奋烈自有时!
14 */
15@RestController
16@RequestMapping("/api/user")
17public class UserController {
18    private final UserService userService;
19
20    public UserController(UserService userService) {
21        this.userService = userService;
22    }
23
24    @GetMapping("/{id}")
25    public ApiResponse<User> getUserInfo(@PathVariable Integer id) {
26        User user = userService.getById(id);
27        return ApiResponse.success(user);
28    }
29    
30    @PutMapping("/{id}")
31    public ApiResponse<User> updateUserInfo(@PathVariable Integer id, @RequestBody User user) {
32        user.setId(id);
33        userService.updateById(user);
34        return ApiResponse.success(user);
35    }
36    
37    @DeleteMapping("/{id}")
38    public ApiResponse<Object> deleteUser(@PathVariable Integer id) {
39        userService.removeById(id);
40        return ApiResponse.success(null);
41    }
42}
43

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

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

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

JAVA
1package com.grtsinry43.mybatisplusquickstart.util;
2
3import com.baomidou.mybatisplus.annotation.FieldFill;
4import com.baomidou.mybatisplus.generator.FastAutoGenerator;
5import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
6import com.baomidou.mybatisplus.generator.fill.Column;
7
8import java.util.Arrays;
9import java.util.Collections;
10import java.util.List;
11
12/**
13 * Code generator for MyBatis Plus.
14 * Author: grtsinry43
15 * Date: 2024/8/11
16 */
17public class CodeGenerator {
18    public static void main(String[] args) {
19        FastAutoGenerator.create("url",
20                        "username", "password")
21                // 全局配置
22                .globalConfig((scanner, builder) -> builder
23                        .author(scanner.apply("请输入作者名称?"))
24                        .outputDir("src/main/java") // Specify the output directory
25                )
26                // 包配置
27                .packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名?")))
28                // 策略配置
29                .strategyConfig((scanner, builder) -> builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
30                        .entityBuilder()
31                        .enableLombok()
32                        .addTableFills(
33                                new Column("create_time", FieldFill.INSERT)
34                        )
35                        .build())
36                // 使用Freemarker引擎模板,默认的是Velocity引擎模板
37                .templateEngine(new FreemarkerTemplateEngine())
38                .execute();
39    }
40
41    // 处理 all 情况
42    protected static List<String> getTables(String tables) {
43        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
44    }
45}

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

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

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

相关推荐

折腾记录|使用 Nuxt.js 重写个人主页,使用 SSR 优化 SEO ,实现一些期待已久的效果

在 22 年刚创建个人主页的时候,由于我的技术水平不够,只能用一些 wordpress type...

grtsinry43
9/19/2024
24
0
0

使用 pf4j-spring 实现插件注入和 api 接口动态注册 | 插件系统构建(上)

哪个男孩不想拥有一个自己的插件系统?(x)话说回来,这个我已经计划好久了,不过一直在学其他的东西,刚...

grtsinry43
1/26/2025
40
0
0

学习分享|跨域解决、安卓开发探索、油猴脚本探索

最近学习的一些内容,包括跨域问题及其解决方案,安卓开发的简单探索,OpenAI的api做了个小插...

grtsinry43
6/10/2024
35
0
0

学习分享|原生三件套的网页效果

这是学习前端基础,用原生三件套尤其是js实现效果一些学习过程的记录,首先是静态的小米商城,之后实...

grtsinry43
6/10/2024
10
0
0

用一个月的时间写一个自己的博客系统——Grtblog的技术介绍

终于,历时一个多月的开发 ~~bug~~ 和测试,这个目前问题很多很不成熟很难用的系统终于上线了.....

grtsinry43
12/14/2024
117
4
0
COMMENT 7273217741581062144

发表评论

登录之后评论体验更好哦 ~
支持 Markdown 语法 0 / 3000

在风雨飘摇之中

本站已运行了

一路走来,感谢陪伴与支持

愿我们不负热爱,继续前行

全站通知
更新通知