代码生成工具:根据数据库生成代码,MybatisPlus-代码生成器

14 篇文章 0 订阅

一、JDBC代码生成:

1.代码生成器:

package coden;
import ins.framework.mybatis.generator.GenConfig;
import ins.framework.mybatis.generator.GenParam;
import ins.framework.mybatis.generator.GenType;
import ins.framework.mybatis.generator.Generator;
import ins.framework.mybatis.generator.util.GeneratorUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class CodeGenerator {

    public static void main(String[] args) throws Exception {
        List<GenParam> paramList = new ArrayList<GenParam>();
        /**
         * 请保持生成参数的完整,不要注释
         * 包名,表名
         */
		paramList.add(new GenParam("aaa", new String[] { "main"}));
		paramList.add(new GenParam("aaa", new String[] { "itemKind"}));
        paramList.add(new GenParam("aaa", new String[] { "zrRiskInfo"}));
		paramList.add(new GenParam("aaa", new String[] { "insuredIdvList"}));
		paramList.add(new GenParam("aaa", new String[] { "insuredIdvListTemp"}));
		paramList.add(new GenParam("aaa", new String[] { "itemAddress"}));
		paramList.add(new GenParam("aaa", new String[] { "itemEmployList"}));
		paramList.add(new GenParam("aaa", new String[] { "limit"}));
		paramList.add(new GenParam("aaa", new String[] { "ration"}));

        GenConfig gc = new GenConfig();
        // 设置外层包名
        gc.setBasePackage("com");
        // 设置要忽略的表名前缀,默认空
        gc.setIgnoreTablePrefixs(new String[]{""});
        // 设置PO是否保留前缀(设置忽略表名前缀时),默认true
        gc.setKeepPrefixForPO(false);
        // 设置取操作时间函数,默认空
//		gc.setOperateTimeForHisFunc("now()");
        // 设置是否默认开启二级缓存(影响base中的MapperXML),默认false
//		gc.setDefaultCache(false);
        // mysql 数据库相关配置
        // 设置基本保存目录(Java源代码根目录)----- 绝对路径
        gc.setSaveDir("D:\\ideaproject\\项目名称\\src\\main\\java");
        // 可代码指定vo和xml的位置
        // gc.setSaveDirForVo(new File(gc.getSaveDir(),
        // "../../../../misc-vo/src/main/java").getAbsolutePath());
        // gc.setSaveDirForXml(new File(gc.getSaveDir(),
        // "../resources/mapper").getAbsolutePath());
        // 数据库驱动类
        gc.setDbDriverName("com.mysql.cj.jdbc.Driver");
        // 数据库链接信息
        gc.setDbUrl("jdbc:mysql://localhost:3306");
        gc.setDbSchema("database"); // 库名
        gc.setDbUser("user"); // 用户名
        gc.setDbPassword("user"); // 密码

        // 支持生成的文件类型:生成PO、BASE_MAPPER_XML(自动覆盖)、Dao、VO、MapperXML(不覆盖)
        gc.setGenTypes(
                new GenType[]{GenType.VO, GenType.PO, GenType.DAO, GenType.BASE_MAPPER_XML, GenType.MAPPER_XML});
        Generator generator = new Generator();
        generator.setGenConfig(gc);
        generator.setParamList(paramList);
        generator.generate();

        StringBuffer sb = new StringBuffer();
        for (GenParam param : paramList) {
            String module_name = param.getModule();
            for (String table_name : param.getTables()) {
                String beanName = GeneratorUtils.getObjectName(table_name);
                String table_base_xml_file_path = gc.getSaveDir() + "/../resources/mapper/base" + "/" + module_name
                        + "/" + beanName + "BaseDao.xml";
//				String table_base_xml_file_path = "D:\\tempcode\\" + beanName + "BaseDao.xml";

                log.debug("table {}'s base xml file path is {}", table_name, table_base_xml_file_path);

                File baseXmlFile = new File(table_base_xml_file_path);
                if (!baseXmlFile.exists()) {
                    log.error("wrong file path {} ", table_base_xml_file_path);
                } else {
                    BufferedReader br = new BufferedReader(new FileReader(baseXmlFile));
                    String line = null;
                    String keyProperty = null;
                    boolean resultMap_line = false;

                    while ((line = br.readLine()) != null) {
                        if (line.indexOf("<resultMap id") > 0) {
                            resultMap_line = true;
                            sb.append(line);
                        } else if (resultMap_line) {
                            if (line.indexOf("<id ") > 0) {
                                keyProperty = line.substring(line.indexOf("property") + 10, line.indexOf("/") - 1);
                                resultMap_line = false;
                            }
                            sb.append(line);
                        } else if (line.indexOf("<insert id") > 0) {
                            sb.append(line.replace(">",
                                    " useGeneratedKeys=\"true\"" + " keyProperty=\"" + keyProperty + "\">"));
                        } else {
                            sb.append(line);
                        }
                        sb.append("\n");
                    }
                    log.debug("new content \n {} ", sb.toString());
                    br.close();

                    FileWriter fw = new FileWriter(baseXmlFile, false);
                    fw.write(sb.toString());
                    fw.close();
                    sb.delete(0, sb.length());
                }
            }
        }
    }
}

