This repository has been archived on 2025-06-28. You can view files and clone it, but cannot push or open issues or pull requests.
Files
vitepress-theme-blog-charle…/assets/courses_mybatis_02-MyBatis-Plus基础_05-代码生成器.md.hjpH5d8x.js

212 lines
65 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{_ as p}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as k,D as e,o as n,c as r,I as g,w as d,k as l,a as A,R as y,b as D,e as C}from"./chunks/framework.FVQzxbLi.js";import"./chunks/md5.RtphNWHi.js";const o="/assets/202102241306195.TV6AN9xt.png",c="/assets/202102241307200.Yy5AFT9k.png",B="/assets/202102241308500.-zFqTCWf.gif",F="/assets/202102241309600.Ul54s0C2.png",E="/assets/202102241310700.o3qtgG2J.png",u="/assets/202102241311800.6Dg4Tz-w.gif",w=JSON.parse('{"title":"代码生成器","description":"","frontmatter":{"title":"代码生成器","author":"查尔斯","date":"2021/02/24 22:34","categories":["MyBatis-Plus快速入门"],"tags":["MyBatis Plus","MyBatis","ORM框架"]},"headers":[],"relativePath":"courses/mybatis/02-MyBatis-Plus基础/05-代码生成器.md","filePath":"courses/mybatis/02-MyBatis-Plus基础/05-代码生成器.md","lastUpdated":1665050985000}'),m={name:"courses/mybatis/02-MyBatis-Plus基础/05-代码生成器.md"},f=l("h1",{id:"代码生成器",tabindex:"-1"},[A("代码生成器 "),l("a",{class:"header-anchor",href:"#代码生成器","aria-label":'Permalink to "代码生成器"'},"")],-1),b=y('<h2 id="前言" tabindex="-1">前言 <a class="header-anchor" href="#前言" aria-label="Permalink to &quot;前言&quot;"></a></h2><p><strong>C</strong> 做了程序员之后,你就会发现自己再也看不得一些繁琐重复的东西,尤其是写代码的时候。</p><p>“好麻烦!这样写工作效率太低了吧!”</p><p>“写这么多冗余代码干嘛?提出来不好吗?”</p><p>....</p><p>开玩笑的说,程序员这个岗位诞生之后,最终的目标就是 “取代同行,取悦自己,公司再取代你”。</p><p><img src="'+o+`" alt="202102241306195"></p><p>为了 “取悦” 自己(简化大量的重复工作量),各种自动化或生成工具应运而生,解决重复代码方面最为典型的就是代码生成器了。</p><p>本篇,笔者就主要带你认识一下 MP 自带的代码生成器。</p><h2 id="简介" tabindex="-1">简介 <a class="header-anchor" href="#简介" aria-label="Permalink to &quot;简介&quot;"></a></h2><div class="tip custom-block"><p class="custom-block-title">笔者说</p><p>MP 诞生的目的就是为了简化 MyBatis但简化后依然有些部分有重复性这时候可以靠 MP 提供的一个代码生成器AutoGenerator 来解决。</p><p>通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。[1]</p></div><h2 id="使用步骤" tabindex="-1">使用步骤 <a class="header-anchor" href="#使用步骤" aria-label="Permalink to &quot;使用步骤&quot;"></a></h2><p>为了测试 MP 的代码生成器,记得提前将之前项目备份一下,这样我们就可以清空掉原来项目代码,然后使用 MP 的代码生成器来对之前数据库进行代码生成了。</p><h3 id="添加依赖" tabindex="-1">添加依赖 <a class="header-anchor" href="#添加依赖" aria-label="Permalink to &quot;添加依赖&quot;"></a></h3><p>MP 从 <code>3.0.3</code> 之后移除了代码生成器与模板引擎的默认依赖[1],所以,当我们需要使用代码生成器时,需要先添加一下这两个依赖。</p><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">&lt;!-- 代码生成器 依赖 --&gt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">dependency</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> &lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">groupId</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;com.baomidou&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">groupId</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> &lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">artifactId</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;mybatis-plus-generator&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">artifactId</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> &lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">version</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;3.4.1&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">version</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">dependency</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">&lt;!-- 模板引擎 依赖 --&gt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">dependency</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> &lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">groupId</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;org.freemarker&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">groupId</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> &lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">artifactId</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;freemarker&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">artifactId</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> &lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">version</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;2.3.31&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">version</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">dependency</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">&gt;</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">笔者说</p><p>笔者这里选择的模板引擎是 freemarker它是 Apache 开源的一个知名模板技术。</p><p>另外MP 也支持 Velocity默认、Beetl你可以选择自己熟悉的模板引擎如果都不满足要求也可以采用自定义模板引擎。[1]</p></div><h3 id="创建入口类" tabindex="-1">创建入口类 <a class="header-anchor" href="#创建入口类" aria-label="Permalink to &quot;创建入口类&quot;"></a></h3><p>添加好依赖之后,创建一个生成器入口类,就可以开始使用 MP 的代码生成器了。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">/**</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * MyBatis Plus 代码生成器入口类</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * 执行 main 方法控制台输入模块表名回车自动生成对应项目目录中</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> *</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">@author</span><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> Charles7c</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">@since</span><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> 2021/1/28</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#F69D50;"> CodeGenerator</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> {</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> static</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> main</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">String</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[] </span><span style="--shiki-light:#E36209;--shiki-dark:#F69D50;">args</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">}</span></span></code></pre></div><h3 id="编写配置" tabindex="-1">编写配置 <a class="header-anchor" href="#编写配置" aria-label="Permalink to &quot;编写配置&quot;"></a></h3><p>MP 的代码生成器提供了大量的自定义配置参数供用户选择,能够满足绝大部分人的使用需求[1],接下来,我们在 <code>main</code> 方法中配置一下生成器。</p><p>第一步:初始化代码生成器。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 创建代码生成器对象</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">AutoGenerator</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> generator</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> AutoGenerator</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定模板引擎为FreeMarker如果你使用默认的引擎velocity则无需此配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setTemplateEngine</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> FreemarkerTemplateEngine</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">());</span></span></code></pre></div><p>第二步:指定全局配置。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 创建全局配置对象</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">GlobalConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> globalConfig</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> GlobalConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定生成文件的输出目录【默认 D 盘根目录】</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// System.getProperty(&quot;user.dir&quot;) 获取到的是当前项目的绝对路径</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 输出目录示例D:\\IdeaProjects\\mybatis-plus-demo\\src\\main\\java</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">globalConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setOutputDir</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(System.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">getProperty</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;user.dir&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">+</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;"> &quot;/src/main/java&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定开发人员</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">globalConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setAuthor</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;Charles7c&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定是否打开输出目录</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">globalConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setOpen</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;">false</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定全局配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setGlobalConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(globalConfig);</span></span></code></pre></div><p>第三步:指定包名配置,通过该配置,指定生成代码的包路径。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 创建包配置对象</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">PackageConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> packageConfig</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> PackageConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定父包名</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">packageConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setParent</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;com.example&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定包名配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setPackageInfo</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(packageConfig);</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">笔者说</p><p>仅指定父包名就可以MP 指定好了子包名。看看它的源码吧,实体类的包名默认是 <code>entity</code>,业务类的包名默认是 <code>service</code> ...</p></div><p><img src="`+c+`" alt="202102241307200"></p><p>第四步:指定数据源配置,通过该配置,指定需要生成代码的具体数据库。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 创建数据源配置对象</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">DataSourceConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> dataSourceConfig</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> DataSourceConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定数据源信息</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">dataSourceConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setUrl</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;jdbc:mysql://localhost:3306/mybatisplus_demodb?serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;useSSL=false&amp;characterEncoding=utf8&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">dataSourceConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setDriverName</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;com.mysql.cj.jdbc.Driver&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">dataSourceConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setUsername</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;root&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">dataSourceConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setPassword</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;root&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定数据源配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setDataSource</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(dataSourceConfig);</span></span></code></pre></div><p>第五步:指定策略配置,通过该配置,可指定需要生成哪些表或者排除哪些表。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 创建策略配置对象</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">StrategyConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> strategyConfig</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> StrategyConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定数据库表映射到实体的命名策略</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 下划线转驼峰命名underline_to_camel</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 不做任何改变原样输出no_change</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setNaming</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(NamingStrategy.underline_to_camel);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定数据库表字段映射到实体的命名策略</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setColumnNaming</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(NamingStrategy.underline_to_camel);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定实体类是否采用 lombok 注解</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setEntityLombokModel</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定生成的Controller类是否采用@RestController注解</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 默认false@Controller -&gt; true@RestController</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setRestControllerStyle</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定策略配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setStrategy</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(strategyConfig);</span></span></code></pre></div><p>第六步:执行生成。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 执行生成</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">execute</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span></code></pre></div><h3 id="测试生成" tabindex="-1">测试生成 <a class="header-anchor" href="#测试生成" aria-label="Permalink to &quot;测试生成&quot;"></a></h3><p><img src="`+B+'" alt="202102241308500"></p><h3 id="模块化生成" tabindex="-1">模块化生成 <a class="header-anchor" href="#模块化生成" aria-label="Permalink to &quot;模块化生成&quot;"></a></h3><p>上方的使用方式是直接基于所有数据库表进行全部生成,但是当我们的项目进行了模块拆分,这时候我们可以对指定模块的指定表单独生成。</p><p>拆分了模块的项目数据库表,示例如下:</p><p><img src="'+F+'" alt="202102241309600"></p><p>我们也模拟一下,将数据库表重命名为 <code>sys_user</code>。</p><p><img src="'+E+`" alt="202102241310700"></p><p>然后,我们改动一下第三步,添加模块名设置。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 创建包配置对象</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">PackageConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> packageConfig</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> PackageConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定父包名</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">packageConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setParent</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;com.example&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定父包下模块名例如用户模块user、角色模块role...</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 如果拆分输入模块则每个模块有自己的全套controller、service、dao...</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">packageConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setModuleName</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">scanner</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;模块名&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">));</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定包名配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setPackageInfo</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(packageConfig);</span></span></code></pre></div><p>再改动一下第五步,添加要进行代码生成的数据表设置及数据表前缀去除设置。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 创建策略配置对象</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">StrategyConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> strategyConfig</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> StrategyConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定数据库表映射到实体的命名策略</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 下划线转驼峰命名underline_to_camel</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 不做任何改变原样输出no_change</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setNaming</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(NamingStrategy.underline_to_camel);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定数据库表字段映射到实体的命名策略</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setColumnNaming</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(NamingStrategy.underline_to_camel);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定实体类是否采用 lombok 注解</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setEntityLombokModel</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定生成的Controller类是否采用@RestController注解</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 默认false@Controller -&gt; true@RestController</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setRestControllerStyle</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定需要包含的表名允许正则表达式与exclude二选一配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setInclude</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">scanner</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;表名,多个英文逗号分割&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">split</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;,&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">));</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定要去除的表前缀</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 如果表是按模块划分,例如:系统模块的用户表是 sys_user那么要去除的表前缀就是 sys_</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setTablePrefix</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(packageConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">getModuleName</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">+</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;"> &quot;_&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 指定策略配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setStrategy</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(strategyConfig);</span></span></code></pre></div><p>为了输入更加方便,我们可以定义一个 <code>scanner</code> 方法来动态输入。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">/**</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * &lt;p&gt;</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * 读取控制台内容</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * &lt;/p&gt;</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> static</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> String </span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">scanner</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(String tip) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> Scanner</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> scanner</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> Scanner</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(System.in);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> StringBuilder</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> help</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> StringBuilder</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> help.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">append</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;请输入&quot;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> tip </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">+</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;"> &quot;&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> System.out.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">println</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(help.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">toString</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">());</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> (scanner.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">hasNext</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">()) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> ipt</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> scanner.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">next</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> (StringUtils.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">isNotBlank</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(ipt)) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> ipt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> throw</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> MybatisPlusException</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;请输入正确的&quot;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> tip </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">+</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;"> &quot;&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">}</span></span></code></pre></div><p>测试一下效果吧。</p><p><img src="`+u+`" alt="202102241311800"></p><div class="tip custom-block"><p class="custom-block-title">笔者说</p><p>在策略配置中还可以通过 <code>setSuperXXClass(Class)</code> 系列方法对 Enity、Service、Controller 等设置自定义父类,这样生成的代码就直接会继承好指定类了。例如:<code>setSuperEntityClass()</code> 方法可以指定好 Entity 的父类,这样审计类信息就不用每个实体类里都来一份了,做数据填充设置也会更加方便。</p></div><h2 id="参考资料" tabindex="-1">参考资料 <a class="header-anchor" href="#参考资料" aria-label="Permalink to &quot;参考资料&quot;"></a></h2><p>[1]MyBatis Plus 代码生成器:<a href="https://baomidou.com/guide/generator.html" target="_blank" rel="noreferrer">https://baomidou.com/guide/generator.html</a></p><h2 id="后记" tabindex="-1">后记 <a class="header-anchor" href="#后记" aria-label="Permalink to &quot;后记&quot;"></a></h2><p><strong>C</strong> 最后在下方附上本篇的完整代码生成器配置代码,更多的配置你可以去看看 MP 官网代码生成器部分。其实所有的代码生成器都是那套思路,即模板 + 数据 + 模板引擎。后面抽时间,笔者也专门写一篇来介绍下常见的代码生成器实现思路,这样你也可以 “取悦” 一下你自己。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#F69D50;"> CodeGenerator</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> {</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> /**</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * 读取控制台内容</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> static</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> String </span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">scanner</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(String </span><span style="--shiki-light:#E36209;--shiki-dark:#F69D50;">tip</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> Scanner</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> scanner</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> Scanner</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(System.in);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> StringBuilder</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> help</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> StringBuilder</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> help.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">append</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;请输入&quot;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> tip </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">+</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;"> &quot;&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> System.out.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">println</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(help.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">toString</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">());</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> (scanner.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">hasNext</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">()) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> ipt</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> scanner.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">next</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> (StringUtils.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">isNotBlank</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(ipt)) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> ipt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> throw</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> MybatisPlusException</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;请输入正确的&quot;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> tip </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">+</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;"> &quot;&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> static</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> main</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">String</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[] </span><span style="--shiki-light:#E36209;--shiki-dark:#F69D50;">args</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 1.初始化代码生成器</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 创建代码生成器对象</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> AutoGenerator</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> generator</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> AutoGenerator</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定模板引擎为FreeMarker如果你使用默认的引擎velocity则无需此配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setTemplateEngine</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> FreemarkerTemplateEngine</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">());</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 2.指定全局配置</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 创建全局配置对象</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> GlobalConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> globalConfig</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> GlobalConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定生成文件的输出目录【默认 D 盘根目录】</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // System.getProperty(&quot;user.dir&quot;) 获取到的是当前项目的绝对路径</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 输出目录示例D:\\IdeaProjects\\mybatis-plus-demo\\src\\main\\java</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> globalConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setOutputDir</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(System.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">getProperty</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;user.dir&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">+</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;"> &quot;/src/main/java&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定开发人员</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> globalConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setAuthor</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;Charles7c&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定是否打开输出目录</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> globalConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setOpen</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;">false</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定全局配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setGlobalConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(globalConfig);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 3.指定包名配置</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 创建包配置对象</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> PackageConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> packageConfig</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> PackageConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定父包名</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> packageConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setParent</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;com.example&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定父包下模块名例如用户模块user、角色模块role...</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 如果拆分输入模块则每个模块有自己的全套controller、service、dao...</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> packageConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setModuleName</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">scanner</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;模块名&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">));</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定包名配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setPackageInfo</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(packageConfig);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 4.指定数据源配置</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 创建数据源配置对象</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> DataSourceConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> dataSourceConfig</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> DataSourceConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定数据源信息</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> dataSourceConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setUrl</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;jdbc:mysql://localhost:3306/mybatisplus_demodb?serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;useSSL=false&amp;characterEncoding=utf8&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> dataSourceConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setDriverName</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;com.mysql.cj.jdbc.Driver&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> dataSourceConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setUsername</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;root&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> dataSourceConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setPassword</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;root&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定数据源配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setDataSource</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(dataSourceConfig);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 5.指定策略配置</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 创建策略配置对象</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> StrategyConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> strategyConfig</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> StrategyConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定数据库表映射到实体的命名策略</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 下划线转驼峰命名underline_to_camel</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 不做任何改变原样输出no_change</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setNaming</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(NamingStrategy.underline_to_camel);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定数据库表字段映射到实体的命名策略</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setColumnNaming</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(NamingStrategy.underline_to_camel);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定实体类是否采用 lombok 注解</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setEntityLombokModel</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定生成的Controller类是否采用@RestController注解</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 默认false@Controller -&gt; true@RestController</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setRestControllerStyle</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定需要包含的表名允许正则表达式与exclude二选一配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setInclude</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">scanner</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;表名,多个英文逗号分割&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">split</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">&quot;,&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">));</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定要去除的表前缀</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 如果表是按模块划分,例如:系统模块的用户表是 sys_user那么要去除的表前缀就是 sys_</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> strategyConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setTablePrefix</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(packageConfig.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">getModuleName</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">+</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;"> &quot;_&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 指定策略配置</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">setStrategy</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(strategyConfig);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 执行生成</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> generator.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">execute</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">}</span></span></code></pre></div><div class="info custom-block"><p class="custom-block-title">笔者说</p><p>对于技术的学习,笔者一贯遵循的步骤是:先用最最简单的 demo 让它跑起来,然后学学它的最最常用 API 和 配置让自己能用起来,最后熟练使用的基础上,在空闲时尝试阅读它的源码让自己能够洞彻它的运行机制,部分问题出现的原因,同时借鉴这些技术实现来提升自己的代码高度。</p><p>所以在笔者的文章中,前期基本都是小白文,仅仅穿插很少量的源码研究。当然等小白文更新多了,你们还依然喜欢,后期会不定时专门对部分技术的源码进行解析。</p></div>`,59);function v(s,q,_,S,P,M){const t=p,h=e("ClientOnly");return n(),r("div",null,[f,g(h,null,{default:d(()=>{var i,a;return[(((i=s.$frontmatter)==null?void 0:i.aside)??!0)&&(((a=s.$frontmatter)==null?void 0:a.showArticleMetadata)??!0)?(n(),D(t,{key:0,article:s.$frontmatter},null,8,["article"])):C("",!0)]}),_:1}),b])}const I=k(m,[["render",v]]);export{w as __pageData,I as default};