当前位置: 首页 > article >正文

若依代码生成的隐藏技巧:如何自定义生成模板实现个性化CRUD页面

若依代码生成器深度定制从模板修改到个性化CRUD实战在快速迭代的企业级应用开发中若依框架的代码生成器无疑是提升效率的利器。但大多数开发者仅停留在基础使用层面未能充分挖掘其定制化潜力。本文将揭示如何通过修改Velocity模板实现高度个性化的CRUD页面满足复杂业务场景需求。1. 理解若依代码生成器的核心机制若依的代码生成器本质上是一个基于Velocity模板引擎的元编程工具。其工作流程可分为三个阶段元数据采集通过解析数据库表结构information_schema获取字段名、类型、注释等信息上下文构建将元数据转换为Velocity模板引擎可处理的变量模型模板渲染使用预设的.vm模板文件生成最终代码关键目录结构说明ruoyi-generator ├── src/main/resources │ ├── templates # Velocity模板目录 │ │ ├── vm │ │ │ ├── java # 后端代码模板 │ │ │ │ ├── controller.java.vm │ │ │ │ ├── service.java.vm │ │ │ │ └── ... │ │ │ ├── xml # MyBatis映射文件模板 │ │ │ └── vue # 前端代码模板 │ └── generator.yml # 生成器配置2. 前端模板定制实战2.1 修改列表页表格样式找到ruoyi-generator/src/main/resources/templates/vm/vue/index.vue.vm定位到表格渲染部分el-table :datadataList selection-changehandleSelectionChange :row-keygetRowKeys #foreach($column in $columns) #set($dictType$column.dictType) el-table-column prop${column.javaField} label${column.columnComment} #if($column.htmlType datetime) width180 #end #if($dictType ! ) template #defaultscope dict-tag :optionsdict.type.${dictType} :valuescope.row.${column.javaField}/ /template #end /el-table-column #end /el-table定制示例添加固定列和斑马纹效果el-table :datadataList stylewidth: 100% stripe border v-loadingloading sort-changehandleSortChange el-table-column typeindex width60 fixedleft label序号 /el-table-column !-- 原有列循环 -- /el-table2.2 自定义表单控件类型在编辑模板form.vue.vm中可以扩展更多表单控件类型#foreach($column in $columns) #if($column.insert || $column.edit) #set($field$column.javaField) #if($column.htmlType select $column.dictType ! ) el-form-item label${column.columnComment} prop${field} el-select v-modelform.${field} placeholder请选择${column.columnComment} el-option v-fordict in dict.type.${column.dictType} :keydict.value :labeldict.label :valuedict.value / /el-select /el-form-item #elseif($column.htmlType upload) !-- 自定义上传控件 -- el-form-item label${column.columnComment} el-upload action/common/upload :on-successhandle${field}Success :before-uploadbefore${field}Upload el-button typeprimary点击上传/el-button /el-upload /el-form-item #end #end #end3. 后端模板深度定制3.1 增强Controller层功能修改controller.java.vm模板添加审计日志和权限控制Log(title ${functionName}, businessType BusinessType.${businessType}) PreAuthorize(ss.hasPermi(${permissionPrefix}:${businessName}:${businessType})) PostMapping(/${businessName}) public AjaxResult add(Validated RequestBody ${ClassName} ${className}) { // 审计字段自动填充 ${className}.setCreateBy(SecurityUtils.getUsername()); ${className}.setCreateTime(DateUtils.getNowDate()); return toAjax(${className}Service.insert${ClassName}(${className})); }3.2 自定义Service逻辑在serviceImpl.java.vm中增加业务校验逻辑Override public int update${ClassName}(${ClassName} ${className}) { // 自定义业务校验 ${ClassName} existing ${className}Mapper.select${ClassName}ById(${className}.get${pkColumn.capJavaField}()); if (existing null) { throw new ServiceException(${functionName}不存在); } // 审计字段 ${className}.setUpdateBy(SecurityUtils.getUsername()); ${className}.setUpdateTime(DateUtils.getNowDate()); return ${className}Mapper.update${ClassName}(${className}); }4. 高级模板技巧4.1 动态条件查询增强改造Mapper模板实现灵活查询!-- 在mapper.xml.vm中 -- select idselect${ClassName}List parameterType${ClassName} resultMap${ClassName}Result include refidselect${ClassName}Vo/ where #foreach($column in $columns) #set($field$column.javaField) #if($column.query) #set($queryType$column.queryType) #set($javaType$column.javaType) #if($queryType EQ) if test$field ! null #if($javaType String) and $field.trim() ! #end AND $column.columnName #{$field}/if #elseif($queryType LIKE) if test$field ! null and $field ! AND $column.columnName LIKE concat(%, #{$field}, %)/if #elseif($queryType BETWEEN) if testparams.begin${field} ! null and params.begin${field} ! AND $column.columnName gt; #{params.begin${field}} /if if testparams.end${field} ! null and params.end${field} ! AND $column.columnName lt; #{params.end${field}} /if #end #end #end /where !-- 添加排序支持 -- choose when testparams.orderByColumn ! null and params.orderByColumn ! ORDER BY ${params.orderByColumn} ${params.isAsc ascending ? ASC : DESC} /when otherwise ORDER BY ${pkColumn.columnName} DESC /otherwise /choose /select4.2 多数据源支持在Service模板中加入多数据源注解// 在serviceImpl.java.vm开头添加 DS(${moduleName}) // 使用模块名作为数据源名称 Service public class ${ClassName}ServiceImpl implements I${ClassName}Service { // ...原有实现 }5. 模板管理最佳实践版本控制将修改后的模板纳入Git管理模块化拆分按业务领域创建不同模板集变量集中管理在generator.yml中定义公共变量模板继承通过#parse指令复用基础模板示例配置片段# generator.yml gen: templateDir: /custom-templates # 自定义模板目录 commonVars: companyName: Acme Inc. copyrightYear: 2023 basePackage: com.acme通过深度定制若依代码生成器模板开发者可以大幅减少重复劳动同时保证生成的代码符合项目特定规范。建议从简单修改开始逐步构建适合自己团队的自定义模板库。