2.resources文件夹下:属性驼峰命名配置

wordroot.properties

// 类属性名称=数据库字段名称
liabilityModifyRate=LIABILITYMODIFYRATE
visitorsNumRate=VISITORSNUMRATE

二、MybatisPlus-代码生成器

3.5.3.1版本 MybatisPlus 代码生成器、
使用Freemarker引擎模板

pom.xml

<dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-generator</artifactId>
     <version>3.5.3.1</version>
</dependency>

java代码

package com.sinosoft.tmnch.api;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.sql.Types;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 3.5.3.1版本 MybatisPlus 代码生成器
 * 使用Freemarker引擎模板
 */
public class CodeGeneration {
    public static void main(String[] args) {
        // TODO 1.添加要生成的表名——List为空时,则生成所有表的相关类
        List<String> tableList = new ArrayList<>();
        tableList.add("log");
        tableList.add("tb_log_api");

        // TODO 2.父包名
        String parent = "com.itheima";
        // TODO 3.模块名
        String moduleName = "api.system";

        // TODO 4.数据库连接信息
        String url = "jdbc:mysql://localhost:3306/mp?&useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
        String username = "root";
        String password = "root";

        // TODO 5.xml文件的生成路径(一般不改)
        String xmlPath = System.getProperty("user.dir") + "/src/main/resources/mapper";

        // TODO 6.表名前缀
        ArrayList<String> tablePrefix = new ArrayList<>();
        tablePrefix.add("tb_");

        FastAutoGenerator.create(url, username, password)
                // 全局配置
                .globalConfig(builder -> {
                    builder.author("xxx") // 设置作者
                            // .enableSpringdoc()
                            .disableOpenDir() // 禁止完成后打开文件夹
                            .commentDate("yyyy-MM-dd HH:mm:ss") // 注释的时间格式
                            .dateType(DateType.TIME_PACK) // 数据库日期 与 实体类中日期类型 的映射关系
                            .enableSwagger() // 开启 swagger 模式
                            .outputDir(System.getProperty("user.dir") + "/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(parent) // 设置父包名
                            .moduleName(moduleName) // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, xmlPath)); // 设置mapperXml生成路径
                })
                // 策略配置
                .strategyConfig(builder -> builder.addInclude(tableList) // 设置需要生成的表名
                        .addTablePrefix(tablePrefix) // 设置过滤表前缀

                        // 4.1、Mapper策略配置
                        .mapperBuilder()
                        .superClass(BaseMapper.class) // 继承BaseMapper
                        .enableFileOverride() // 允许覆盖文件
                        .enableMapperAnnotation() // TODO弃用了??? @Mapper注解
                        .enableBaseResultMap() // ResultMap
                        .enableBaseColumnList() // sql片段
                        .formatMapperFileName("%sDao") // 生成的Dao名称
                        // .formatXmlFileName("%s") // 不注释Log.xml、注释后,LogMapper.xml

                        // 4.2、service 策略配置
                        .serviceBuilder()
                        .enableFileOverride() // 允许覆盖文件
                        .formatServiceFileName("%sService")
                        .formatServiceImplFileName("%sServiceImp")

                        // 4.3、实体类策略配置
                        .entityBuilder()
                        .enableActiveRecord() // 开启AR
                        .enableFileOverride() // 允许覆盖文件
                        .enableLombok() // lombok注解
                        .enableTableFieldAnnotation() // @TableField注解
                        .columnNaming(NamingStrategy.underline_to_camel) // 小驼峰
                        // .addTableFills(new Column("create_time", FieldFill.INSERT)) // 字段填充
                        // .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE)) // 字段填充
                        .idType(IdType.AUTO) // ID生成策略
                        .formatFileName("%sEntity") .build()// 格式化实体类名

                        // 4.4、Controller策略配置
                        .controllerBuilder()
                        .enableFileOverride() // 允许覆盖文件
                        .enableHyphenStyle() // controller上的映射路径上有小变化
                        .enableRestStyle() // Rest风格
                        .formatFileName("%sController")) // 格式化Controller名称

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值