zoukankan      html  css  js  c++  java
  • T4模版生成SpringMVC构造REST代码:第三篇 用T4模版生成POCO类代码

            T4模版生成代码的基础前面三篇基本介绍了,下面开始《用T4模版生成Dao数据持久层接口代码》工作。

    第一步、在“解决方案JavaGenerate”中添加类库,用于存放dao的模版及相应文件,我们命名这个类库为JavaDaos。

          点击“解决方案JavaGenerate”,右键,选择“添加 ”--〉“新建项目”,再选择"类库",名称中输入JavaModels。返回后,在“解决方案JavaGenerate”中增加了一个叫JavaModels的项目,且自带了一个class.cs的类,我们点击它,再点右键删除它,不用它。

          如图4-1,注意红色方框,特别是要选中.NET Framework4

    图4-1

    第二步,增加t4空模版

            在解决方案管理器中,选择JavaDaos项目,点击右键,选择“添加 ”--〉“新建项”,在弹出的窗体中做图4-2的选择和输入项。


    图4-2

    第三步,修改模版,我直接贴一个,然后慢慢解释。如果第一次写,可以把《 

    T4模版生成SpringMVC构造REST代码:第三篇 用T4模版生成POCO类代码

    》中的拷贝过来改。

    <#@ template language="C#" debug="false" hostspecific="true"#>
    <#@ include file="EF.Utility.CS.ttinclude"#>
    <#@ assembly name="EnvDTE" #>
    <#@ import namespace="EnvDTE"#>
    <#@ output extension=".cs"#><#
    CodeGenerationTools code = new CodeGenerationTools(this);
    MetadataLoader loader = new MetadataLoader(this);
    CodeRegion region = new CodeRegion(this, 1);
    MetadataTools ef = new MetadataTools(this);
    string inputFile = @"..\EDMX\dblxh.edmx";//EDMX项目中dblxh.edmx的路径
    
    MetadataWorkspace metadataWorkspace = null;
    bool allMetadataLoaded =loader.TryLoadAllMetadata(inputFile, out metadataWorkspace);
    EdmItemCollection ItemCollection = (EdmItemCollection)metadataWorkspace.GetItemCollection(DataSpace.CSpace);
    
    EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
    
    // 发出文件
    foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
    {	
    	string filePascialName=getModelsPascialName(entity.Name);//Pascial风格的类名称
    	string fileCamelName=getModelsCamelName(entity.Name);//Camel风格的类名称
    	
        fileManager.StartNewFile(filePascialName+ "Mapper.java");//输出的类文件名称,及开始输出文件
    #>
    package com.jiahe.rest.demo2.dao;
    /*********************************************************************************
     * Copyright (c) XXXXX LIMITED  2012 All Rights Reserved
     * 系统名称:
     * 程序模块文件名称:<#=filePascialName+ "Mapper.java"#>
     * 摘要:
    *********************************************************************************/
    
    import java.util.List;
    
    import com.jiahe.rest.demo2.models.<#=filePascialName#>;
    
    
    /*********************************************************************************
     * 
     * <pre>
     * [版本说明]
     * 1.0    2012/08/30   初版
     * </pre>
     *  @version  1.0 2013/5/16
     *  @author   lxh
     *********************************************************************************/
    
    public interface <#=filePascialName#>Mapper {
    	/**
    	* 增加一个
    	* @param <#=fileCamelName#>
    	* @return 1 成功,0失败
    	*/
    	public int insert(<#=filePascialName#> <#=fileCamelName#>);
    
    	/**
    	* 修改一个
    	* @param <#=fileCamelName#>
    	* @return 1 成功,0失败
    	*/
    	public int update(<#=filePascialName#> <#=fileCamelName#>);
    
    	/**
    	* 按条件删除记录
    	* @param <#=fileCamelName#>删除的条件
    	* @return n 删除的记录数量
    	*/
    	public int deleteByCondition(<#=filePascialName#> <#=fileCamelName#>);
    
    	/**
    	* 根据主键删除记录
    	* @param <#=fileCamelName#> 删除的主键
    	* @return  n 删除的记录数量: 1 成功,0失败,大于1的多删了
    	*/
    	public int deleteByID(<#=filePascialName#> <#=fileCamelName#>);
    
    	/**
    	* 根据条件查询数据
    	* @param <#=fileCamelName#> 查询条件,需要查的字段赋值进行等查询
    	* @return 满足条件的记录
    	*/
    	public List<<#=filePascialName#>> findByCondition(<#=filePascialName#> <#=fileCamelName#>);
    
    	/**
    	* 根据主键查询数据
    	* @param <#=fileCamelName#> 查询的主键
    	* @return 满足条件的记录
    	*/
    	public <#=filePascialName#> findByID(<#=filePascialName#> <#=fileCamelName#>);
    
    	/**
    	* 根据条件查询数据数
    	* @param <#=fileCamelName#> 查询条件,需要查的字段赋值进行等查询
    	* @return 满足条件的记录数
    	*/
    	public Long findCountByCondition(<#=filePascialName#> <#=fileCamelName#>);
    
    }
    <#
    }
    fileManager.Process();
    #>
    <#+
    //得到类的Pascial风格名称
    string getModelsPascialName(string source)
    {
    	string[] s=source.Split('_');
    	for(int i=0;i<s.Length;i++)
    	{
    		string s1=s[i].Substring(0,1).ToUpper();
    		string s2=s[i].Substring(1);
    		s[i]=string.Concat(s1,s2);
        }
    
    	string result=string.Empty;
    	for(int i=1;i<s.Length;i++)
    	{
    		result=string.Concat(result,s[i]);
    	}
    	return result;	
    }
    #>
    <#+
    //得到类的Camel风格名称
    string getModelsCamelName(string source)
    {
    	string[] s=source.Split('_');
    	for(int i=0;i<s.Length;i++)
    	{
    		string s1=s[i].Substring(0,1).ToUpper();
    		string s2=s[i].Substring(1);
    		s[i]=string.Concat(s1,s2);
        }
    
    	string result=string.Empty;
    	for(int i=1;i<s.Length;i++)
    	{
    		result=string.Concat(result,s[i]);
    	}
    	string s11=result.Substring(0,1).ToLower();
    	string s12=result.Substring(1);
    	return string.Concat(s11,s12);
    }
    #>
    <#+
    //得到属性的Pascial风格名称
    string getPropertyPascialName(string source)
    {
    	string[] s=source.Split('_');
    	for(int i=0;i<s.Length;i++)
    	{
    		string s1=s[i].Substring(0,1).ToUpper();
    		string s2=s[i].Substring(1);
    		s[i]=string.Concat(s1,s2);
        }
    	return string.Concat(s);	
    }
    //得到属性的Camel风格名称
    string getPropertyCamelName(string source)
    {
    	string[] s=source.Split('_');
    	for(int i=0;i<s.Length;i++)
    	{
    		string s1=s[i].Substring(0,1).ToUpper();
    		string s2=s[i].Substring(1);
    		s[i]=string.Concat(s1,s2);
        }
    	string result=string.Concat(s);
    	string s11=result.Substring(0,1).ToLower();
    	string s12=result.Substring(1);
    	return string.Concat(s11,s12);
    }
    //数据类型转换
    string getPropertyType(string source)
    {
    	string result=string.Empty;
    
    	if (source=="int") result="Integer";
    	if (source=="integer") result="Integer";
    	if (source=="Integer") result="Integer";	
    	if (source=="byte") result="Integer";	
    	if (source=="sbyte") result="Integer";
    	if (source=="bool") result="Integer";
    	if (source=="Int16") result="Integer";
    	if (source=="short") result="Integer";
    	if (source=="Int32") result="Integer";
    
    
    	if (source=="Nullable<int>") result="Integer";
    	if (source=="Nullable<integer>") result="Integer";
    	if (source=="Nullable<Integer>") result="Integer";	
    	if (source=="Nullable<byte>") result="Integer";	
    	if (source=="Nullable<sbyte>") result="Integer";
    	if (source=="Nullable<bool>") result="Integer";
    	if (source=="Nullable<boolean>") result="Integer";
    	if (source=="Nullable<Int16>") result="Integer";
    	if (source=="Nullable<short>") result="Integer";
    	if (source=="Nullable<Int32>") result="Integer";
    
    	if (source=="Int64") result="Long";
    	if (source=="long") result="Long";
    	if (source=="Long") result="Long";
    
    	if (source=="Nullable<Int64>") result="Long";
    	if (source=="Nullable<long>") result="Long";
    	if (source=="Nullable<Long>") result="Long";
    
    	
    	if (source=="float") result="Double";
    	if (source=="Float") result="Double";
    	if (source=="decimal") result="Double";
    	if (source=="Decimal") result="Double";
    
    	if (source=="Nullable<float>") result="Double";
    	if (source=="Nullable<Float>") result="Double";
    	if (source=="Nullable<decimal>") result="Double";
    	if (source=="Nullable<Decimal>") result="Double";
    	
    	
    	if (source=="byte[]") result="byte[]";
    	
    	
    	if (source=="string") result="String";
    	if (source=="String") result="String";
    
    	if (source=="System.Date") result="String";
    	if (source=="System.Time") result="String";
    	if (source=="System.DateTime") result="String";
    
    	if (source=="Nullable<System.Date>") result="String";
    	if (source=="Nullable<System.Time>") result="String";
    	if (source=="Nullable<System.DateTime>") result="String";
    	
    	return result;
    }
    #>

    这个比较简单,就一个循环,输出各个文件。点击保存,就生成相应文件。



  • 相关阅读:
    POJ 1330 Nearest Common Ancestors (LCA,dfs+ST在线算法)
    BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 (动态树LCT)
    HDU 4010 Query on The Trees (动态树)
    SPOJ 375. Query on a tree (动态树)
    BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 (动态树入门)
    HDU 3726 Graph and Queries (离线处理+splay tree)
    POJ 3580 SuperMemo (splay tree)
    Android中visibility属性VISIBLE、INVISIBLE、GONE的区别
    mysql如何在一张表中插入一万条数据?(用存储过程解决)
    Gradle Build速度加快方法汇总
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3098105.html
Copyright © 2011-2022 走看看