论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
基于CodeSmith提高开发效率
基于CodeSmith提高开发效率
熊熊出没
金牌会员
|
2023-2-9 00:07:03
|
显示全部楼层
|
阅读模式
楼主
主题
555
|
帖子
555
|
积分
1665
CodeSmith简介
CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET 的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同,CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用 CodeSmith,可以生成包括简单的强类型集合和完整应用程序在内的任何东西。当您生成应用程序时,您经常需要重复完成某些特定的任务,例如编写数据访问代码或者生成自定义集合。CodeSmith 在这些时候特别有用,因为您可以编写模板自动完成这些任务,从而不仅提高您的工作效率,而且能够自动完成那些最为乏味的任务。CodeSmith 附带了许多模板,包括对应于所有 .NET 集合类型的模板以及用于生成存储过程的模板,但该工具的真正威力在于能够创建自定义模板。
为什么要用代码生成器
²代码生成器生成代码可以减少人为手误书写的bug
²可以提高代码开发效率,简化开发流程
²可以使输出文档、代码规范化
代码生成模板编写
生成模板采用asp.net的语法编写,语法简单易懂,对熟悉 asp.net 开发人员很友好。即使没有做个 asp.net 开发也可以简单学习后进行模板编写。
1. 编写模板的基础需要引入数据表,在模板中可以很简单的引入一些生成代码的配置项
1.<%@ CodeTemplate Language="C#" TargetLanguage="Java" Src="" Inherits="" Debug="False" Description="" ResponseEncoding="UTF-8" %>
2.<%@ Property Name="package" Type="System.String" Default="Che168.Model" Optional="False" Category="Strings" Description="实体类命名空间" %>
3.<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Optional="False" Category="Configs" Description="源表" %>
4.<%@ Property Name="SourceTable2" Type="SchemaExplorer.TableSchema" Optional="True" Category="Configs" Description="字段备注来源表" %>
5.<%@ Property Name="SourceTable3" Type="SchemaExplorer.TableSchema" Optional="True" Category="Configs" Description="字段备注来源表" %>
6.<%@ Property Name="SourceTable4" Type="SchemaExplorer.TableSchema" Optional="True" Category="Configs" Description="字段备注来源表" %>
7.<%@ Property Name="IsSpringBoot" Type="System.Boolean" Category="Configs" Description="是否是SpringBoot bean,如果是,则生成api说明备注" %>
复制代码
Name:注册的配置的引用名称Description:配置项的说明Type:为控件的类型,支持内置以及 .net 的类型SchemaExplorer.TableSchema:为选择数据源表System.String:为文字输入控件Optional:是否可选, False为必填IsSpringBoot:是我们选择生成的bean是否要生成 swagger 说明
2.引入配置项之后就可以继续编写代码模板
比如生成java的bean
1.package <%=package%>import java.util.*;
2. <%if(IsSpringBoot){ %>
3.import io.swagger.annotations.*;
4.<%} %>
5.
6./**
7.* <%=SourceTable.Description%>bean
8.*/
9.public class <%= SourceTable.Name%>
10.{
11. <% foreach (ColumnSchema column in SourceTable.Columns) { %>
12. /**<%= column.Description %>*/
13. <%if(IsSpringBoot){ %>
14. @ApiModelProperty(value = "<%= column.Description %>", name = "<%= column.Name.ToLower() %>")
15. <%} %>
16. <%= GetJavaType(column.DataType) %> <%= column.Name.ToLower() %> ;
17. <% } %>
18.
19. <% foreach (ColumnSchema column in SourceTable.Columns) { %>
20.
21. public void set<%=column.Name.ToLower().ToPascalName() %> (<%= GetJavaType(column.DataType) + " "+column.Name.ToLower() %> ) { this.<%= column.Name.ToLower()+" = "+ column.Name.ToLower()%>; }
22.
23. public <%= GetJavaType(column.DataType) %> get<%=column.Name.ToLower().ToPascalName() %> () { return this.<%= column.Name.ToLower() %>;}
24. <% } %>
25.}
26.
27.
复制代码
3. 数据类型转换
不同的目标语言都离不开数据类型的转换,所以我们应针对不同的目标语言书编写一个数据类型转换的方法。
比如上方的数据类型转换java类型的方法:
1.
复制代码
在模板中是可以书写我们自定义的方法,自定义方法用<script runat="template"> 包含起来,在模板中就可以调用了
4. 如何提取公共方法
在开发中我们不可能只生成某一种类型,比如我们需要生成model,表的增删改查语句,生成页面,但是离不开的是数据类型的转换,所以我们要把公共代码提取到某个模板文件,在各个模板引用这个文件,方法如下:新建模板文件,将公共方法剪切到该模板文件,包含在标签中,在需要的模板引用该模板,如:那么我们这个文件就可以把上方的 GetJavaType 方法删除掉了。模板中也可以引用外部的 c# 代码文件,模板中也可以引用外部程序集 引用之后同样可以在模板中调用引入的代码方法。
书写完模板我们编译后,模板就可以使用了,生成代码流程图如下:
经验分享
在实际的使用中,往往我们不只来源单表的代码生成,于是就可以书写支持sql。1.首先在模板注册两个控件2.3.我们针对QuerySqlScript控件注册改变事件QuerySqlScriptChange在该事件中,我们使用注册的数据源来执行我们输入的sql,来返回一个table结果,我们只需要关注列名称,然后我们用正则表达式从sql中匹配出表名称,再次分别用数据源查询sql中涉及的表的结构,此时我们将sql中的列,从获得的表结构中抽取出到我们声明的一个TableTableSchema 对象中,然后我们就可以继续在模板中使用该 TableSchema 来生成代码。
总结
同样的代码,如采用CodeSmith代码生成可减少 70% 的工作量,如 model的生成,表增删改的sql脚本,基础页面的生成,wiki的生成。假如标准制定好,甚至可以达到不写一行代码。同时代码生成还可以直接输出到文件。
官网地址 https://www.codesmithtools.com/
作者|李丙龙
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
熊熊出没
金牌会员
这个人很懒什么都没写!
楼主热帖
TortoiseGit间接处理linux目录下的仓库 ...
Java如何调用HttpURLConnection类模拟 ...
Java 知识 - 接口代理
SeaTunnel 发布成为 Apache 顶级项目后 ...
django小项目 ----- 创建错题集 ...
Spring(十):注解实现自动装配 ...
[Golang] GO 语言工作环境的基本概念 ...
java 基础——数组
cas服务端、客户端搭建
数仓的等待视图中,为什么会有Hashjoin ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表