自定义动软代码模版编写

摘要:
=Null){returnValue=CodeCommon.DbTypeToCS;}#˃右键单击模板并编辑它。您可以看到上面的代码。这些是模板中自定义的一些变量。UPDATE函数。动态软件中的更新功能是传递一个实体并对其进行全部修改。在这里,我将其修改为仅修改值12345678/////hissanewupdatemodule////publicvoid Update{StringBuildersrSql=newStringBuilder();List<SqlParameter>parameters=newList<SqlParameters>();}首先定义两个变量,因为它们与实际代码中的相同,因此这里只有一点,即<#=ModelSpace#>。该变量已在文件开头定义,即模板的空间名+类名。接下来,我们需要编写一个for循环,以确定哪些代码要添加到sql语句中,哪些代码不需要。

转载:https://www.cnblogs.com/TivonStone/archive/2013/03/26/2982277.html

这里使用的是动软的模板.

image

这是动软代码生成器的一个整体界面。

下面做的示例是从右边模板管理中的选一个模板进行修改,这里我选了简单三层模板中的DAL.cmt模板

1
2
3
4
5
6
7
8
9
10
11
<#@ template language="c#" HostSpecific="True" #>
<#@ output extension= ".cs" #>
<#    TableHost host = (TableHost)(Host);       
string DbParaHead=host.DbParaHead;   
string DbParaDbType=host.DbParaDbType;   
string preParameter=host.preParameter;   
string ModelSpace = host.NameSpace+".Model."+ host.GetModelClass(host.TableName);   
ColumnInfo identityKey=host.IdentityKey;   
string returnValue = "void";   
if (identityKey!=null)    {                 
returnValue = CodeCommon.DbTypeToCS(identityKey.TypeName);                  }#>

在模板上右键,编辑查看。就能看到上面的代码,这是模板中自定义的一些变量。

1
2
3
4
5
6
7
8
9
10
using System;
using System.Text;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Data;
using DBUtility;
 
