PDF.NET SOD 開源框架紅包派送活動 && 新手快速入門指引
一、框架的由來 快速入門
有關框架的更多資訊,請看框架官方主頁! 本套框架的思想是借鑑Java平臺的Hibernate 和 iBatis 而來,兼有ORM和SQL-MAP的特性,同時還參考了後來.NET的LINQ(本框架成型於2006年,當時還未聽說過LINQ)使用風格,設計了OQL查詢表示式。本框架的設計思想是通用的,完全可以移植到Java 平臺,現在只提供了.NET平臺的實現,暫且將本框架命名為 PDF.NET |
---|
從2013.10.1日起,原PDF.NET 將更名為 SOD one SQL-MAP,ORM,Data Control framework 原PDF.NET框架將成為一個全功能的企業開發框架,而 SOD框架將是PDF.NET開發框架下面的 “資料開發框架" PDF.NET 開源歷史: 2010.2--PDF.NET3.0 會員釋出版 2010.5--PDF.NET3.5 會員釋出版 2011.3--PDF.NET4.0 會員釋出版 2011.9--PDF.NET Ver 3.0 開源版 節前送禮:PDF.NET(PWMIS資料開發框架)V3.0版開源 http://www.cnblogs.com/bluedoctor/archive/2011/09/29/2195751.html 2012.9--PDF.NET Ver 4.5 開源版 節前送禮:PDF.NET(PWMIS資料開發框架)V4.5版開源 2014.1--PDF.NET Ver 5.1 春節前最後一篇,CRUD碼農專用福利:PDF.NET之SOD Version 5.1.0 開源釋出(兼更名) 2015.2--PDF.NET SOD Ver5.1 一年之計在於春,2015開篇:PDF.NET SOD Ver 5.1完全開源 開源協議: 框架類庫開源協議:採用LGPL協議,該協議允許商業使用,但僅限於包含類庫釋出,不得將原始碼作為商業行為銷售分發,詳情請看該協議的官方說明。 框架支援工具開源協議:採用GPL協議,不可用於商業銷售分發和修改,如果你想用於商業用途或者閉源使用,請單獨購買許可,詳情請看該協議官方說明。 框架相關示例Demo開源協議:採用MIT協議,可自由修改使用,詳情請看該協議官方說明。 注:框架的支援工具指的是整合開發工具,可以連線各種資料庫進行查詢,生成實體類,SQL-MAP DAL和 SqlMap.config 檔案。 |
- 2010.2--PDF.NET3.0 會員釋出版
- 2010.5--PDF.NET3.5 會員釋出版
- 2011.3--PDF.NET4.0 會員釋出版
- 2011.9--PDF.NET Ver 3.0 開源版 節前送禮:PDF.NET(PWMIS資料開發框架)V3.0版開源 http://www.cnblogs.com/bluedoctor/archive/2011/09/29/2195751.html
- 2012.9--PDF.NET Ver 4.5 開源版 節前送禮:PDF.NET(PWMIS資料開發框架)V4.5版開源
- 2014.1--PDF.NET Ver 5.1 春節前最後一篇,CRUD碼農專用福利:PDF.NET之SOD Version 5.1.0 開源釋出(兼更名)
- 2015.2--PDF.NET SOD Ver5.1 一年之計在於春,2015開篇:PDF.NET SOD Ver 5.1完全開源
開源協議:
- 框架類庫開源協議:採用LGPL協議,該協議允許商業使用,但僅限於包含類庫釋出,不得將原始碼作為商業行為銷售分發,詳情請看該協議的官方說明。
- 框架支援工具開源協議:採用GPL協議,不可用於商業銷售分發和修改,如果你想用於商業用途或者閉源使用,請單獨購買許可,詳情請看該協議官方說明。
- 框架相關示例Demo開源協議:採用MIT協議,可自由修改使用,詳情請看該協議官方說明。
注:框架的支援工具指的是整合開發工具,可以連線各種資料庫進行查詢,生成實體類,SQL-MAP DAL和 SqlMap.config 檔案。
二、開源捐助賬號
右圖為二維碼捐款方式 感謝所有PDF.NET 框架的會員朋友熱心的捐助,併為框架不斷完善和推廣作出的傑出貢獻!2015新春之際,送紅包給大家! |
---|
三、快速入門:
3.1,總覽
SOD框架分為3大部分:
- SQL-MAP
- ORM
- Data Control
3.2,“SqlHelper”基礎
這三大部分,都是基於AdoHelper元件,它符合MS DAAB標準,所以熟悉SqlHelper的人應該很容易上手,下面舉例說明:
AdoHelper helper=new SqlServer();
DataSet ds=helper.ExecuteDataSet( ”Data Source=.;Initial Catalog=LocalDB;Integrated Security=True”,
CommandType.Text,
”SELECT * FROM Table_User”);
AdoHelper是一個抽象類,所以它可以例項化成其他資料庫訪問類,比如繼續下面的程式碼:
helper=new Access(); //Access資料庫訪問類
DataSet dsAcc=helper.ExecuteDataSet( ”Provider=Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Engine Type=6;Data Source=D:DataSuperMarket.accdb”,
CommandType.Text,
”SELECT * FROM Table_User”);
在 PWMIS.Core.dll SOD核心庫中,內建了SqlServer,SqlServerCe,Access,Oracle,OleDb,Odbc 等常見的資料庫訪問類提供程式。
在程式中每次都指定連線字串和查詢命令型別,好處是“隨用隨取”,執行緒安全,隨時隨地“SqlHelper”,但不好之處就是程式碼冗餘,所以可以把資料訪問類型別和連線字串放到應用程式配置檔案中(App.config / Web.config ):
<connectionStrings>
<add name="AccessDb"
在上面的連線配置中, providerName="Access" 表示這將是用SOD框架的Access資料庫訪問提供程式,同樣道理,如果 providerName="SqlServer" 將使用SqlServer提供程式。
如果是SOD 核心程式之外的資料訪問提供程式,需要使用下面格式的連線配置:
<add name="default"
connectionString="server=10.0.0.1;User Id=pdfnet;password=pdfnet2015;CharSet=utf8;DataBase=test;Allow Zero Datetime=True"
providerName="PWMIS.DataProvider.Data.MySQL,PWMIS.MySqlClient"/>
這個配置說明,連線名為 default 的SOD資料訪問驅動程式 所在程式集 是 PWMIS.MySqlClient.dll ,提供程式全名稱是 PWMIS.DataProvider.Data.MySQL 。
注意:Web.config 檔案中,連線字串支援|DataDirectory| 路徑格式。
配置了資料庫連線資訊之後,就可以在程式中像下面這樣使用了:
using PWMIS.DataProvider.Adapter;//…
AdoHelper accessDb1=MyDB.Instance;//應用程式配置檔案連線配置節的最後一個數據連線配置
AdoHelper accessDb2=MyDB.GetDBHelperByConnectionName(“AccessDb”); //連線字串名字
注意示例中的 MyDB.Instance 物件,這是系統使用的預設資料訪問類,它始終讀取的是應用程式配置檔案連線配置節的最後一個數據連線配置,這是一個靜態單利物件,請勿在事務中使用它,初此之外,在任何地方使用它都是可以的,但仍然不建議你在多執行緒環境下使用 MyDB.Instance 這個AdoHelper的單例物件,推薦 accessDb2 的AdoHeper 例項化方式。
3.3,微型ORM
除此之外,AdoHelper 物件還是一個“微型ORM”,請看下面的示例:
AdoHelper dbLocal = new SqlServer();
dbLocal.ConnectionString = "Data Source=.;Initial Catalog=LocalDB;Integrated Security=True";
var dataList = dbLocal.GetList(reader =>
{
return new
{
UID=reader.GetInt32(0),
Name=reader.GetString(1)
};
}, "SELECT UID,Name FROM Table_User WHERE Sex={0} And Height>={1:5.2}",1, 1.60M);
上面將一條SQL語句的結果,直接對映到了一個匿名實體類上,注意還有格式化引數的功能。
如果不想接SQL結果對映到匿名型別上,而是一個結構根SQL結果型別相同的POCO類上,可以這樣使用:
//假設UserPoco 物件跟 Table_User 表是對映的相同結構
AdoHelper dbLocal = new SqlServer();
dbLocal.ConnectionString = "Data Source=.;Initial Catalog=LocalDB;Integrated Security=True";
var list=dbLoal.QueryList<UserPoco>("SELECT UID,Name FROM Table_User WHERE Sex={0} And Height>={1:5.2}",1, 1.60M);
該功能可以類似流行的Dapper 資料訪問元件,可以使用SOD AdoHelper替代使用。
3.4,小結:
上面說明了PDF.NET SOD框架最基礎的資料訪問元件 AdoHelper 的使用,但這也是很多新手朋友不太清楚的地方,特別是 MyDB.Instance 單例物件容易濫用,一定要掌握。
SOD框架絕大部分情況下,只需要進行上面的資料連線配置,即可順利執行程式碼了,比起Entity Framework 的配置來,是不是簡單很多?
看到這裡,我想你應該入門了,下面就讓我們簡要的瀏覽下SOD框架的一個大概。
----
四、SQL-MAP
你是不是曾經或者看到過別人做的專案,
- 大量拼接SQL語句,或者SQL引數化查詢後拖沓呈長而又繁瑣的程式碼,甚至SQL滿天飛?
- 維護這樣的程式碼是不是非常痛苦?
- 每天寫這樣的CRUD程式碼是不是感覺有點浪費生命?
現在好了,你可以將所有SQL語句集中寫到一個配置檔案中,集中管理維護你的查詢程式,甚至,這個工作你可以丟給DBA去做!
本功能類似於Java界著名的 iBatis 和移植到.Net的 MyBatis.Net ,但是,SQL-MAP去除了它們沉長的配置,並且使用工具自動生成程式碼,使得編寫DAL 資料訪問層不需要寫一行程式碼,請參考下面的文章:
《PDF.NET 之SQL-MAP 使用圖解教程》
更多的內容,你也可以參考SOD框架官方部落格的介紹:
(PDF.NET框架例項講解)將儲存過程對映為實體類
使用XSD編寫具有智慧提示的XML檔案(以SQL-MAP指令碼為例項)
PDF.NET(PWMIS資料開發框架)之SQL-MAP目標和規範
抽象SQL查詢:SQL-MAP技術的使用
使用OQL+SQLMAP解決ORM多表複雜的查詢問題
PDF.NET資料開發框架 之SQL-MAP使用儲存過程
五、ORM
SOD框架發明了獨具特色的ORM查詢語言OQL,它基本覆蓋了SQL92標準的大部分功能,使得你在VS IDE 使用“物件化的SQL”。目前做到這個功能的除了Linq之外,沒有更多的ORM具有這個能力,但是對比EF框架的查詢語言Linq,OQL有自己的特色,它跟SQL更為接近,對.NET框架的依賴非常小,這使得你有可能將OQL移植到Java ,C++ 這樣的面向物件的語言。
下面給出一個簡單的示例,有關該示例的詳細內容,請參考這篇部落格文章《DataSet的靈活,實體類的方便,DTO的效率:SOD框架的資料容器,打造最適合DDD的ORM框架》
SOD的實體類示例:
public class UserEntity:EntityBase, IUser
{
public UserEntity()
{
TableName = "Users";
IdentityName = "User ID";
PrimaryKeys.Add("User ID");
}
public int UserID
{
get { return getProperty<int>("User ID"); }
set { setProperty("User ID", value); }
}
public string FirstName
{
get { return getProperty<string>("First Name"); }
set { setProperty("First Name", value,20); }
}
public string LasttName
{
get { return getProperty<string>("Last Name"); }
set { setProperty("Last Name", value,10); }
}
public int Age
{
get { return getProperty<int>("Age"); }
set { setProperty("Age", value); }
}
}
這是一個簡單的使用者資訊實體類,它繼承了一個介面 IUser ,在App.config 中配置了資料連線後,就可以像下面這樣使用了:
EntityBuilder.RegisterType(typeof(IUser), typeof(UserEntity));
UserEntity user = EntityBuilder.CreateEntity<IUser>() as UserEntity;
//實體類作為索引器使用
注意:該例項需要SOD框架最新版本的支援,你也可以使用之前的方式,使用EntityQuery<T> 來操作實體類。
另外,SOD的ORM也支援根據介面之間建立實體類並查詢的功能,請看下面的示例:
static void TestGOQL()
{
string sqlInfo="";
//下面使用 ITable_User 或者 Table_User均可
List<ITable_User> userList =
OQL.FromObject<ITable_User>()
//.Select() //選全部自斷
.Select(s => new object[] { s.UID, s.Name, s.Sex }) //僅選取3個欄位
.Where((cmp, user) => cmp.Property(user.UID) < 100)
.OrderBy((o,user)=>o.Asc(user.UID))
.Limit(5, 1) //限制5條記錄每頁,取第一頁
.Print(out sqlInfo)
.ToList();
Console.WriteLine(sqlInfo);
Console.WriteLine("User List item count:{0}",userList.Count);
}
有關該功能的詳細內容介紹,請看部落格文章《一行程式碼呼叫實現帶欄位選取+條件判斷+排序+分頁功能的增強ORM框架》。
六、Data Control
框架支援Windows Forms,WebForms 的窗體程式設計,擴充套件了一套資料控制元件,包括常用的 文字框、複選框、單選框、列表框、日曆控制元件、標籤控制元件等。這些控制元件全部遵循SOD的窗體資料介面,實現這個介面的控制元件將極大的簡化窗體應用程式的資料操作,有關內容詳細介紹,請看這篇部落格文章:
《不使用反射,“一行程式碼”實現Web、WinForm窗體表單資料的填充、收集、清除,和到資料庫的CRUD》
你也可以在 pwmis.codeplex.com 下載原始碼,找到下面地址對應的SimpleAccessWinForm,
或者下載這個
或者看這個
這2個示例應用程式,都演示了WinForm下如何使用Data Control 資料控制元件簡化CRUD窗體程式設計。
另外,如果你是WebForms 應用程式,開源專案的超市管理系統原始碼 你可以看看,
或者直接下載這個(版本較老)
結束語:
SOD不僅僅是一個ORM,它還有SQL-MAP和DataControl,具體可以看框架官網 http://www.pwmis.com/sqlmap ,9年曆史鑄就的成果,堅固可靠。
非常感謝你看到這裡,相信你初步瞭解了SOD框架的基本功能,如果您還有其它問題,歡迎你在專案的開源網站 pwmis.codeplex.com 的討論去發帖,或者去官方部落格相關文章回帖也可。
最後,祝願所有.NET 程式設計師早日擺脫日復一日的CRUD功能,感謝大家對PDF.NET SOD框架一如既往的支援,
2015年新春之際,祝賀各位會員和其他使用框架的朋友喜氣洋洋,閤家歡樂,萬事如意!
附註:如果大家還沒有買到節日期間的火車票,推薦本框架開發作者自主開發的《12306無聲購票彈窗通知小工具》,工作搶票2不誤,綠色無毒安全放心!
深藍醫生
2015.2 月春節