相关文章:

若依代码生成的隐藏技巧:如何自定义生成模板实现个性化CRUD页面

若依代码生成器深度定制:从模板修改到个性化CRUD实战 在快速迭代的企业级应用开发中,若依框架的代码生成器无疑是提升效率的利器。但大多数开发者仅停留在基础使用层面,未能充分挖掘其定制化潜力。本文将揭示如何通过修改Velocity模板实现高度…...

Fiddler Everywhere在M1/M2芯片Mac上的性能优化指南(2024最新版)

Fiddler Everywhere在M1/M2芯片Mac上的性能优化指南(2024最新版) 当你在M1 Pro芯片的MacBook Pro上第一次启动Fiddler Everywhere时,是否注意到那个转圈的小彩虹图标?这背后是Rosetta 2在默默进行指令转译。作为一款尚未完全适配A…...

Fish Speech 1.5真实应用:远程医疗问诊语音记录转患者可听版

Fish Speech 1.5真实应用:远程医疗问诊语音记录转患者可听版 想象一下这个场景:一位医生刚刚结束一场远程视频问诊,他需要将整个问诊过程的录音整理成一份清晰、易懂的文字记录,然后发给患者。传统的做法是,医生或助理…...

告别杂乱文本!用BERT中文分割模型,3步搞定会议记录智能分段

告别杂乱文本!用BERT中文分割模型,3步搞定会议记录智能分段 1. 引言:从“文字墙”到清晰段落 想象一下这个场景:你刚开完一场两小时的线上会议,录音转文字工具很给力,生成了上万字的记录。但当你打开文档…...

LVGL_V8.3进阶一:圆形表盘UI的动效与数据可视化设计

1. 圆形表盘UI的动效设计基础 在智能穿戴设备的界面设计中,动效不仅仅是视觉点缀,更是提升用户体验的关键要素。LVGL_V8.3的动画系统基于关键帧和缓动函数,我们可以通过lv_anim_t结构体实现指针旋转、数据变化等效果。比如要让秒针实现平滑转…...

打造专属数字人助手:lite-avatar形象库多职业角色应用案例

打造专属数字人助手:lite-avatar形象库多职业角色应用案例 1. 从想法到现实:为什么你需要一个数字人助手 想象一下,你的在线教育平台需要一位能24小时答疑的虚拟老师,你的电商直播间需要一位不知疲倦的带货主播,或者…...

Python入门项目:编写脚本批量调用丹青识画系统分析个人照片库

Python入门项目:编写脚本批量调用丹青识画系统分析个人照片库 你是不是也和我一样,手机、电脑里存了成千上万张照片,但真正值得回味、能称得上“好照片”的却寥寥无几?每次想找几张有“艺术感”的照片发朋友圈或者做个电子相册&a…...

