SubSonic 3.0簡介
接觸到SubSonic3.0 ORM框架是看了AllEmpty大神的從零開始編寫自己的C#框架(鏈接在此)系列的隨筆接觸到的,本文章學習內容源於AllEmpty大神。
SubSonic就是一個ORM開源框架。作者是Robe Conery,用C#語言寫的。其中包含了T4模板可以快速生成數據層實體類,這是一個實用的快速開發框架。讓開發人員原理SQL語句的拼接,專注於業務邏輯的實現。SubSonic 3.0支持MsSql、MySql與SQLite三種數據庫,對數據庫操作靈活,對生成的SQL語句會自動進行優化,雖然是ORM框架,但在性能上並沒有太大的損失。它上手容易,是一個非常棒的ORM開發框架。
我使用過程中的切身體會是:一次編寫,終身使用。將自己需要的功能寫在T4模板,利用T4模板強大的自定義功能可以迅速而准確地生成自己的實體類。可以Select類、實體類查詢,支持LINQ,支持聚合函數,支持存儲過程,可以使用Distinct關鍵字。(部分功能AllEmpty添加,我使用的是他的修改版)。
SubSonic 3.0配置
創建項目(整個解決方案下載鏈接在本文後面)並將SubSonic.Core和Castle.dll引用後,添加SubSonic文件夾。此時,整個項目的文件結構如下所示:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using SubSonic.Linq.Structure;
using SubSonic.Query;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Solution.DataAccess.DataModel;
namespace SubSonicTest
{
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//新增記錄
var branch1 = new Branch
{
DeptCode = SPs.P_Branch_GetMaxBranchDeptCode(2, 1).ExecuteScalar() + "",
Name = "網絡部",
Comment = "網絡問題解決中心",
ParentId = 1,
Sort = 8,
Depth = 2
};
//保存至數據庫
branch1.Save();
//打印出來S
PrintImpInfo("記錄添加成功,新增Id="+branch1.Id);
//查詢剛剛添加的記錄並修改
var branchModel = Branch.SingleOrDefault(x => x.Comment == "網絡問題解決中心");
branchModel.Name = "售後服務部";
branchModel.Save();
//刪除剛才添加的記錄
Branch.Delete(x => x.Comment == "網絡問題解決中心");
if (Branch.Exists(x => x.Comment == "網絡問題解決中心"))
{
PrintImpInfo("存在");
}
else
{
PrintImpInfo("不存在");
}
//查詢Branch下所有的數據
var list = Branch.All();
foreach (var branch in list)
{
PrintImpInfo(string.Format("名字={0},評論={1},添加日期={2}", branch.Name, branch.Comment, branch.AddDate.ToString("yyyy-MM-dd HH:mm:ss")));
}
// //使用類實體附帶的函數查詢
PrintImpInfo("使用類實體附帶的函數查詢");
var braanchList = Branch.Find(x => x.Id > 0);
foreach (var branch in braanchList)
{
PrintImpInfo(branch.Id.ToString());
PrintImpInfo(branch.Name);
PrintImpInfo(branch.AddDate.ToString("yyyy-MM-dd HH:mm:ss"));
}
PrintImpInfo("------------------------");
//分頁功能,獲取第2頁記錄(每頁5條記錄)
PrintImpInfo("獲取第2頁記錄(每頁5條記錄");
var il = Branch.GetPaged("Id Desc", 2, 4);
foreach (var branch in il)
{
PrintImpInfo(branch.Id.ToString());
PrintImpInfo(branch.Name);
PrintImpInfo(branch.Sort.ToString());
PrintImpInfo(branch.Depth.ToString());
PrintImpInfo(branch.ParentId.ToString());
PrintImpInfo(branch.AddDate.ToString("yyyy-MM-dd HH:mm:ss"));
}
PrintImpInfo("------------------------");
//使用數據庫名+DB可以直接調用聚合函數
PrintImpInfo("數據庫名+DB可以直接調用聚合函數");
var db = new SubSonicTestDB();
//平均值
PrintImpInfo("平均值"+db.Avg<Position>(x=>x.Id).Where<Position>(x=>x.Id<12).ExecuteScalar()+" ");
//計算數量
PrintImpInfo("計算數量" + db.Count<Position>(x => x.Id).ExecuteScalar() + " ");
//計算合計量
PrintImpInfo("計算合計量" + db.Sum<Position>(x => x.Id).ExecuteScalar() + " ");
//最大值
PrintImpInfo("最大值" + db.Max<Position>(x => x.Id).ExecuteScalar() + " ");
//最小值
PrintImpInfo("最小值" + db.Min<Position>(x => x.Id).ExecuteScalar() + " ");
//存儲過程調用方法
var obj = SPs.P_Branch_GetMaxBranchDeptCode(1,0).ExecuteScalar();
PrintImpInfo("存儲過程調用obj="+obj);
//Linq查詢方式
PrintImpInfo("Linq查詢方式");
var query = new Query<Branch>(db.provider);
var posts = from p in query
where p.DeptCode.StartsWith("0101")
select p;
foreach (var branch in posts)
{
PrintImpInfo(branch.ToString());
}
query = db.GetQuery<Branch>();
posts = from p in query
where p.Id > 3 && p.Id < 6
select p;
foreach (var branch in posts)
{
PrintImpInfo(branch.ToString());
}
var newBranchList = query.ToList<Branch>();
foreach (var branch in newBranchList)
{
PrintImpInfo(branch.ToString());
}
//Linq多表關聯查詢方式
PrintImpInfo("Linq多表關聯查詢方式");
var query1 = from b in Position.All()
join p in Branch.All() on b.Branch_Id equals p.Id
where p.DeptCode == "0101"
select p;
foreach (var branch in query1)
{
PrintImpInfo(branch.ToString());
}
}
/// <summary>
/// 在Debug模式下打印信息到輸出窗口中
/// </summary>
/// <param name="info"></param>
private void PrintImpInfo(string info)
{
System.Diagnostics.Debug.WriteLine(info);
}
}
}
加入斷點調試(要求Debug下),即可輸出打印出的內容,如下所示(打開輸出窗口的快捷鍵是Ctrl+Alt+O):
點此下載
一般整合的時候都會發生jar包沖突,或者版本不對,你重點解決這些,特別是jar包沖突問題
Spring Framework 【Java開源 J2EE框架】
Spring 是一個解決了許多在J2EE開發中常見的問題的強大框架。 Spring提供了管理業務對象的一致方法並且鼓勵了注入對接口編程而不是對類編程的良好習慣。Spring的架構基礎是基於使用JavaBean屬性的 Inversion of Control容器。然而,這僅僅是完整圖景中的一部分:Spring在使用IoC容器作為構建完關注所有架構層的完整解決方案方面是獨一無二的。 Spring提供了唯一的數據訪問抽象,包括簡單和有效率的JDBC框架,極大的改進了效率並且減少了可能的錯誤。Spring的數據訪問架構還集成了 Hibernate和其他O/R mapping解決方案。Spring還提供了唯一的事務管理抽象,它能夠在各種底層事務管理技術,例如JTA或者JDBC事務提供一個一致的編程模型。 Spring提供了一個用標准Java語言編寫的AOP框架,它給POJOs提供了聲明式的事務管理和其他企業事務--如果你需要--還能實現你自己的 aspects。這個框架足夠強大,使得應用程序能夠拋開EJB的復雜性,同時享受著和傳統EJB相關的關鍵服務。Spring還提供了可以和IoC容器集成的強大而靈活的MVC Web框架。【SpringIDE:Eclipse平台下一個輔助開發插件】.
WebWork 【Java開源 Web框架】
WebWork 是由OpenSymphony組織開發的,致力於組件化和代碼重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.1,現在的WebWork2.x前身是Rickard Oberg開發的WebWork,但現在WebWork已經被拆分成了Xwork1和WebWork2兩個項目。 Xwork簡潔、靈活功能強大,它是一個標准的Command模式實現,並且完全從web層脫離出來。 Xwork提供了很多核心功能:前端攔截機(interceptor),運行時表單屬性驗證,類型轉換,強大的表達式語言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。 WebWork2建立在Xwork之上,處理HTTP的響應和請求。WebWork2使用ServletDispatcher將HTTP請求的變成 Action(業務層Action類), session(會話)application(應用程序)范圍的映射,request請求參數映射。WebWork2支持多視圖表示,視圖部分可以使用 JSP, Velocity, FreeMarker, JasperReports,XML等。在WebWork2.2中添加了對AJAX的支持,這支持是構建在DWR與Dojo這兩個框架的基礎之上.【EclipseWork:用於WebWork輔助開發的一個Eclipse插件】
Struts 【Java開源 Web框架】
Struts 是一個基於Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技術來實現的。由於Struts能充分滿足應用開發的需求,簡單易用,敏捷迅速,在過去的一年中頗受關注。Struts把Servlet、JSP、自定義標簽和信息資源(message resources)整合到一個統一的框架中,開發人員利用其進行開發時不用再自己編碼實現全套MVC模式,極大的節省了時間,所以說Struts是一個非常不錯的應用框架。【Stru......余下全文>>