第一步、在“解决方案JavaGenerate”中添加类库,用于存放ServiceImpl的模版及相应文件,我们命名这个类库为JavaServiceImpls。
点击“解决方案JavaGenerate”,右键,选择“添加 ”--〉“新建项目”,再选择"类库",名称中输入JavaServiceImpls。返回后,在“解决方案JavaGenerate”中增加了一个叫JavaServiceImpls的项目,且自带了一个class.cs的类,我们点击它,再点右键删除它,不用它。
如图6-1,注意红色方框,特别是要选中.NET Framework4
图6-1
第二步,增加t4空模版
在解决方案管理器中,选择JavaServiceImpls项目,点击右键,选择“添加 ”--〉“新建项”,在弹出的窗体中做图6-2的选择和输入项。
图6-2
第三步,修改模版,我直接贴一个。
<#@ 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+ "ServiceImpl.java");//输出的类文件名称,及开始输出文件 #> package com.jiahe.rest.demo2.service.impl; /********************************************************************************* * Copyright (c) XXXXX LIMITED 2012 All Rights Reserved * 系统名称: * 程序模块文件名称:<#=filePascialName+ "ServiceImpl.java"#> * 摘要: *********************************************************************************/ import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.jiahe.rest.demo2.dao.<#=filePascialName#>Mapper; import com.jiahe.rest.demo2.models.<#=filePascialName#>; import com.jiahe.rest.demo2.service.<#=filePascialName#>Service; /********************************************************************************* * * <pre> * [版本说明] * 1.0 2012/08/30 初版 * </pre> * @version 1.0 2013/5/16 * @author lxh *********************************************************************************/ @Service("<#=fileCamelName#>Service") public class <#=filePascialName#>ServiceImpl implements <#=filePascialName#>Service { @Resource private <#=filePascialName#>Mapper mapper; /** * 增加一个 * @param <#=fileCamelName#> * @return 1 成功,0失败 */ @Override@Transactional public int insert(<#=filePascialName#> <#=fileCamelName#>) throws Exception{ return mapper.insert(<#=fileCamelName#>); } /** * 修改一个 * @param <#=fileCamelName#> * @return 1 成功,0失败 */ @Override@Transactional public int update(<#=filePascialName#> <#=fileCamelName#>) throws Exception{ return mapper.update(<#=fileCamelName#>); } /** * 按条件删除记录 * @param <#=fileCamelName#>删除的条件 * @return n 删除的记录数量 */ @Override@Transactional public int deleteByCondition(<#=filePascialName#> <#=fileCamelName#>) throws Exception{ return mapper.deleteByCondition(<#=fileCamelName#>); } /** * 根据主键删除记录 * @param <#=fileCamelName#> 删除的主键 * @return n 删除的记录数量: 1 成功,0失败,大于1的多删了 */ @Override@Transactional public int deleteByID(<#=filePascialName#> <#=fileCamelName#>) throws Exception{ return mapper.deleteByID(<#=fileCamelName#>); } /** * 根据条件查询数据 * @param <#=fileCamelName#> 查询条件,需要查的字段赋值进行等查询 * @return 满足条件的记录 */ @Override public List<<#=filePascialName#>> findByCondition(<#=filePascialName#> <#=fileCamelName#>) throws Exception { return mapper.findByCondition(<#=fileCamelName#>); } /** * 根据主键查询数据 * @param <#=fileCamelName#> 查询的主键 * @return 满足条件的记录 */ @Override public <#=filePascialName#> findByID(<#=filePascialName#> <#=fileCamelName#>) throws Exception { return mapper.findByID(<#=fileCamelName#>); } /** * 根据条件查询数据数 * @param <#=fileCamelName#> 查询条件,需要查的字段赋值进行等查询 * @return 满足条件的记录数 */ @Override public Long findCountByCondition(<#=filePascialName#> <#=fileCamelName#>) throws Exception { return mapper.findCountByCondition(<#=fileCamelName#>); } public <#=filePascialName#>Mapper getMapper() { return mapper; } public void setMapper(<#=filePascialName#>Mapper mapper) { this.mapper = mapper; } } <# } 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; } #>