namespace DAL  <# if( host.Folder.Length > 0){ #>    .<#= host.Folder #><# } #>
{    <# if( host.TableDescription.Length > 0) {#>     //<#= host.TableDescription #>    <# } #>   
    public partial class <#= host.GetDALClass(host.TableName) #>DAO    {}

上面的代码也是模板中我们非常熟悉的引用,接下来我来说下我今天要修改的内容。UPDATE功能,动软中的update功能是将一个实体传进去,全部修改,这里我把它修改成,只修改实体中存在的值

1
2
3
4
5
6
7
8
/// <summary>
/// this is a new update module
/// </summary>
public void Update(<#= ModelSpace #>Entity model)   
{       
    StringBuilder strSql=new StringBuilder();       
    List<SqlParameter> parameters = new List<SqlParameter>();   
}

先来定义两个变量,因为和实际代码中是一样的,所以这里只有一点,就是<# = ModelSpace#>,这个变量已经在文件的开头定义了,就是该模板的空间名+类名。

接下来我们需要写一个for循环,来判断哪些代码要添加的sql语句中,哪些代码不需要。

1
2
3
4
5
6
7
strSql.Append("update <#= host.TableName #> set ");
<# for(int i=0;i< host.Fieldlist.Count;i++){  
ColumnInfo c = host.Fieldlist[i]; #><# if (!c.IsIdentity) {#> 
if(!string.IsNullOrEmpty(model.<#=c.ColumnName#>)){   
strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#>
<# if (i< host.Fieldlist.Count-1 ) {#>,<#}#> ");}<# }#>
<# }#>

这里的几个变量解释写

<#= host.TableName #>表名
host.Fieldlist.Count字段数
c.IsIdentity是否主键
<#=preParameter#>@符号
<#=c.ColumnName#>列名

.

最后加一个条件语句

strSql.Append(" where <#= CodeCommon.GetWhereParameterExpression(host.Keys, true ,host.DbType) #> ");

现在sql语句写好了,当时发现没有写变量;添加变量比较简单。只要在每个判空的条件语句后面添加就可以了

<# if (!c.IsIdentity) {#>  
if(!string.IsNullOrEmpty(model.<#=c.ColumnName#>)){
    strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#> , ");
    parameters.Add(new SqlParameter("<#=preParameter#><#=c.ColumnName#>",model.<#=c.ColumnName#>));
    }<# }#>
<# }#>

添加之后,会发现所有实体的属性都被用string.IsNullOrEmpty()来判断,所以这里还要添加一个判断属性类型的条件

<# if (!c.IsIdentity) {#>  
<# if(CodeCommon.DbTypeToCS(c.TypeName)=="string") {#>
if(!string.IsNullOrEmpty(model.<#=c.ColumnName#>)){
    strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#> , ");
    parameters.Add(new SqlParameter("<#=preParameter#><#=c.ColumnName#>",model.<#=c.ColumnName#>));
    }<# }#>
<# if(CodeCommon.DbTypeToCS(c.TypeName)=="int"||
    CodeCommon.DbTypeToCS(c.TypeName)=="long"||
    CodeCommon.DbTypeToCS(c.TypeName)=="float"||
    CodeCommon.DbTypeToCS(c.TypeName)=="DateTime"||
    CodeCommon.DbTypeToCS(c.TypeName)=="decimal")
    {#>
if(model.<#=c.ColumnName#>!=0){
    strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#> , ");
    parameters.Add(new SqlParameter("<#=preParameter#><#=c.ColumnName#>",model.<#=c.ColumnName#>));
    }
    <#}#>
<#}#>

上面是个例子,具体情况具体分析。

最后整体的UPDATE代码如下

/// <summary>
        /// this is a new update module l|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
        /// </summary>
        public bool Update(<#= ModelSpace #>Entity model)
        {
            StringBuilder strSql=new StringBuilder();
            List<SqlParameter> parameters = new List<SqlParameter>();
            strSql.Append("update <#= host.TableName #> set ");
            <# for(int i=0;i< host.Fieldlist.Count;i++)
            {   ColumnInfo c = host.Fieldlist[i]; #>
            <# if (!c.IsIdentity) {#>  
            <# if(CodeCommon.DbTypeToCS(c.TypeName)=="string") {#>
            if(!string.IsNullOrEmpty(model.<#=c.ColumnName#>)){
                strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#> , ");
                parameters.Add(new SqlParameter("<#=preParameter#><#=c.ColumnName#>",model.<#=c.ColumnName#>));
                }<# }#>
            <# if(CodeCommon.DbTypeToCS(c.TypeName)=="bool") {#>
                strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#> , ");
                parameters.Add(new SqlParameter("<#=preParameter#><#=c.ColumnName#>",model.<#=c.ColumnName#>));
                <# }#>
            <# if(CodeCommon.DbTypeToCS(c.TypeName)=="int"||
                CodeCommon.DbTypeToCS(c.TypeName)=="long"||
                CodeCommon.DbTypeToCS(c.TypeName)=="float"||
                CodeCommon.DbTypeToCS(c.TypeName)=="DateTime"||
                CodeCommon.DbTypeToCS(c.TypeName)=="decimal")
                {#>
            if(model.<#=c.ColumnName#>!=0){
                strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#> , ");
                parameters.Add(new SqlParameter("<#=preParameter#><#=c.ColumnName#>",model.<#=c.ColumnName#>));
                }
                <#}#>
            <#}#>
            <# }#>
            strSql = strSql.Remove(strSql.Length - 2,2);
            strSql.Append(" where <#= CodeCommon.GetWhereParameterExpression(host.Keys, true ,host.DbType) #> ");
            <# for(int i=0;i< host.Keys.Count;i++)
            {   ColumnInfo key = host.Keys[i]; #>
                <# if (key.IsPrimaryKey || !key.IsIdentity)
                {#>
                    parameters.Add(new SqlParameter("<#=preParameter#><#=key.ColumnName#>",model.<#=key.ColumnName#>));
                <#}#>
            <# }#>
            int rows=<#= host.DbHelperName#>.ExecuteSql(strSql.ToString(),parameters.ToArray());
            if (rows > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

现在项目中使用的:

自定义动软代码模版编写第2张

免责声明:文章转载自《自定义动软代码模版编写》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android okHttp网络请求之Retrofit+Okhttp+RxJava组合dex2jar 报错 com.googlecode.d2j.DexException: not support version下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

RSA加密和数字签名在Java中常见应用【原创】

相关术语解释: RSA,参考: https://en.wikipedia.org/wiki/RSA_(cryptosystem) 非对称加密算法 ,参考:https://baike.baidu.com/item/%E9%9D%9E%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86%E7%AE%97%E6%B3%95/1208...

Postgresql数据库的一些字符串操作函数(转)

今天做项目遇到客户反映了一个麻烦的事情,有一些数据存在,但就是在程序中搜索不出来,后来分析,发现问题为数据前面有几个空白字符,后来用SQL 查询了一下,发现八九个数据表中,数千万条数据中有将近三百万条数据存在相同的问题,本想着在查询时添加匹配符'%',后来试运行了一下,发现不可行,因 为尚有很多其它页面存在类似的搜索问题,并且这样会极大地影响到查询的速度,...

42岁大龄程序员的迷茫,看我最新尝鲜.net 5+Dapper搭建的WebAPI框架

42岁大龄程序员的迷茫 我真傻,真的。我单知道雪天是野兽在深山里没有食吃,会到村里来;我不知道春天也会有…… 我真傻,真的。我单知道程序员要活到老学到老,年龄大了要失业;我不知道码农(新型农民工)也会有…… 上周回老家有点无聊就去小破站看了点视频,是讲Dapr的实践(朝夕教育某讲师的公开课录屏),看完非常之震撼:原来微服务离我那么近! 虽然有失业的风险,...

Swift 自定义Useragent

Swift 自定义Useragent 背景 最近在接阿里云的WAF,防火墙会拦截某些请求。被拦截的请求是看不到Headers信息的,只能看到Useragent,所以,应后台需求,自定义Useragent,这样可以更方便从服务器日志定位问题。 准备 当前项目中使用的是Alamofire进行网络请求。 通过查看源码发现,默认的SessionManager是初始...

HttpClient的get和post方式提交数据的使用

/** * Http工具类 */ public class HttpUtil { // 创建HttpClient对象 public static HttpClient httpClient = new DefaultHttpClient(); public static final String BASE_URL =...

云计算设计模式(八)——外部配置存储模式

云计算设计模式(八)——外部配置存储模式 移动配置信息从应用部署包到一个集中位置。这个模式可以提供机会,以便管理和配置数据的控制,以及用于跨应用程序和应用程序实例共享的配置数据。  背景和问题 大多数应用程序运行时环境包括位于应用程序文件夹内的在部署应用程序文件保持配置信息。在某些情况下也能够编辑这些文件来改变该应用程序的行为,它已经被部署之后。然而,在...