CodeSmith是一款与数据库相关的工具,只要与数据库相关的类都可以通过它编写模板来批量实现。

<%@ Template Language="C#" TargetLanguage="C#" %>
<%@ Assembly Name="SchemaExplorer"%>
<%@ Import Namespace="SchemaExplorer"%>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema"%>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Model
{public class <%=GetClassName()%>{<%foreach(ColumnSchema column in this.SourceTable.Columns)%><%{%><%=GetCSDataType(column)%> <%=ToCamel(column.Name)%>;public <%=GetCSDataType(column)%> <%=ToPascal(column.Name)%>{get { return <%=ToCamel(column.Name)%>; }set { <%=ToCamel(column.Name)%> = value; }}<%}%>}
}
<script runat="template">
//Pascal命名法(将首字母大写)
public string ToPascal(string s)
{return s.Substring(0,1).ToUpper()+s.Substring(1);
}
//骆驼命名法(将首字母小写)
public string ToCamel(string s)
{return s.Substring(0,1).ToLower()+s.Substring(1);
}
//得到类的名字(由表名而来)
public string GetClassName()
{string s=this.SourceTable.Name;//取到表名//判断表名是不是以S结尾,如果是去掉Sif (s.EndsWith("s")){return ToPascal(s.Substring(0,s.Length-1));}return ToPascal(s);
}
//得到C#的数据类型(将基本常用的数据类型意逐个转换)
public static string GetCSDataType(ColumnSchema column){if (column.Name.EndsWith("TypeCode")) return column.Name;switch (column.DataType){case DbType.AnsiString: return "string";case DbType.AnsiStringFixedLength: return "string";case DbType.Binary: return "byte[]";case DbType.Boolean: return "bool";case DbType.Byte: return "byte";case DbType.Currency: return "decimal";case DbType.Date: return "DateTime";case DbType.DateTime: return "DateTime";case DbType.Decimal: return "decimal";case DbType.Double: return "double";case DbType.Guid: return "Guid";case DbType.Int16: return "short";case DbType.Int32: return "int";case DbType.Int64: return "long";case DbType.Object: return "object";case DbType.SByte: return "sbyte";case DbType.Single: return "float";case DbType.String: return "string";case DbType.StringFixedLength: return "string";case DbType.Time: return "TimeSpan";case DbType.UInt16: return "ushort";case DbType.UInt32: return "uint";case DbType.UInt64: return "ulong";case DbType.VarNumeric: return "decimal";default:{return "__UNKNOWN__" + column.NativeType;}}}public override string GetFileName(){return this.GetClassName()+".cs";}
</script>

这是一个为指定的某一张表生成实体类的模板。

在编译运行之后就有以下结果:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Model
{public class StudentExamQuestionAnswer{int id;public int Id{get { return id; }set { id = value; }}int examId;public int ExamId{get { return examId; }set { examId = value; }}int studentId;public int StudentId{get { return studentId; }set { studentId = value; }}int questionId;public int QuestionId{get { return questionId; }set { questionId = value; }}string answer;public string Answer{get { return answer; }set { answer = value; }}int examQuestionId;public int ExamQuestionId{get { return examQuestionId; }set { examQuestionId = value; }}int examStudentId;public int ExamStudentId{get { return examStudentId; }set { examStudentId = value; }}}
}

跟我们平时一句一句的写代码是一模一样。怎么样?批量生成不错吧!还有更美的呢!

Ajax的姑娘,加油!

转载于:https://blog.51cto.com/broncho/1308662

