深入解析Mybatis-Plus框架:简化Java持久层开发(三)

🍀 前言

博客地址:

👋 简介

上一章以及介绍了Mybatis-Plus基础配置和数据库表的创建,本章节主要介绍下Mybatis-Plus代码生成器的功能。

📖 正文

1 Generator的配置依赖

<!--mybatis plus代码生成器-->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-generator</artifactId>
  <version>3.5.2</version>
</dependency>
<!--模板引擎-->
<dependency>
  <groupId>org.freemarker</groupId>
  <artifactId>freemarker</artifactId>
  <version>2.3.31</version>
</dependency>

上面两个依赖,一个是代码生成器需要的依赖,另外一个是一个模板引擎,如果没有这个模板引擎,会在生成代码的时候导致失败

2 Generator的代码生成

编写测试类,编写代码生成器的代码,然后执行生成需要的文件

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.sql.DataSource;
import java.util.Collections;

@SpringBootTest
public class GeneratorTest {

    // 作者
    private static String AUTHOR = "power";
    // 生成文件目录
    private static String OUTPUT_DIR = "D:\\mpdemo";
    // 生成xml文件目录
    private static String XML_DIR = "D:\\mpdemo\\mapper";
    // 数据库表名
    private static String[] TABLES = {"tb_user", "tb_role", "tb_menu", "tb_user_role", "tb_role_menu"};
    // 项目路径
    private static String TARGET_PACKAGE = "com.power.mpdemo";

    @Autowired
    private DataSource dataSource;


    @Test
    void contextLoads() {
        //使用上面自动注入的dataSource创建FastAutoGenerator
        FastAutoGenerator.create(new DataSourceConfig.Builder(dataSource))
        .globalConfig(builder -> {
            builder.fileOverride() // 覆盖已生成文件
            .author(AUTHOR)// 设置作者
            .enableSwagger() // 开启swagger模式自动添加swagger注解
            .outputDir(OUTPUT_DIR); // 指定输出目录
        })
        .packageConfig(builder -> {
            builder.parent(TARGET_PACKAGE) // 设置父包名
            //                            .moduleName("system") // 设置父包模块名
            .pathInfo(Collections.singletonMap(OutputFile.xml, XML_DIR)); // 设置mapperXml生成路径
        })
        .strategyConfig(builder -> {
            builder.addInclude(TABLES) // 设置需要生成的表名;
            .addTablePrefix("tb_"); // 设置过滤表前缀
        })
        //这里可能会报错找不到Freemarker类,就需要引入下面的pom.xml的freemarker引擎
        .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
        .execute();
    }
}

代码执行完毕,会在本地D:\下生成两个文件夹
image.png

3 修改项目代码

3.1 Mapper映射文件

该文件可以配置sql,一般简单的sql可以通过Mybatis-Plus来实现,如果有一些特别复杂的sql,我们可以通过mapper映射文件来写sql,这里我们将mapper映射文件放到项目的resource目录下
image.png
同时,在application.yml文件中添加配置

mybatis-plus:
  # 当mapper接口和mapper接口对应的配置文件在不在同目录下,需要进行绑定
  mapper-locations: classpath*:/mapper/**/*.xml
3.2 项目代码

image.png
将com目录中的文件,和项目目录对应起来,将最顶层文件拷贝到项目中

  • controller:目录中存放的都是接口层的代码
  • entity:目录中存放的为数据库表对应的实体类文件
  • mapper:目录中存放的是数据层的接口文件
  • service:目录中存放的是业务逻辑层的接口及接口实现类

4 生成的文件简介

4.1 entity实体类

这里用角色表对应的实体类举例(因为代码较少),生成的代码,我们用lombok注解修改下,自动生成构造,setter,getter等方法,减少代码冗余度
image.png

package com.power.mpdemo.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * <p>
 * 角色表
 * </p>
 *
 * @author power
 * @since 2023-12-21
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName("tb_role")
@ApiModel(value = "Role对象", description = "角色表")
public class Role implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty("角色id")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @ApiModelProperty("角色名称")
    private String roleName;

    @ApiModelProperty("角色编码")
    private String roleCode;

    @ApiModelProperty("描述")
    private String description;

    @ApiModelProperty("创建时间")
    private LocalDateTime createTime;

    @ApiModelProperty("更新时间")
    private LocalDateTime updateTime;

    @ApiModelProperty("删除标记(0:可用 1:已删除)")
    private Integer isDeleted;
}

注解介绍(Mybatis-Plus相关):

  • @TableName("tb_role"):标识实体类对应的表,如果类名和表名相同,可以不加
  • @TableId(value = "id", type = IdType.AUTO):声明实体类中的主键对应的字段,类型为自增长

其他注解为swagger和lombok注解,这里不过多介绍

4.2 mapper接口

Mybatis-Plus提供的接口BaseMapper,本身已经实现了很多CRUD的操作,我们生成的mapper通过继承Mybatis-Plus提供的这个接口,就等于已经实现了这些方法

package com.power.mpdemo.mapper;

import com.power.mpdemo.entity.Role;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * <p>
 * 角色表 Mapper 接口
 * </p>
 *
 * @author power
 * @since 2023-12-21
 */
public interface RoleMapper extends BaseMapper<Role> {

}
4.3 service接口

同4.2一样,Mybatis-Plus在业务逻辑层也实现了很多接口供我们进行CRUD,具体的方法可以通过源码,或者Mybatis-Plus官网进行查看,这里不过多介绍

package com.power.mpdemo.service;

import com.power.mpdemo.entity.Role;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 * 角色表 服务类
 * </p>
 *
 * @author power
 * @since 2023-12-21
 */
public interface IRoleService extends IService<Role> {

}
4.4 service实现类

在service目录下,还有一个impl的文件夹,里面存放的代码文件都是service接口的实现类,同样的这个实现类一样继承了Mybatis-Plus提供的类,并且实现接口,这里主要作用就是用来实现业务逻辑的

package com.power.mpdemo.service.impl;

import com.power.mpdemo.entity.Role;
import com.power.mpdemo.mapper.RoleMapper;
import com.power.mpdemo.service.IRoleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 角色表 服务实现类
 * </p>
 *
 * @author power
 * @since 2023-12-21
 */
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {

}
4.5 controller控制器

这一层为控制层,主要实现API接口,用于前后端进行交互,比如返回内容给前端,接收前端传递过来的参数之类的操作

package com.power.mpdemo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;

/**
 * <p>
 * 角色表 前端控制器
 * </p>
 *
 * @author power
 * @since 2023-12-21
 */
@Controller
@RequestMapping("/role")
public class RoleController {

}

我们这里代码生成器生成的注解为@Controller,因为我们需要前后端以json的形式进行交互,所以手动修改成@RestController

@RestController
@RequestMapping("/role")
public class RoleController {

}

至此,对于代码生成器生成的代码层级结构,已经每一层作用,以及需要修改的地方都已做了基本修改。

✏ 总结

通过Mybatis-Plus的代码生成器根据数据库表生成对应的实体类、接口、控制器等,节省了编写基础类的时间,将精力更多的放在业务上。

💖 欢迎关注我的公众号

在这里插入图片描述

  • 50
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值