当前位置:

首页 > 编程开发 > MyBatisPlus代码生成器实践(自己二次封装)

MyBatisPlus代码生成器实践(自己二次封装)

前提准备 在正式开始之前,先把需要的依赖都摆到台面上。代码生成器离不开MyBatis Plus Generator核心,再加上数据库驱动、模板引擎和Swagger注解支持——这些缺一不可。直接复制下面这份Ma ven依赖,省得自己拼拼凑凑出问题。 com.baomidou mybatis-plus-

本文目录

    前提准备

    在正式开始之前,先把需要的依赖都摆到台面上。代码生成器离不开MyBatis Plus Generator核心,再加上数据库驱动、模板引擎和Swagger注解支持——这些缺一不可。直接复制下面这份Ma ven依赖,省得自己拼拼凑凑出问题。

    
        com.baomidou
        mybatis-plus-generator
        3.4.1
    
    
        mysql
        mysql-connector-ja va
        runtime
    
    
        org.apache.velocity
        velocity-engine-core
        2.0
    
    
        io.springfox
        springfox-boot-starter
        3.0.0
    
    
        org.projectlombok
        lombok
    

    顺手提醒一句:Lombok和Swagger3是业务代码的标配,如果项目里已经有了,可以去掉对应依赖,不然会冲突。Velocity模板引擎是默认生成器用的,如果换了Freemarker,记得替换依赖。

    核心配置

    前提说明

    配置其实很单纯:把核心参数填进去,代码生成器就能按预期吐出代码。下面这张图展示了整体工作流——从数据库表到实体、Mapper、Service、Controller一条龙产出。

    MyBatisPlus代码生成器实践(自己二次封装)

    代码配置

    官方文档永远是最准确的参考来源,尤其当你想微调某个生成细节时。建议先快速过一遍baomidou的配置手册:https://mp.baomidou.com/config/generator-config.html#%E6%95%B0%E6%8D%AE%E6%BA%90-datasourceconfig-%E9%85%8D%E7%BD%AE

    直接贴出一份封装好的生成器代码,所有关键配置都集中在了静态变量里,改起来一目了然:

    package com.changlu.demo;
    
    import com.baomidou.mybatisplus.generator.AutoGenerator;
    import com.baomidou.mybatisplus.generator.config.*;
    import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
    import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    
    /**
     * @author ChangLu
     * @date 2021/09/22 16:38
     * @Desc 封装之后的代码生成器,仅需填写几个核心配置即可
     * 
     *  核心依赖
        *         
        *      com.baomidou       
        *      mybatis-plus-generator       
        *      3.4.1       
        *         
        *         
        *      mysql       
        *      mysql-connector-ja va       
        *      runtime       
        *         
        *         
        *      org.apache.velocity       
        *      velocity-engine-core       
        *      2.0       
        *         
     *  其他依赖如:lombok、swagger3
     **/
    public class MyCodeGenerator {
    
        //核心配置
        private static String targetDatabaseName = "dj.svublog.rdb";//目标数据库名
        private static String username = "root";//用户名
        private static String password = "123456";//密码
        private static String[] tihuan_table_prefix = {"sys_"}; //表替换前缀,可多个
        private static String[] paichu_table_name = {"sys_member_role","sys_role_permission"}; //排除指定表,可多个
        private static String referenceModule = "com.changlu.demo"; //当前的引用模块,如com.changlu.demo
        private static String targetModule = "test"; //输出指定文件目录的包名 如:test
    
        public static void main(String[] args) {
            // 代码生成器
            AutoGenerator mpg = new AutoGenerator();
    
            //全局配置(若是多模块的话传入对应模块的工程名!)
            mpg.setGlobalConfig(createGlobalConfig(null));
    //        mpg.setGlobalConfig(createGlobalConfig(common));
            //数据库源
            mpg.setDataSource(createDataSourceConfig());
            //包配置
            mpg.setPackageInfo(createPackageConfig());
            //策略配置
            mpg.setStrategy(createStrategyConfig());
            //默认Velocity模板生成
    //        mpg.setTemplateEngine(new FreemarkerTemplateEngine());  //其他模板Freemarker
    
            //执行操作
            mpg.execute();
        }
        // 1、全局配置  若是多模块,传入指定父模块名称
        private static GlobalConfig createGlobalConfig(String parentModuleName){
            GlobalConfig gc = new GlobalConfig();
            String projectPath = System.getProperty("user.dir");//获取到当前工程路径地址,若是多模块情况就会有问题
            if(parentModuleName != null){
                projectPath = projectPath + "/"+parentModuleName+ "/src/main/ja va";
            }else{
                projectPath = projectPath + "/src/main/ja va";
            }
            gc.setOutputDir(projectPath)
                    .setAuthor("ChangLu") //设置作者
                    .setOpen(false) //不打开输出目录
                    .setSwagger2(true) //添加swagger2注解
                    .setBaseResultMap(true) //每个mapper文件中都生成通用结果映射集
                    .setFileOverride(true) //下次生成文件时进行覆盖(不设置的话当进行第二次生成就会在同一个目录产生相同的文件)
                    .setEntityName("%sModel") //生成实体类文件名,如:%sModel 生成 UserModel
                    .setMapperName("%sMapper") //生成dao,这里我们配置生成如 UserMapper
                    .setMapperName("%sMapper") //生成mapper.xml文件,这里生成如 UserMapper.xml
                    .setServiceName("%sService") //生成service接口
                    .setServiceImplName("%sServiceImpl");//生成service实现类
            return gc;
        }
    
        // 2、数据库源
        private static DataSourceConfig createDataSourceConfig(){
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setUrl("jdbc:mysql://127.0.0.1:3306/+"+targetDatabaseName+"+?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai")
                .setDriverName("com.mysql.cj.jdbc.Driver")
                .setUsername(username)
                .setPassword(password);
            //转换类型  LocalDateTime=>Date
            dsc.setTypeConvert((globalConfig, fieldType) -> {
                String t = fieldType.toLowerCase();
                if(t.contains("datetime")){   //若是匹配到数据库类型为"datetime",就返回Date类型(转为Ja va的)
                    return DbColumnType.DATE;
                }
                //其它字段采用默认转换(非mysql数据库可以使用其它默认的数据库转换器)
                return new MySqlTypeConvert().processTypeConvert(globalConfig,fieldType);
            });
            return dsc;
        }
    
        //3、包配置
        private static PackageConfig createPackageConfig(){
            PackageConfig pc = new PackageConfig();
            pc.setModuleName(targetModule) //生成的模块名,也就是生成目标指定文件名的路径下
              .setParent(referenceModule); //父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
            return pc;
        }
    
        //4、策略配置
        private static StrategyConfig createStrategyConfig(){
            StrategyConfig strategy = new StrategyConfig();
            strategy.setNaming(NamingStrategy.underline_to_camel) //表名生成策略:下划线转驼峰,如pms_pro=>PmsPro
                    .setColumnNaming(NamingStrategy.underline_to_camel) //字段名生成策略,同上,如last_name=>lastName
                    .setEntityLombokModel(true) //支持lombok注解
                    .setTablePrefix(tihuan_table_prefix) //设置表的替换前缀:这里就是起到过滤作用
                    .setEntityTableFieldAnnotationEnable(true) //生成表、字段映射注解
                    .setExclude(paichu_table_name); //排除指定表
            return strategy;
        }
    }
    

    MyBatisPlus代码生成器实践(自己二次封装)

    生成的Mapper XML文件默认会放在resource/mapper下,Spring Boot会自动扫描,不用额外配置。如果想把XML放到其他位置,记得在配置中指定路径或者在application.yml里补充spring-boot-mapper的扫描。

    总结

    这一套二次封装的核心思路就是把易变的参数拎到顶部,稳定的流水线逻辑藏进私有方法里。实际项目落地时,你只需要改改数据库名、表前缀、排除表这些业务相关项,剩下的交给生成器自动跑。如果能结合多模块项目进一步抽离公共配置,就能做到一次封装、多项目复用——这才是代码生成器该有的生产力。不过话说回来,官方文档永远是终极参考,遇到边界情况时翻一翻,比自己猜要靠谱得多。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    联想 Tab Plus Gen 2 平板海外开售:12.1 英寸屏幕、JBL 九单元扬声器
    联想 Tab Plus Gen 2 平板海外开售:12.1 英寸屏幕、JBL 九单元扬声器

    联想TabPlusGen2海外上市,12.1英寸2.5K120HzIPS屏,天玑7400芯片,后盖集成JBL九单元扬声器及杜比全景声,圆形支架可自立,内置10200mAh电池+45W快充,预装Android16,8+128GB约3367元。

    酷态科6月24日推出神秘新品,有望为“CP模块风扇Plus”底座
    酷态科6月24日推出神秘新品,有望为“CP模块风扇Plus”底座

    酷态科6月24日将推出CP模块风扇Plus磁吸底座,通过Power-Pin接口使风扇支持充放电。风扇搭载30000RPM无刷电机,风速11m/s,内置双5000mAh电池,续航37小时,支持33W快充。

    酷态科官宣 6 月 24 日推出神秘新品,有望为“CP 模块风扇 Plus”桌面底座
    酷态科官宣 6 月 24 日推出神秘新品,有望为“CP 模块风扇 Plus”桌面底座

    酷态科6月24日将推出神秘新品,有望为CP模块风扇Plus的桌面底座。该风扇采用30000RPM电机,风速达11m/s,内置两块5000mAh电池,续航37小时,支持充放电及主流快充协议。新品或使风扇兼具吹风与充电功能。

    首创“证据锚定”技术,百川智能发布 M3 Plus
    首创“证据锚定”技术,百川智能发布 M3 Plus

    百川智能发布医疗大模型Baichuan-M3Plus,事实性幻觉率降至2.6%,创下全球最低纪录。首创“证据锚定”技术,实现医学结论可验证、可追溯。多项国际评测中超越GPT-5.2等领先模型,API调用成本较前代下降70%,性能表现卓越,堪称行业里程碑。

    联想Tab Plus 2代发布:9扬声器+10200mAh大电池
    联想Tab Plus 2代发布:9扬声器+10200mAh大电池

    联想TabPlus2代在韩国发布,搭载联发科天玑7400芯片,12.1英寸120Hz600尼特屏幕,9个JBL扬声器支持杜比全景声和蓝牙音箱模式。内置10200mAh电池,预装安卓16,承诺升级至安卓18。配备联想AI实时转写、智能阅读和AI笔记等功能。

    戴尔推出2026款灵越Plus 16英寸笔记本,7004元起
    戴尔推出2026款灵越Plus 16英寸笔记本,7004元起

    全新戴尔2026款灵越Plus16英寸笔记本正式发布,其搭载酷睿Ultra5-225U处理器,性能强劲,起售价为7004元,可享受国家补贴后最低仅需5698元。机身重1.94千克,配备1920×1200分辨率60HzIPS屏幕,接口含雷电4、HDMI2.1和RJ45网口,且扩展性强,非常适合办公与学习。

    券后184.3元,酷态科CP模块风扇Plus曜石黑配色开售
    券后184.3元,酷态科CP模块风扇Plus曜石黑配色开售

    酷态科今天正式开售了CP模块风扇Plus的「曜石黑」版本,定价199元。电商平台上的券后价格大概在184.3元,有兴趣的可以留意一下。 这款新品最大的亮点就是模块化可扩展设计,内部搭载一颗30000 RPM的新一代高速三相无刷电机,技术原理和高速吹风机用的电机类似。实测风速最高能到11m/s,配合T

    券后 184.3 元,酷态科 CP 模块风扇 Plus 曜石黑配色开售
    券后 184.3 元,酷态科 CP 模块风扇 Plus 曜石黑配色开售

    酷态科CP模块风扇Plus曜石黑配色正式开售,到手价仅184.3元。搭载30000RPM高速三相无刷电机与涡流增压技术,最大风速可达11m/s。内置两块5000mAh电池,续航时间长达37小时,支持33W输出及多种快充协议,还可当作移动电源使用。

    中兴畅行70 Plus手机发售:展锐T9100 + 8G + 256G售2099元
    中兴畅行70 Plus手机发售:展锐T9100 + 8G + 256G售2099元

    中兴畅行70Plus已正式发售,定价为两千零九十九元,搭载了展锐T9100处理器、8GB运存与256GB存储。配备了6.75英寸120Hz高刷新率LCD打孔屏,内置了6050mAh大容量电池并支持45W快充,后置了一千三百万像素主摄,还提供了AI键、红外遥控及无网通信功能。

    如何使用SQLPlus进行数据库管理
    如何使用SQLPlus进行数据库管理

    SQLPlus 是 Oracle 数据库的一个命令行工具,用于执行 SQL 查询、PL/SQL 程序以及管理数据库。以下是一些基本的 SQLPlus 命令和用法,用于数据库管理:开启SQLPlus:打开命令行界面(在Windows系统上为CMD或PowerShell,在Unix/Linux系统上为T

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。