CodeSmith模板(生成实体类)相关推荐

  1. velocity笔记(一)什么是velocity,我们什么时候会使用到这个,基本语法,利用模板生成实体类的各层代码

    目录 什么是velocity 应用场景 组成结构 快速入门 总结 基本语法 注释 非解析内容 引用 变量引用 属性引用 方法引用 指令 流程控制指令 #set 指令 #if/#elseif/#else ...

  2. mybatis-plus使用 generator 代码生成器生成实体类支持Swagger2

     作者:传说中的黑桃A blog.csdn.net/sj13074480550/article/details/102976146 mybatis-plus使用generator代码生成器生成实体类支 ...

  3. mybatis-plus使用generator代码生成器生成实体类支持Swagger2

    mybatis-plus使用generator代码生成器生成实体类支持Swagger2 1.先搭建项目,引入maven依赖 2.编写代码生成器代码(有说明) 3.在resources目录下创建temp ...

  4. 自定义tt文本模板实现MySql指数据库中生成实体类

    自定义tt文本模板实现MySql指数据库中生成实体类 1.在项目中依次点击"添加"/"新建项",选择"文本模板",输入名称后点击添加. 2. ...

  5. t4模板 mysql_.net core 用T4模板连接MySql生成实体类

    .net core 用T4模板连接MySql生成实体类标题 4,把MySql.Data.dll放在项目根目录,也可以自行更改. 在之前参考那个博友的文章,他的是连接SQL server的. 下面是参考 ...

  6. php写实体类,自动生成实体类(方式一)

    YMP框架自v1.0开始就支持通过数据库表结构自动生成实体类代码,所以v2.0版本不但重构了实体代码生成器,而且更简单好用! #------------------------------------ ...

  7. eclipse mysql生成实体类_Eclipse实现数据库反向生成实体类(pojo)-------(插件安装和实现步骤的说明)...

    一.插件安装 1.下载插件: http://jaist.dl.sourceforge.net/sourceforge/jboss/HibernateTools-3.2.4.Beta1-R2008103 ...

  8. C#连接数据库自动生成实体类

    在项目中经常遇到要创建实体类的情况,数据库比较大或需经常修改表结构时,手动创建实体类的效率就很低. 1.手写代码创建生成实体类工具 之前写Java代码习惯了使用Mybatis Generator之类的 ...

  9. idea 集成mybatis,利用MyBatis Generator自动生成实体类、mapper文件

    最近一个老项目集成mybatis,利用 generator自动生成实体类.mapper的时候折腾了一小时,记录一下,避免以后再折腾 很简单的三步 https://gitee.com/shunangua ...

最新文章

  1. 牛客c语言数组,牛客网学习笔记 - C/C++
  2. 集群批量管理工具parallel ssh的安装及使用
  3. JSON数据从OSS迁移到MaxCompute最佳实践
  4. Python操作Redis的5种数据类型
  5. 数据结构杂谈(五)——栈
  6. 2019.7.27数组api
  7. java工具链 有什么_Iodine:一个优秀的Java语言工具链
  8. pku2250--Compromise(最长公共子串,记录结果)
  9. 演示:取证分析IPV6组播地址的构成原理
  10. 汽车常用的ECU芯片
  11. 【测验8 编程题】: 程序设计方法学 (第8周)
  12. rog主板php,华硕主板有哪些系列 华硕主板各系列区别对比
  13. 财务航天开票系统无法打印发票汇总明细,该系统打印发票正常,连其他打印机打印A4正常
  14. 英语单词词性顺口溜_英语单词词性分类
  15. c语言中的内存4区域模型(堆,栈,全局区,代码区)
  16. 威海之恋 mv和歌词
  17. Leetcode-二分+递归/回溯-1723. 完成所有工作的最短时间
  18. 『强烈推荐2个网站』这才是Win10官方原版正确下载姿势
  19. 神经网络可以用来预测吗,神经网络预测股票价格
  20. 揭秘认知智能,小i机器人的“高级知识分析师”高级在哪里?

热门文章

  1. 20211118:力扣第267周周赛(上)
  2. MCU破解技术分析(一)
  3. C++由(int)a引发的思考及浮点数在内存中的表示
  4. 牛津教授吐槽DeepMind心智神经网络,还推荐了这些多智能体学习论文
  5. 少年,这有套《街霸2》AI速成心法,想传授于你……
  6. Mybatis中Mapper.xml文件sql中动态获取----#{}和${}区别
  7. 用es5实现es6的promise,彻底搞懂promise的原理
  8. 情怀也好,相声也好,请拿产品说话!
  9. Higher level thinking
  10. Aligned公司在凤凰城建设数据中心将采用微电网的电力