国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于Velocity開發(fā)代碼生成器

這篇具有很好參考價(jià)值的文章主要介紹了基于Velocity開發(fā)代碼生成器。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、引言

在項(xiàng)目開發(fā)中,我們有碰到大量的簡單、重復(fù)的增刪改查需求,通過閱讀若依框架https://github.com/yangzongzhuan/RuoYi?的代碼生成器實(shí)現(xiàn),結(jié)合我項(xiàng)目所用的技術(shù)棧,開發(fā)出本項(xiàng)目的代碼生成器。

二、Velocity?簡單介紹

1、Velocity是一個(gè)基于Java的模板引擎,我們可以往Context容器中填值,在vm文件中使用模板語言(Velocity Template Language)獲取變量的值,生成一套通用的模板代碼。

2、引入依賴:

        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>


        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-tools</artifactId>
            <version>2.0</version>
        </dependency>

3、語法示例:

獲取Context中的ClassName值:${ClassName}

判斷:#if($table.crud || $table.sub)? ? ?

遍歷:#foreach ($column in $columns)

結(jié)束:#end

/**
 * ${functionName}對象 ${tableName}
 * 
 * @author ${author}
 * @date ${datetime}
 */
#if($table.crud || $table.sub)
#set($Entity="BaseEntity")
#elseif($table.tree)
#set($Entity="TreeEntity")
#end
@Data
public class ${ClassName} extends BasicEntity
{
    private static final long serialVersionUID = 1L;

#foreach ($column in $columns)
#if(!$table.isSuperColumn($column.javaField))
    /** $column.columnComment */
#if($column.list)
#set($parentheseIndex=$column.columnComment.indexOf("("))
#if($parentheseIndex != -1)
#set($comment=$column.columnComment.substring(0, $parentheseIndex))
#else
#set($comment=$column.columnComment)
#end
#if($parentheseIndex != -1)
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
#elseif($column.javaType == 'Date')
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
#else
    @Excel(name = "${comment}")
#end
#end
    private $column.javaType $column.javaField;

#end
#end
#if($table.sub)
    /** $table.subTable.functionName信息 */
    private List<${subClassName}> ${subclassName}List;

#end

}

三、若依代碼生成器核心源碼閱讀

前置:根據(jù)業(yè)務(wù)代碼和模板語言編寫代碼模板

1、獲取數(shù)據(jù)庫表列表,查詢?information_schema.tables 表

select table_name, table_comment, create_time, update_time
from information_schema.tables
where table_schema = (select database())

2、初始化表結(jié)構(gòu)信息,填充代碼生成器基本信息,插入到 gen_table表

public static void initTable(GenTable genTable, String operName)
{
        genTable.setClassName(convertClassName(genTable.getTableName()));
        genTable.setPackageName(GenConfig.getPackageName());
        genTable.setModuleName(getModuleName(GenConfig.getPackageName()));
        genTable.setBusinessName(getBusinessName(genTable.getTableName()));
        genTable.setFunctionName(replaceText(genTable.getTableComment()));
        genTable.setFunctionAuthor(GenConfig.getAuthor());
        genTable.setCreateBy(operName);
}

3、初始化表的列信息:查詢 information_schema.`COLUMNS`表,插入到 gen_table_column表

select table_name, column_name, column_type, data_type, column_comment, column_key
from information_schema.`COLUMNS`
where table_schema = 'smart_ca' and table_name = '表名'