FireRedASR Pro一键部署教程:基于Ubuntu 20.04的GPU环境快速搭建

FireRedASR Pro一键部署教程:基于Ubuntu 20.04的GPU环境快速搭建 你是不是也对语音识别技术感兴趣,想自己动手搭建一个环境来试试水?但一想到要装驱动、配环境、搞依赖,头就大了。别担心,今天咱们就来聊聊怎么在Ubunt…...

Phi-3-vision-128k-instruct开源生态链接:与Hugging Face、Ollama等工具的协同

Phi-3-vision-128k-instruct开源生态链接:与Hugging Face、Ollama等工具的协同 1. 开篇:为什么关注开源生态链接 在AI领域,一个模型的价值往往取决于它能融入多少工具链。Phi-3-vision-128k-instruct作为微软最新开源的视觉语言模型&#x…...

KART-RERANK效果对比实验:与传统检索模型在公开数据集上的巅峰对决

KART-RERANK效果对比实验:与传统检索模型在公开数据集上的巅峰对决 最近在信息检索圈子里,KART-RERANK这个名字被讨论得越来越多。很多朋友都在问,这个新冒出来的重排序模型,到底比我们用了好多年的那些老方法强在哪里&#xff1…...

在Android应用中原生集成Z-Image-Turbo_Sugar脸部Lora:端侧AI的尝试

在Android应用中原生集成Z-Image-Turbo_Sugar脸部Lora:端侧AI的尝试 最近在琢磨一个挺有意思的事儿:怎么在手机App里玩转AI画图,特别是那种能生成特定风格人像的模型。像Z-Image-Turbo_Sugar脸部Lora这种模型,效果很惊艳&#xf…...

4步掌握跨平台投屏工具Macast:从安装到精通的完整指南

4步掌握跨平台投屏工具Macast:从安装到精通的完整指南 【免费下载链接】Macast Macast - 一个跨平台的菜单栏/状态栏应用,允许用户通过 DLNA 协议接收和发送手机中的视频、图片和音乐,适合需要进行多媒体投屏功能的开发者。 项目地址: http…...

前端加密全攻略:用jsencrypt.js+Base64.js实现数据安全传输(附kkFileView集成示例)

前端数据安全实战:从加密传输到文件预览的全链路方案 在Web应用开发中,数据安全始终是不可忽视的核心议题。当用户提交表单、上传文件或进行任何涉及敏感信息的操作时,如何确保这些数据在传输过程中不被窃取或篡改?本文将深入探讨…...

AgentCPM本地研报工具体验:纯离线运行,商业机密数据安全无忧

AgentCPM本地研报工具体验:纯离线运行,商业机密数据安全无忧 如果你每天的工作都需要处理大量敏感的商业数据,撰写深度分析报告,那你一定对数据安全这根弦绷得特别紧。用在线AI工具吧,总担心数据上传到云端有泄露风险…...

避坑指南:Backtrader数据准备中90%新手会犯的5个错误(以A股为例)

避坑指南:Backtrader数据准备中90%新手会犯的5个错误(以A股为例) 在量化交易的世界里,数据准备就像建筑的地基——看似简单却至关重要。许多开发者花费大量时间调试策略逻辑,最终却发现问题出在最基础的数据层。本文将…...

别再盲目跟风!通达信天量法则(TLFZ)的3个常见使用误区与正确姿势

通达信天量法则(TLFZ)实战指南:避开三大认知陷阱,掌握精准交易信号 在技术分析领域,成交量指标一直被视为价格变动的先行指标,而通达信系统中的天量法则(TLFZ)更是众多资深交易者密切关注的信号工具。这个看似简单的指标背后&…...

Audio Pixel Studio音色库详解:晓晓/云希/云扬等中文音色适用场景指南

Audio Pixel Studio音色库详解:晓晓/云希/云扬等中文音色适用场景指南 1. 语音合成技术简介 Audio Pixel Studio 是一款基于 Streamlit开发的轻量级音频处理Web应用,集成了强大的Edge-TTS语音合成引擎。这款工具采用清新大气的"明亮像素"设计…...

Nunchaku-flux-1-dev在STM32F103C8T6开发中的应用

