likes
comments
collection
share

[学习]SpringBoot之集成MyBatis-Plus,并实现代码生成、分页

作者站长头像
站长
· 阅读数 3

添加mybatis-plus-boot-starter 依赖

<!-- mybatis-plus 所需依赖  -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>

[学习]SpringBoot之集成MyBatis-Plus,并实现代码生成、分页

点击更新依赖,直至<version>3.5.1</version>由红色变为黑色,表示依赖安装完成。

添加mybatis-plus-generator freemarker 代码生成依赖

<!-- mybatis-plus-generator 代码生成器 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.1</version>
</dependency>


<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.31</version>
</dependency>

代码生成器配置

我们新建一个Utils目录,然后在该目录下新建MybatisPlusGenerator 配置自动生成代码信息:


package com.dengpeng.demo.Utils;

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

import java.util.Collections;

/**
 * @className: MybatisPlusGenerator
 * @description:
 * @author: dengpeng
 * @date: 2024-04-09
 */
public class MybatisPlusGenerator {
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/my_db_01?serverTimezone=GMT%2B8", "root", "admin123")
                .globalConfig(builder -> {
                    builder.author("dengpeng") // 设置作者
                            //.enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir(System.getProperty("user.dir")+"/src/main/java"); // 指定输出目录 System.getProperty(“user.dir”) 可以获取当前项目的根目录。
                })
                .packageConfig(builder -> {
                    builder.parent("com.dengpeng") // 设置父包名
                            .moduleName("demo") // 设置父包模块名
                            // .service()  // 设置自定义service路径,不设置就是默认路径
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") +"/src/main/resources/mapper/")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude("user") // 设置需要生成的表名
//                            .addTablePrefix("t_", "c_") //过滤的前缀
                            // 设置自动填充的时间字段
                            .entityBuilder().addTableFills(
                                    new Column("create_time", FieldFill.INSERT),new Column("update_time", FieldFill.INSERT_UPDATE))
                    ; // 设置过滤表前缀

                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }
}

运行MybatisPlusGenerator 类自动生成User表的全部代码

[学习]SpringBoot之集成MyBatis-Plus,并实现代码生成、分页

添加配置

Mapper扫描的注解MapperScan

我们需要在启动类上添加一个Mapper扫描的注解MapperScan,用来配置需要扫描的mapper包所在的位置。

[学习]SpringBoot之集成MyBatis-Plus,并实现代码生成、分页

添加分页配置类

package com.dengpeng.demo.Config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {
    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最后添加
        //interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
        return interceptor;
    }
}

测试一下

ok,配置完成,下面我们来使用一下MyBatisPlus:


## 新增

```UserController.java
@PostMapping("/add")
public Integer add(@RequestBody User user){
   return  userMapper.insert(user);
}

[学习]SpringBoot之集成MyBatis-Plus,并实现代码生成、分页

[学习]SpringBoot之集成MyBatis-Plus,并实现代码生成、分页

修改

@PutMapping("/edit")
public Integer edit(@RequestBody User user){
   return userMapper.updateById(user);
}

[学习]SpringBoot之集成MyBatis-Plus,并实现代码生成、分页

[学习]SpringBoot之集成MyBatis-Plus,并实现代码生成、分页

删除

@DeleteMapping("/{id}")
public Integer delete(@PathVariable Integer id){
   return userMapper.deleteById(id);
}

[学习]SpringBoot之集成MyBatis-Plus,并实现代码生成、分页

[学习]SpringBoot之集成MyBatis-Plus,并实现代码生成、分页

分页查询

@GetMapping("/page")
public Page<User> page(@RequestParam Integer pageNum, @RequestParam Integer pageSize){
    return userService.page(new Page<>(pageNum, pageSize));
}

我在使用时,发现报错了:

[学习]SpringBoot之集成MyBatis-Plus,并实现代码生成、分页

原因是:**因为MyBatis-Plus在自动生成代码时,默认采用的是驼峰转连字符模式**

解决方法,在application.yml中添加配置:

mybatis-plus:
  mapper-locations: classPath*:/mapper/*.xml
  configuration:
    map-underscore-to-camel-case: false # 禁止大写变小写时自动添加下划线

测试一下:

[学习]SpringBoot之集成MyBatis-Plus,并实现代码生成、分页

UserController全部代码

package com.dengpeng.demo.Controller;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dengpeng.demo.entity.User;
import com.dengpeng.demo.mapper.UserMapper;
import com.dengpeng.demo.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 用户信息表 前端控制器
 * </p>
 *
 * @author dengpeng
 * @since 2024-04-09
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    UserMapper userMapper;

    @Autowired
    UserServiceImpl userService;

    @PostMapping("/add")
    public Integer add(@RequestBody User user){
        return  userMapper.insert(user);
    }

    @PutMapping("/edit")
    public Integer edit(@RequestBody User user){
        return userMapper.updateById(user);
    }

    @DeleteMapping("/{id}")
    public Integer delete(@PathVariable Integer id){
        return userMapper.deleteById(id);
    }

    @GetMapping("/page")
    public Page<User> page(@RequestParam Integer pageNum, @RequestParam Integer pageSize){
        return userService.page(new Page<>(pageNum, pageSize));
    }

}