4、初始化vm,加載模板

 public static void initVelocity()
    {
        Properties p = new Properties();
        try {
            // 加載classpath目錄下的vm文件
            p.setProperty("resource.loader.file.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
            // 定義字符集
            p.setProperty(Velocity.INPUT_ENCODING, Constants.UTF8);
            // 初始化Velocity引擎,指定配置Properties
            Velocity.init(p);
        }
        catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

5、給容器Context中設(shè)置模板變量(重要),例:

        VelocityContext velocityContext = new VelocityContext();
        velocityContext.put("tplCategory", genTable.getTplCategory());
        velocityContext.put("tableName", genTable.getTableName());
        velocityContext.put("ClassName", genTable.getClassName());
        velocityContext.put("moduleName", genTable.getModuleName());

6、設(shè)置模板

        List<String> templates = new ArrayList<String>();
        templates.add("vm/java/domain.java.vm");
        templates.add("vm/java/mapper.java.vm");
        templates.add("vm/java/service.java.vm");
        templates.add("vm/java/serviceImpl.java.vm");
        templates.add("vm/java/controller.java.vm");

7、渲染模板,生成至指定位置

// 渲染模板
StringWriter sw = new StringWriter();
Template tpl = Velocity.getTemplate(template, Constants.UTF8);
tpl.merge(context, sw);
String path = getGenPath(table, template);
FileUtils.writeStringToFile(new File(path), sw.toString(), CharsetKit.UTF_8);

四、結(jié)合項(xiàng)目業(yè)務(wù)開發(fā)代碼生成器

1、梳理項(xiàng)目通用代碼(重要)

和團(tuán)隊(duì)成員一同梳理出通用的代碼,我們是要一鍵生成前后端代碼,直接實(shí)現(xiàn)增刪改查。模板代碼必須是經(jīng)過前后端同學(xué)一起驗(yàn)證,避免反復(fù)修改。

2、結(jié)合自己的業(yè)務(wù),定義所有需要的變量,并且使用velocity模板語法,使用變量替換代碼。

3、編寫操作后臺(tái),將模板中需要用到的變量,存儲(chǔ)到gen_table,gen_table_column表,以便整個(gè)流程使用。

基于Velocity開發(fā)代碼生成器,筆記,java,velocity,spring boot

4、開發(fā)者點(diǎn)擊代碼生成時(shí),查詢gen_table, gen_table_column表中的數(shù)據(jù),設(shè)置模板變量到容器Context中,這邊要注意把之前自定義的變量全部 put

5、設(shè)置代碼生成路徑,我們的代碼默認(rèn)生成在項(xiàng)目根路徑的 generator目錄。

基于Velocity開發(fā)代碼生成器,筆記,java,velocity,spring boot文章來源地址http://www.zghlxwxcb.cn/news/detail-613682.html

到了這里,關(guān)于基于Velocity開發(fā)代碼生成器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MyBatis-Plus 可視化代碼生成器來啦,讓你的開發(fā)效率大大提速?。? decoding=

    MyBatis-Plus 可視化代碼生成器來啦,讓你的開發(fā)效率大大提速!!

    在基于Mybatis的開發(fā)模式中,很多開發(fā)者還會(huì)選擇Mybatis-Plus來輔助功能開發(fā),以此提高開發(fā)的效率。雖然Mybatis也有代碼生成的工具,但Mybatis-Plus由于在Mybatis基礎(chǔ)上做了一些調(diào)整,因此,常規(guī)的生成工具生成的代碼還有一些不太符合預(yù)期。而且對于多數(shù)據(jù)庫的支持不是很好。

    2024年02月05日
    瀏覽(27)
  • Java:mybatis-plus-generator-ui 基于Mybatis-Plus的代碼自助生成器

    Java:mybatis-plus-generator-ui 基于Mybatis-Plus的代碼自助生成器

    引用官方文檔上的簡介: 提供交互式的Web UI用于生成兼容mybatis-plus框架的相關(guān)功能代碼,包括Entity,Mapper,Mapper.xml,Service,Controller等 ,可以自定義模板以及各類輸出參數(shù),也可通過SQL查詢語句直接生成代碼。 文檔 github: https://github.com/davidfantasy/mybatis-plus-generator-ui gitee: https://g

    2024年02月10日
    瀏覽(24)
  • 淘寶無痕下單生成器一拖多入口生成器(附api生成接口以代碼)

    淘寶無痕下單生成器一拖多入口生成器(附api生成接口以代碼)

    淘寶無痕下單生成器的用途是:通過無痕下單生成器生成的二維碼,用戶通過掃碼直接無痕下單的,電商后臺(tái)只顯示成交,但是沒有路徑,什么都沒有,沒有痕跡,即使通過淘寶生意參謀流量路徑、訪客人數(shù)等數(shù)據(jù)都無法顯示。可快速帶動(dòng)搜索權(quán)重,獲得

    2024年02月12日
    瀏覽(179)
  • DAY08_MyBatisPlus——入門案例&標(biāo)準(zhǔn)數(shù)據(jù)層開發(fā)CRUD-Lombok-分頁功能&DQL編程控制&DML編程控制&樂觀鎖&快速開發(fā)-代碼生成器

    DAY08_MyBatisPlus——入門案例&標(biāo)準(zhǔn)數(shù)據(jù)層開發(fā)CRUD-Lombok-分頁功能&DQL編程控制&DML編程控制&樂觀鎖&快速開發(fā)-代碼生成器

    問題導(dǎo)入 MyBatisPlus環(huán)境搭建的步驟? 1.1 SpringBoot整合MyBatisPlus入門程序 ①:創(chuàng)建新模塊,選擇Spring初始化,并配置模塊相關(guān)基礎(chǔ)信息 ②:選擇當(dāng)前模塊需要使用的技術(shù)集(僅保留JDBC) ③:手動(dòng)添加MyBatisPlus起步依賴 注意事項(xiàng)1:由于mp并未被收錄到idea的系統(tǒng)內(nèi)置配置,無法直

    2024年02月09日
    瀏覽(25)
  • MyBatisPlus代碼生成器使用

    MyBatisPlus代碼生成器使用

    無侵入 :只做增強(qiáng)不做改變,引入它不會(huì)對現(xiàn)有工程產(chǎn)生影響,如絲般順滑 損耗小 :啟動(dòng)即會(huì)自動(dòng)注入基本 CURD,性能基本無損耗,直接面向?qū)ο蟛僮?強(qiáng)大的 CRUD 操作 :內(nèi)置通用 Mapper、通用 Service,僅僅通過少量配置即可實(shí)現(xiàn)單表大部分 CRUD 操作,更有強(qiáng)大的條件構(gòu)造器,

    2024年02月03日
    瀏覽(96)
  • css在線代碼生成器

    css在線代碼生成器

    這里收集了許多有意思的css效果在線代碼生成器適合每一位前端開發(fā)者 網(wǎng)格生成器https://cssgrid-generator.netlify.app/ CSS Grid Generator可幫助開發(fā)人員使用CSS Grid創(chuàng)建復(fù)雜的網(wǎng)格布局。網(wǎng)格布局是創(chuàng)建Web頁面的靈活和響應(yīng)式設(shè)計(jì)的強(qiáng)大方式。 布局生成器https://layout.bradwoods.io/ CSS布局生

    2024年02月14日
    瀏覽(100)
  • 源生成器:根據(jù)需要自動(dòng)生成機(jī)械重復(fù)代碼

    本文概述了利用.NET Compiler Platform(“Roslyn”)SDK 附帶的 源生成器 (Source Generator)自動(dòng)生成機(jī)械重復(fù)的代碼。關(guān)于這部分的基礎(chǔ)入門知識(shí)可以在MSDN [1] 學(xué)到。 本文 默認(rèn) 已經(jīng)有一個(gè)解決方案,包含兩個(gè)項(xiàng)目。一個(gè)是普通C#項(xiàng)目,依賴于另一個(gè)源生成器項(xiàng)目。 此處以 Dependenc

    2024年02月01日
    瀏覽(94)
  • Java-代碼生成器的實(shí)現(xiàn)

    Java-代碼生成器的實(shí)現(xiàn)

    最近看了一個(gè)開源的項(xiàng)目, jfinal-layui ,然后這個(gè)項(xiàng)目里面有一個(gè) 代碼生成器 的功能 之前雖然有用過代碼生成器,但是從來沒有看過相關(guān)的源碼,所以就研究了一下,個(gè)人感覺這個(gè)項(xiàng)目的代碼生成器還是蠻好的,能夠根據(jù)指定的數(shù)據(jù)庫和表生成前后端的代碼,不過這個(gè)項(xiàng)目

    2024年02月02日
    瀏覽(94)
  • C# 源代碼生成器

    C# 源代碼生成器

    源生成器 是由 .NET Compiler Platform(“Roslyn”) SDK 附帶。 通過源生成器,C# 開發(fā)人員可以在編譯用戶代碼時(shí)檢查用戶代碼。 生成器可以動(dòng)態(tài)創(chuàng)建新的 C# 源文件,這些文件將添加到用戶的編譯中。 這樣,代碼可以在編譯期間運(yùn)行。 它會(huì)檢查你的程序以生成與其余代碼一起編譯

    2024年02月04日
    瀏覽(88)
  • 【若依】-代碼生成器-微服務(wù)版本

    【若依】-代碼生成器-微服務(wù)版本

    代碼生成器可以快速的構(gòu)建單表的CRUD操作,甚至提供了前端,可謂良心 說明:我默認(rèn)你已經(jīng)部署了微服務(wù)版本的若依項(xiàng)目,并將前后端已經(jīng)運(yùn)行 下面的內(nèi)容是關(guān)于-單表CRUD-的代碼生成器使用步驟 這里的表可以直接從若依的官網(wǎng)拿,改表名就可以,改一下表名,導(dǎo)入數(shù)據(jù)庫

    2024年02月04日
    瀏覽(94)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包