Nunchaku-flux-1-dev在STM32F103C8T6开发中的应用 1. 场景引入:嵌入式开发的痛点 做STM32开发的朋友都知道,配置外设和调试代码是个挺头疼的事。特别是用STM32F103C8T6这种资源有限的芯片,每个引脚、每个时钟周期都得精打细算。传统的开发方…...

Ovirt 开源虚拟化平台部署实战:从规划到安装的完整指南

1. 认识Ovirt:开源虚拟化的利器 第一次接触Ovirt是在五年前的一个企业私有云项目中,当时客户需要一套既经济又可靠的虚拟化方案。经过多方对比,我们最终选择了这个基于KVM的开源平台。你可能要问:为什么是Ovirt?简单来…...

阿里通义Z-Image-Turbo在内容创作中的应用:快速生成知乎、公众号配图

阿里通义Z-Image-Turbo在内容创作中的应用:快速生成知乎、公众号配图 1. 为什么内容创作者需要这款AI图像工具 在内容创作领域,配图质量直接影响文章的传播效果。传统方式面临三大痛点: 版权风险:网络图片存在侵权隐患风格不统…...

Plant Simulation新手必看:从零搭建工厂布局模型的5个关键步骤

Plant Simulation新手必看:从零搭建工厂布局模型的5个关键步骤 当你第一次打开Plant Simulation软件时,面对空白的建模界面和复杂的工具栏,可能会感到无从下手。作为制造业数字化转型的核心工具之一,Plant Simulation能帮助工程师…...

大数据技术专业的毕设实战:从零构建一个高可用日志分析系统

最近在指导几位大数据专业同学的毕业设计,发现一个普遍现象:很多同学的选题听起来高大上,比如“基于大数据的用户画像系统”、“智能推荐引擎”,但实际做出来往往是个“玩具级”Demo。技术栈罗列了一大堆,Hadoop、Spar…...

Hybrid A*算法在自动驾驶中的路径规划实践

1. Hybrid A*算法是什么?能解决什么问题? 第一次接触Hybrid A算法时,我正为一个自动驾驶小车项目头疼。传统A算法规划的路径像机器人走方格,小车执行时总会出现"蛇形走位"。直到发现Hybrid A*这个神器,才明白…...

通过Mininet实验剖析SDN与传统网络架构的协同机制

1. 为什么需要研究SDN与传统网络的协同 第一次接触SDN时,我和大多数网络工程师一样,被"软件定义"的概念震撼到了。想象一下,所有网络设备不再需要单独配置,通过一个中央控制器就能管理整个网络,这简直是网络…...

MIPI M-PHY vs D-PHY vs C-PHY:三大物理层协议对比及选型建议

MIPI三大物理层协议深度解析:从技术特性到场景化选型指南 在移动设备、汽车电子和IoT领域的高速数据传输需求激增的今天,MIPI联盟的物理层协议选择成为硬件架构设计的核心决策点。作为连接处理器与传感器、显示屏、存储器的"数据高速公路"&…...

Qt实战:用QTreeView打造高颜值导航菜单(附完整QSS代码)

Qt实战:用QTreeView打造高颜值导航菜单(附完整QSS代码) 在Qt开发中,原生控件的美观度常常成为用户体验的短板。QTreeView作为常用的树形结构控件,其默认样式往往显得过于朴素。本文将带你从零开始,通过QSS样…...

快速上手AI框架:基于Miniconda-Python3.10镜像的PyTorch环境搭建

快速上手AI框架:基于Miniconda-Python3.10镜像的PyTorch环境搭建 你是不是也遇到过这种情况:想跑一个最新的AI模型,结果光是配环境就折腾了一整天,不是Python版本不对,就是各种包冲突,最后代码还没跑起来&…...

大数据数据交易领域:老司机都在用的技巧

大数据数据交易避坑指南:老司机压箱底的10个实战技巧 一、引言:为什么你做数据交易总踩坑? 刚进入大数据数据交易领域时,我曾犯过一个致命错误——没做合规就卖数据。 那是2019年,我帮一家企业卖用户行为数据集,以为“只要数据是客户自己提供的,就能随便卖”。结果上…...

OpCore Simplify:一站式智能生成OpenCore EFI的黑苹果配置工具

OpCore Simplify:一站式智能生成OpenCore EFI的黑苹果配置工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplify是一款专注…...

如何通过OpenCore Legacy Patcher实现老旧Mac设备的系统升级与性能提升?

如何通过OpenCore Legacy Patcher实现老旧Mac设备的系统升级与性能提升? 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 随着科技的快速迭代,许多2…...