专栏首页OSChinaSpring-Boot 使用 mybatis-plus-gennretor代码生成器生成代码+分页插件

Spring-Boot 使用 mybatis-plus-gennretor代码生成器生成代码+分页插件

代码自动生成器

1.导入需要的jar包

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- lombok 小辣椒 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.6</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>
        <!-- mybatis-plus-generator 代码生成器jar -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.2</version>
        </dependency>

        <!-- freemarker 模板引型 (俩者选其一) -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>
        <!-- velocity 模板引型 (俩者选其一) -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
        </dependency>

2 . 模板引型的选择

package com.shi.generator;

import java.util.Scanner;

/**
 * 模板引型的选择
 */
public class GeneratorTest {

    /**
     * 读取控制台内容
     */
    public static int scanner() {
        Scanner scanner = new Scanner(System.in);
        String help =
                " !!代码生成, 输入 0 表示使用 Velocity 引擎 !!" +
                        "\n对照表:" +
                        "\n0 = Velocity 引擎" +
                        "\n1 = Freemarker 引擎" +
                        "\n请输入:";
        System.out.println(help);
        int slt = 0;
        // 现在有输入数据
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if ("1".equals(ipt)) {
                slt = 1;
            }
        }
        return slt;
    }
}

3 . 案例

package com.shi.generator;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.*;

/**
 * myBatis-Plus 代码生成器案例
 *   说明:该案例生成了controller ,service,dao,mapper,entity
 *   加入:Lombok(小辣椒),swagger2
 *
 *   *************需要自定义的变量***************
 */
public class MysqlGenerator extends GeneratorTest {

    /**
     * MySQL 生成演示
     */
    public static void main(String[] args) {
        int result = scanner();

        /****************************配置信息********************/
        String[] tableName = new String[] { "large_area","machine_component" };/****************************需要生成的表名********************/
        String outputDir = "D:\\project\\shiTest\\shi_Mybatis_plus2\\src\\main\\java";/****************************输出的项目目录********************/
        String moduleName = "marchine";/*****************************模块名(需要自己指定)**********/
        String parentPackage = "com.shi"; /****************************自定义父包路径********************/
        String userName = "";/****************************用户名********************/
        String password = ""; /****************************密码(url一样要改)********************/
        String url = "jdbc:mysql://192.168.69.11:3306/shihaifeng?useUnicode=true&allowPublicKeyRetrieval=true&useSSL=false&characterEncoding=utf8";

//        自定义需要填充的字段
//        List<TableFill> tableFillList = new ArrayList<>();
//        tableFillList.add(new TableFill("large_area", FieldFill.INSERT_UPDATE));

        // 代码生成器
        AutoGenerator mpg = new AutoGenerator().setGlobalConfig(
                // 全局配置
                new GlobalConfig()
                        .setOutputDir(outputDir)
                        .setFileOverride(true)// 是否覆盖文件
                        .setActiveRecord(true)// 开启 activeRecord 模式
                        .setEnableCache(false)// XML 二级缓存
                        .setBaseResultMap(true)// XML ResultMap
                        .setBaseColumnList(true)// XML columList
                        .setIdType(IdType.AUTO)//主键生成策略,自增
                        .setSwagger2(true)//生成swagger2注解支持
                        //.setKotlin(true) 是否生成 kotlin 代码
                        .setAuthor("shiye")
                // 自定义文件命名,注意 %s 会自动填充表实体属性!
                // .setEntityName("%sEntity");
                // .setMapperName("%sDao")
                // .setXmlName("%sDao")
                // .setServiceName("MP%sService")
                // .setServiceImplName("%sServiceDiy")
                // .setControllerName("%sAction")
        ).setDataSource(
                // 数据源配置
                new DataSourceConfig()
                        .setDbType(DbType.MYSQL) // 数据库类型
                        .setTypeConvert(new MySqlTypeConvert() {
                            // 自定义数据库表字段类型转换【可选】
                            @Override
                            public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                                System.out.println("转换类型:" + fieldType);
                                // if ( fieldType.toLowerCase().contains( "tinyint" ) ) {
                                //    return DbColumnType.BOOLEAN;
                                // }
                                return super.processTypeConvert(globalConfig, fieldType);
                            }
                        })
                        .setDriverName("com.mysql.jdbc.Driver")
                        .setUsername(userName)
                        .setPassword(password)
                        .setUrl(url)
        ).setStrategy(
                // 策略配置
                new StrategyConfig()
                         .setCapitalMode(true)// 全局大写命名
                        // .setDbColumnUnderline(true)//全局下划线命名
//                        .setTablePrefix(new String[]{"bmd_", "mp_"})// 此处可以修改为您的表前缀
                        .setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
                         .setInclude(tableName) // 需要生成的表 如果不指定就生成全部的表
                        // .setExclude(new String[]{"test"}) // 排除生成的表
                        // 自定义实体父类
                        // .setSuperEntityClass("com.baomidou.demo.TestEntity")
                        // 自定义实体,公共字段
//                        .setSuperEntityColumns(new String[]{"test_id"})
//                        .setTableFillList(tableFillList)
//                        .setEntityBooleanColumnRemoveIsPrefix(true)
                // 自定义 mapper 父类
                // .setSuperMapperClass("com.baomidou.demo.TestMapper")
                // 自定义 service 父类
                // .setSuperServiceClass("com.baomidou.demo.TestService")
                // 自定义 service 实现类父类
                // .setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl")
                // 自定义 controller 父类
                // .setSuperControllerClass("com.baomidou.demo.TestController")
                // 【实体】是否生成字段常量(默认 false)
                // public static final String ID = "test_id";
                // .setEntityColumnConstant(true)
                // 【实体】是否为构建者模型(默认 false)
                // public User setName(String name) {this.name = name; return this;}
                // .setEntityBuilderModel(true)
                // 【实体】是否为lombok模型(默认 false)<a href="https://projectlombok.org/">document</a>
                 .setEntityLombokModel(true)
                // Boolean类型字段是否移除is前缀处理
                // .setEntityBooleanColumnRemoveIsPrefix(true)
                // .setRestControllerStyle(true)
                // .setControllerMappingHyphenStyle(true)
        ).setPackageInfo(
                // 包配置
                new PackageConfig()
                        .setModuleName(moduleName)
                        .setParent(parentPackage)
                        .setController("controller")// 这里是控制器包名,默认web   别的(service,entity...)都可以默认
        ).setCfg(
                // 注入自定义配置,可以在 VM 中使用 cfg.abc 设置的值

                new InjectionConfig() {
                    @Override
                    public void initMap() {
                        Map<String, Object> map = new HashMap<>();
                        map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
                        this.setMap(map);
                    }
                }.setFileOutConfigList(Collections.singletonList(new FileOutConfig(
                        "/templates/mapper.xml" + ((1 == result) ? ".ftl" : ".vm")) {
                    // 自定义输出文件目录  指定生成的mapper.xml文件输出位置
                    @Override
                    public String outputFile(TableInfo tableInfo) {
                        return  "d:\\mapper\\" + tableInfo.getEntityName() + ".xml";
                    }
                }))
        ).setTemplate(
                // 关闭默认 xml 生成,调整生成 至 根目录
                new TemplateConfig().setXml(null)
                // 自定义模板配置,模板可以参考源码 /mybatis-plus/src/main/resources/template 使用 copy
                // 至您项目 src/main/resources/template 目录下,模板名称也可自定义如下配置:
                // .setController("...");
                // .setEntity("...");
                // .setMapper("...");
                // .setXml("...");
                // .setService("...");
                // .setServiceImpl("...");
        );
        // 执行生成
        if (1 == result) {
            mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        }
        mpg.execute();

