前面正在介紹 hibernate 的開發(fā)教程,提到 hibernate 在 .Net 平臺上相應(yīng)的 ORM 工具為NHibernate,使用 NHibernate 就不能不提到 CodeSmith。
CodeSmith 是一種基于模板的代碼生成工具,它使用類似于 ASP.NET 的語法來生成任意類型的代碼或文本。與其他許多代碼生成工具不同,CodeSmith 不要求您訂閱特定的應(yīng)用程序設(shè)計(jì)或體系結(jié)構(gòu)。使用 CodeSmith,可以生成包括簡單的強(qiáng)類型集合和完整應(yīng)用程序在內(nèi)的任何東西。當(dāng)您生成應(yīng)用程序時(shí),您經(jīng)常需要重復(fù)完成某些特定的任務(wù),例如編寫數(shù)據(jù)訪問代碼或者生成自定義集合。CodeSmith 在這些時(shí)候特別有用,因?yàn)槟梢跃帉懩0遄詣油瓿蛇@些任務(wù),從而不僅提高您的工作效率,而且能夠自動完成那些最為乏味的任務(wù)。CodeSmith 附帶了許多模板,包括對應(yīng)于所有 .NET 集合類型的模板以及用于生成存儲過程的模板,但該工具的真正威力在于能夠創(chuàng)建自定義模板。
CodeSmith 可以從網(wǎng)站 http://www.codesmithtools.com/ 下載,個(gè)人開發(fā)版費(fèi)用在300美元左右,個(gè)人認(rèn)為還是物有所值。
還是用一個(gè)例子來說明一下使用 CodeSmith 可以大大減輕程序代碼的工作量,對于數(shù)據(jù)庫應(yīng)用來說,盡管數(shù)據(jù)庫表不盡相同,但基本過程都是定義數(shù)據(jù)庫表,設(shè)計(jì)表對應(yīng)的類,然后使用 ADO 或是 SQL 語句來訪問數(shù)據(jù)庫,創(chuàng)建對應(yīng)的類對象等。
使用 CodeSmith 提供的模板,可以幾乎不用手工編寫一行代碼,就可以自動生成上述數(shù)據(jù)庫相關(guān)的代碼。
本例使用 Visual Studio 2010 ,Codesmith 安裝時(shí)提供了 Visual Studio 插件支持。使用的示例數(shù)據(jù)庫也是 Sales,可以參見 Hibernate 開發(fā)教程(2):準(zhǔn)備開始。
由于使用 MySQL 數(shù)據(jù)庫,需要下載 MySQL .Net 庫。使用 SQL Server 可以直接使用。
創(chuàng)建一個(gè)命令行應(yīng)用 solution。
這里的 Connection String 為: SERVER=localhost;DATABASE=sales;UID=username;PASSWORD=password;(根據(jù)你自己服務(wù)器自行修改參數(shù))
添加成功后,在 Schema Explorer 中會顯示所連接的數(shù)據(jù)庫的表定義等
使用有 Add Output 可以在項(xiàng)目中添加生成代碼的模板,這里選用 CodeSmith 自帶的 PLINQO-NH\CSharp 下的三個(gè)模板,
模板路徑為..\Users\…\Documents\CodeSmith Generator\Samples\v6.5\Templates\Frameworks\PLINQO-NH\CSharp\
分別添加三個(gè)模板,SourceDatabase 選擇 Schema Explorer 中添加的 Sales 數(shù)據(jù)庫,其它屬性使用缺省值。
三個(gè)模板分別為
然后通過 Sales.csp 的 Generate code 生成代碼。
可以看到 CodeSmith 自動生成了很多代碼,并添加了所需的引用。
此時(shí)用來訪問數(shù)據(jù)的類全部由 CodeSmith 生成,無需自己寫一行代碼。
var salesDataContext = new SalesDataContext();
foreach (var s in salesDataContext.Customer.ToList())
{
Console.WriteLine(s.FirstName+" " + s.LastName);
}
使用 SalesDataContext 中 Customer 查詢對象。然后枚舉列表中每個(gè) Customer 對象并打印出FirstName 和 Last Name.可以看到代碼自動完成了對數(shù)據(jù)庫的讀取訪問。
由本例看到使用 CodeSmith 可以大大減輕手工代碼量,其使用的一般步驟是
后面將詳細(xì)介紹 CodeSmith 使用的基本方法,CodeSmith 的核心為模板,因此重點(diǎn)在模板的設(shè)計(jì)和使用。
更多建議: