学习分享|使用 Spring Boot + MyBatisPlus 提高效率,简化开发
最近一段时间,由于一些项目的需求,于是被迫用很快的速度学完了 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;@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 注解来自动生成 Getter、Setter 方法、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;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.*;@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;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" ) ) .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()) .templateEngine(new FreemarkerTemplateEngine ()) .execute(); } 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
以上,就可以在不用敲代码的情况下实现基本的数据操作,大大提高效率,减少机械操作了
条评论