0


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

环境:

jdk:1.8

springboot版本:2.7.15

mybatis-plus版本:3.5.1以上

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

步骤:

1.添加依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.2</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.3.2</version>
</dependency>

<!-- 代码生成时候配置中会用到版本引擎,这里添加模版引擎依赖 -->
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
</dependency>

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文件,没有的目录也会自动生成

测试

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<TUser> optById = itUserService.getOptById(1);
        log.info("通过id查询数据:{}",optById.get());
    }

    @Test
    public void queryAll(){
        List<TUser> list = itUserService.list();
        log.info("获取全量数据:{}",list.size());
    }

    @Test
    public void queryByUser(){
        LambdaQueryWrapper<TUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(TUser::getName,"zhangsan");
        List<TUser> 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<TUser> page = new Page<>();
        page.setSize(2)
            .setCurrent(2);
        LambdaQueryWrapper<TUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(TUser::getName,"test");
        List<TUser> list = itUserService.list(page,queryWrapper);
        log.info("分页查询:{}",list.size());
    }
}

3.源码

码云


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

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


本文转载自: https://blog.csdn.net/it_erge/article/details/132709504
版权归原作者 悟空、大师兄 所有, 如有侵权,请联系我们删除。

“【重要】springboot实战(六)之mybatis-plus代码自动生成器”的评论:

还没有评论