        // 打印注入设置,这里演示模板里面怎么获取注入内容【可无】
        System.err.println(mpg.getCfg().getMap().get("abc"));
    }

}
  • 分页插件

可以参考官网(https://mp.baomidou.com/guide/page.html)

1. 编写配置文件,初始化分页插件

/**
 * Spring boot方式
 * @author shfeng
 * @create 2019-07-19 14:25
 */
@EnableTransactionManagement
@Configuration
@MapperScan("com.shi.*.mapper.mapper*")
public class MybatisPlusConfig {

    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

2. 写测试文件

/**
     * 这是是使用mybaits的分页功能 但是分页不是物理分页需要改进
     * 增加分页插件 PaginationInterceptor 以后 ,使用的是物理分页
     */
    @Test
    public void getLargerAraByPage(){
        IPage<LargeArea> page = new Page<>();
        page.setSize(2l);
        page.setCurrent(1l);
        Wrapper<LargeArea> queryWrapper = new QueryWrapper<LargeArea>();
        page = largeAreaMapper.selectPage(page,queryWrapper);
        System.out.println("page = " + page);
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自定义一个 Date 处理函数

    用户5927264
  • springboot整合RSA进行sign签名校验

    用户5927264
  • 对加密-加签的完整流程

    用户5927264
  • 聊聊nacos ServiceManager的removeInstance

    本文主要研究一下nacos ServiceManager的removeInstance

    codecraft
  • 聊聊nacos ServiceManager的removeInstance

    本文主要研究一下nacos ServiceManager的removeInstance

    codecraft
  • 上市3年,营收翻18倍,利润涨10倍,陌陌做对了什么?

    日前陌陌发布2017年三季度财报,数据堪称亮眼:营收3.545亿美元,同比增长126%;归属于陌陌的非美国通用会计准则净利润9380万美元,同比增长89%。3年...

    罗超频道
  • SNS项目笔记<六>--手势Gestures

    这里直接贴上angular源码地址:angular源码之hammer_gestures <这里方便它更新后的修改> 这里又贴上该地址的源码以便说明:

    stormKid
  • 腾讯云云监控实时监控服务器稳定性和运行状态

    魏艾斯博客www.vpsss.net
  • ubuntu13.10安装broadcom无线网卡驱动

    forrestlin
  • 是的,腾讯投票已经拥抱腾讯云了

    小程序腾讯投票最近迁移到腾讯云了,本文记录了为什么做这个迁移,以及前后的工作。

    serena

扫码关注云+社区

领取腾讯云代金券