相关推荐recommended
【重要】springboot实战(六)之mybatis-plus代码自动生成器
作者:mmseoamin日期:2023-12-14

目录

环境:

步骤:

1.添加依赖

2.配置代码

3.运行

测试

1.测试生成的service

1.1、service用法

2.分页查询

2.1、分页插件配置 

2.2、测试

3.源码


环境:

jdk:1.8

springboot版本:2.7.15

mybatis-plus版本:3.5.1以上

(本文章用的当前最新版本:3.5.3.2,代码适用于3.5.1版本以上的版本)

步骤:

1.添加依赖


    com.baomidou
    mybatis-plus-boot-starter
    3.5.3.2


    com.baomidou
    mybatis-plus-generator
    3.5.3.2



    org.freemarker
    freemarker

2.配置代码

在测试类中创建一下测试类运行就行。

运行之前需要修改一些配置信息。

1.修改成自己的数据库链接地址、账号、密码

2.进行全局配置globalConfig,参数解释:

  • author:作者名称,设置以后代码生成时候类注释上会有设置的名字
  • outputDir:指定输出目录,这里设置到/src/main/java目录就行,生产的文件会输出到这个目录下
  • enableSwagger:如果项目中配置了swagger,可以打开,如果没配置注释调就行

    3.进行包配置packageConfig,参数解释:

    • parent:设置父包名,这个设置你自己的包名就可以,生产代码时,此属性会配合outputDir属性,在/src/main/java目录下生成一个包
    • pathInfo:此属性是指定生成mapper.xml文件的路径

      4.进行策略配置strategyConfig,参数解释:

      • addInclude:设置生成的表名称,如果多张表用逗号","分割开
      • addTablePrefix:设置过滤表前缀,如果表有固定的前缀,可以在这里设置,生产代码时会将前缀去掉,如:t_user表,如果设置此属性,生成的实体类为User,如果不设置则生成的实体类名称为:TUser
package com.iterge.iterge_pre;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.sql.Types;
import java.util.Collections;
@SpringBootTest
class ItergePreApplicationTests {
    @Test
    void contextLoads() {
        FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/test", "root", "root")
                .globalConfig(builder -> {
                    builder.author("iterge") // 设置作者
                            // 开启 swagger 模式 默认不开启
                            //.enableSwagger()
                            .outputDir("/Users/liuph/dev/space/idea/iterge_pre/src/main/java"); // 指定输出目录
                })
                .dataSourceConfig(builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
                    int typeCode = metaInfo.getJdbcType().TYPE_CODE;
                    if (typeCode == Types.SMALLINT) {
                        // 自定义类型转换
                        return DbColumnType.INTEGER;
                    }
                    return typeRegistry.getColumnType(metaInfo);
                }))
                .packageConfig(builder -> {
                    // 设置父包名
                    builder.parent("com.iterge.iterge_pre")
                            // 设置父包模块名
                            //.moduleName("mapper")
                            // 设置mapperXml生成路径
                            .pathInfo(Collections.singletonMap(OutputFile.xml, "/Users/liuph/dev/space/idea/iterge_pre/src/main/resources/mapper"));
                })
                .strategyConfig(builder -> {
                    // 设置需要生成的表名
                    builder.addInclude("t_user,user_info");
                            // 设置过滤表前缀
                            //.addTablePrefix("t_", "c_");
                })
                // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();
    }
}

3.运行

启动测试类,生成结果如下:

此代码生成器会同时生成:controller、service、serviceImpl、mapper、entity以及mapper.xml文件,没有的目录也会自动生成

【重要】springboot实战(六)之mybatis-plus代码自动生成器,第1张

测试

1.测试生成的service

1.1、service用法

package com.iterge.iterge_pre.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.iterge.iterge_pre.entity.TUser;
import com.iterge.iterge_pre.entity.User;
import com.iterge.iterge_pre.mapper.TUserMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;
/**
 * @author liuph
 * @date 2023/9/6 10:49:02
 */
@SpringBootTest
@Slf4j
public class TUserServiceTest {
    @Resource
    private ITUserService itUserService;
    @Test
    public void selectById(){
        Optional optById = itUserService.getOptById(1);
        log.info("通过id查询数据:{}",optById.get());
    }
    @Test
    public void queryAll(){
        List list = itUserService.list();
        log.info("获取全量数据:{}",list.size());
    }
    @Test
    public void queryByUser(){
        LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(TUser::getName,"zhangsan");
        List list = itUserService.list(queryWrapper);
        log.info("自定义条件查询:{}",list.size());
    }
}

2.分页查询

 mybits-plus的分页查询要引入分页插件

2.1、分页插件配置 

package com.iterge.iterge_pre.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;
/**
 * @author liuph
 * @date 2023/9/6 11:30:02
 */
@Configuration
public class MybatisPlusConfig {
    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //如果配置多个插件,切记分页最后添加
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        //如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
        //interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

2.2、测试

package com.iterge.iterge_pre.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.iterge.iterge_pre.entity.TUser;
import com.iterge.iterge_pre.entity.User;
import com.iterge.iterge_pre.mapper.TUserMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;
/**
 * @author liuph
 * @date 2023/9/6 10:49:02
 */
@SpringBootTest
@Slf4j
public class TUserServiceTest {
    @Resource
    private ITUserService itUserService;
    @Test
    public void queryByPage(){
        IPage page = new Page<>();
        page.setSize(2)
            .setCurrent(2);
        LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(TUser::getName,"test");
        List list = itUserService.list(page,queryWrapper);
        log.info("分页查询:{}",list.size());
    }
}

3.源码

码云


创作不易,你的鼓励是我创作的动力~

有什么疑问可以评论区留言哦~