nhibernate源碼
① 如何學習hibernate源碼
我來分享一下查看源碼的方法:
查看源碼的首要任務是要有一款上手的工具,這里用的是 IDEA。IDEA 的功能比較強大,包括 查看類結構圖,debug。這兩個是查看源碼的關鍵功能。
查看源碼可以靜態查看和動態查看,靜態查看的方法是查看類圖,還有 ALT + f7 查看方法在哪裡被調用或者類在哪裡被調用。在看 spring 源碼的時候就是用這種方法,不過這種方法對閱讀者的要求比較高,包括要了解這個方法的執行,設計模式的理解,以及框架是如何配置這個類的。第二種方法是 debug。debug 方法是後來才發現的一個重要的 查看源碼的方法,要點是掌握執行棧,就能掌握整個執行流程。比如這個是在debug hibernate 源碼的時候的截圖,可以看到這個執行棧非常深,從 spring-data-jpa 到 hibernate 中間經過好幾層的代理,主要完成一些適配,事務,攔截器等等操作,然後再到 hibernate 核心代碼,最後就是 jdbc 的 statement。方法棧中的每一個方法都是可以查看的,裡面的變數有時候是代理了好幾層,所以要 F7 進去才能看到真正的執行類。
上面是簡單的簡述 mybatis 的 cache 機制的源碼,真正想讓讀者明白的是,debug 如何查看源碼,查看源碼需要抓住一個主題,不然在閱讀龐大的框架的時候會找不著北。
所以,閱讀源碼需要掌握工具使用,debug, 查看類圖,查看方法在哪裡調用,軟知識是要掌握設計模式,對框架的概念有了解。
② C#相關框架有哪些
winform開發主流框架依然是N層架構,隨著時間的推移,從面向對象集成系統開發轉向面向服務的分布式開發,C#asp.net當前主流架構依然是MVC類似於C#的N層架構框架當前是MVC5。
相關框架如下:
1、Json.NET
是一個讀寫Json效率比較高的.Net框架.Json.Net 使得在.Net環境下使用Json更加簡單。通過Linq To JSON可以快速的讀寫Json,通過JsonSerializer可以序列化你的.Net對象。讓你輕松實現.Net中所有類型(對象,基本數據類型 等)和Json的轉換。
2、Math.NET
目標是為提供一款自身包含清晰框架的符號運算和數學運算/科學運算,它是C#開發的開源類庫。Math.NET含了一個支持線性代數的解析器,分析復雜微分,解方程等等功能。
3、Faker.Net
開發的時候是不是為測試數據煩惱?Faker.Net可以非常方便幫你生成大批量測試數據。例如人員表裡面的姓名、性別什麼的。
4、Html Agility Pack
是CodePlex 上的一個開源項目。它提供了標準的DOM API 和XPath 導航--即使 HTML 不是適當的格式!HTML Agility Pack 搭配 ScrapySharp,徹底解除Html解析的痛苦。
5、NCrawler
是一款國外的開源網路爬蟲軟體,遵循LGPL許可協議。其HTML處理使用的是htmlagilitypack開源庫,採用xpath的方式處理定位網頁元素,十分方便。
6、SuperWebSocket
基於.NET開源Socket框架SuperSocket開發的, SuperSocket所支持的大部分功能在SuperWebSocket中得到了繼承。用戶可通過SuperWebSocket來快速的構建可靠的,高性能的websocket伺服器端應用程序。
7、SuperSocket
一個輕量級的可擴展的 Socket 開發框架,可用來構建一個伺服器端 Socket 程序,而無需了解如何使用 Socket,如何維護Socket連接,Socket是如何工作的。該項目使用純 C# 開發,易於擴展和集成到已有的項目。只要你的已有系統是使用.NET開發的,你都能夠使用 SuperSocket來輕易的開發出你需要的Socket應用程序來集成到你的現有系統之中。
8、Quartz.NET
一個開源的作業調度框架,是 OpenSymphony 的 Quartz API的.NET移植,它用C#寫成,可用於winform和asp.net應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執行一個作業而 創建簡單的或復雜的調度。它有很多特徵,如:資料庫支持,集群,插件,支持cron-like表達式等等。
9、Lucene.Net
Lucene的.net移植版本,是一個開源的全文檢索引擎開發包,即它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎。開發人員可以基於Lucene.net實現全文檢索的功能。
10、HttpLib
一個基於C#語言的http協議的類庫,Httplib讓非同步交互處理數據更容易了。類庫的方法包括:上傳文件到伺服器,獲取頁面數據等等。
11、Smart Thread Pool
智能線程池,用SmartThreadPool可以簡單就實現支持多線程的程序,由線程池來管理線程,可以減少死鎖的出現。SmartThreadPool還支持簡單的生產者-消費者模式,當不需要對任務進行持久化時,還是很好用的。
12、DocX
是一個用來操作word的輕量級的類庫。藉助DocX,開發人員可以在不需要安裝Microsoft Word的情況下操縱word2007/2010文件。
13、NPOI
是POI項目的 .NET 版本。POI是一個開源的java讀寫Excel、WORD等微軟OLE2組件文檔的項目。使用 NPOI 你就可以在沒有安裝 Office 或者相應環境的機器上對 WORD/EXCEL 文檔進行讀寫。NPOI是構建在POI 3.x版本之上的,它可以在沒有安裝Office的情況下對Word/Excel文檔進行讀寫操作。
14、PDFsharp
可以輕松地在 .NET 語言中創建PDF文檔的開放源碼庫。它使用相同的繪製程序來創建 PDF 文檔,在屏幕上顯示,以及輸出到列印機。可以修改、合並、拆分已經存在的 PDF 文件,支持透明圖像。
15、Dapper
一個輕型的ORM類。代碼就一個 sqlMapper.cs文件,編譯後就40K的一個很小的Dll.Dapper很快。Dapper的速度接近與IDataReader,取列表的數據超 過了DataTable。Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的資料庫,當然如 果你知道原理也可以讓它支持Mongo db。話說,這個ORM,博主自己也一直在使用,確實十分強悍,至少在性能方面,恐怕.NET裡面的大多數ORM只能是望其項背了。
16、NHibernate
現在開發人員用的較多的一個ORM。NHibernate是一個面向.NET環境的對象/關系資料庫映射工具。對象/關系資料庫映射(object/relational mapping,ORM)這個術語表示一種技術,用來把對象模型表示的對象映射到基於SQL的關系模型數據結構中去。
17、log4net
Apachelog4j框架在Microsoft .NET平台的實現,是一個幫助程序員將日誌信息輸出到各種目標(控制台、文件、資料庫等)的工具。
18、SharpSerializer
一個開源XML和二進制序列化器。SharpSerializer可以序列化Xml和自己的二進制格式,還可以序列化Json等其他文本格式或其他數據加密,壓縮,優化等二進制流。
19、XProxy
一個支持插件的基礎代理程序集。通過編寫簡單的插件程序,你將能開發各種各樣的代理程序。
XProxy是一個支持插件開發的數據交換機,可以編寫插件對中轉數據進行處理。內置有NAT插件、加解密插件、反向代理、直接代理、間接代理等插件。
20、nopCommerce
國外的一個高質量的開源b2c 網站系統,基於EntityFramework4.0和MVC3.0,使用Razor模板引擎,有很強的插件機制,包括支付配送功能都是通過插件來實現 的,基於xml的多語言版本,非常靈活的語言切換功能,包括在後台都能同時編輯產品的中英文屬性,非常適合做外貿,優秀超前的程序架構,性能也非常強大, 自定義的產品名稱和分類又有很好的seo優化。綜合能力遠遠高於國內的一些程序架構糟糕的.net商城程序,是二次開發和大型b2c架構的首選。3.0開 始支持多店。
21、Enterprise Library
目前最新版本為v5.0,支持.NET Framework 4.0,共包括9個Application Block,包括數據訪問(Data Access Application Block)、異常管理(Exception Handling Application Block)、數據驗證(Validation Application Block)等等,對企業應用開發非常有幫助,也非常實用。
22、Autofac
一款非常優秀的IOC框架,比較於其他的IOC框架,如Spring.NET,等等之類的,它非常的輕量級且性能上也很卓越。
23、AutoMapper
一個.NET的對象映射工具。主要用於領域對象與DTO之間的轉換、資料庫查詢結果映射至實體對象。
24、7-Zip
一款號稱有著現今最高壓縮比的壓縮軟體,它不僅支持獨有的 7z 文件格式,而且還支持各種其它壓縮文件格式,其中包括 ZIP, RAR, CAB, GZIP, BZIP2和 TAR 等等。此軟體壓縮的壓縮比要比普通 ZIP 文件高 30-50% ,因此,它可以把 Zip 格式的文件再壓縮 2-10% 。
③ 如何學習hibernate源碼
學習 Hibernate 源碼一
1. 下載 hibernate 源碼,並構建起 eclipse 項目
( 1 ) hibernate 的源代碼採用 git 管理,安裝 git 客戶端以後,通過點擊 github.com/hibernate/hibernate-orm 頁面右側的「 Clone in Desktop 」可啟動客戶端將代碼 clone 到本地。當然也可以直接使用
git clone git://github.com/hibernate/hibernate-orm.git
命令下載代碼。
下載完畢後,打開根目錄下的 readme 文件,可以看到詳細的把源代碼構建為不同 IDE 項目的說明;以及其他的一些信息。
對應文檔的網站鏈接:
community.jboss.org/wiki/BuildingHibernateORM4x5x
構建 IDE 部分:
Eclipse
To create the Eclipse project files you can run
After changes to the dependencies you need to clean the project files and recreate them:
./gradlew cleanEclipse eclipse
See also Contributing to Hibernate using Eclipse
Idea
To create the Idea project files you can run
./gradlew idea
After changes to the dependencies you need to clean the project files and recreate them:
./gradlew cleanIdea idea
此處的 gradle 是 hibernate 所使用的自動構建工具,官網地址為行基:
.gradle.org/
下載地址為: .gradle.org/downloads ,選擇一個版本進行下載
此處是 Hibernate 團隊闡述其從 Maven 遷移到 Gradle 的原因: community.jboss.org/wiki/GradleWhy
褲腔至於 grable ,有時間會深入學習一下,感興趣的同學可以看看這位博主的博客:
.blogjava.net/wldandan/archive/2012/06/26/381532.html
言歸正傳,下載 grable 後,解壓,我將胡帶衫其解壓到了 C 盤根目錄,解壓完畢的 grable 所在目錄為: C:\gradle-1.7 ,將其子目錄 C:\gradle-1.7\bin 目錄加入系統的 Path 變數
編譯代碼為 eclipse 項目:
( 1 )進入 hibernate 源碼的根目錄:
cd C:\Users\Administrator\Documents\GitHub\hibernate-orm
( 2 )執行 gradlew.bat eclipse
接著會自動下載項目所需要的依賴項,具體輸出如下:
C:\Users\Administrator\Documents\GitHub\hibernate-orm >gradlew.bat eclipse
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheled to be removed in Gradle 2.0. Please read gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on
Deprecated dynamic property: "exportPackageVersion" on "project ':documentation'", value: "4.3.0".
Deprecated dynamic property "exportPackageVersion" created in multiple locations.
FAILURE: Build failed with an exception.
* Where:
Build file 'C:\Users\Administrator\Documents\GitHub\hibernate-orm\build.gradle' line: 85
* What went wrong:
A problem occurred evaluating root project 'hibernate-orm'.
> org/hibernate/build/gradle/publish/auth/maven/AuthenticationManager : Unsupported major.minor version 51.0
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
此時我去查看我的環境變數, JAVA_HOME 指向的是 64 位的 JDK6 ,將其指向 32 位 JDK7 後再次執行
gradlew.bat eclipse
發現此時 gradlew 又去下載了其他的依賴包,查看 hibernate-rom 目錄下的 libraries.gradle 文件,可以看到 hibernate 的依賴包。
重新編譯過程中還是報錯了,具體錯誤:
:hibernate-core:compileJava
警告 : [options] 未與 -source 1.6 一起設置引導類路徑
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-core\src\main\java\org\hibernate\annotations\Loader.java:38: 錯誤 : 編碼 GBK 的不可映射字元
* @author L 錕絪 zl 錕 ?Benke
^
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-core\src\main\java\org\hibernate\annotations\ResultCheckStyle.java:29: 錯誤 : 編碼 GBK 的不可映射字元
* @author L 錕絪 zl 錕 ?Benke
^
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-core\src\main\java\org\hibernate\annotations\SQLDelete.java:37: 錯誤 : 編碼 GBK 的不可映射字元
* @author L 錕絪 zl 錕 ?Benke
^
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-core\src\main\java\org\hibernate\annotations\SQLDeleteAll.java:37: 錯誤 : 編碼 GBK 的不可映射字元
* @author L 錕絪 zl 錕 ?Benke
^
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-core\src\main\java\org\hibernate\annotations\SQLInsert.java:37: 錯誤 : 編碼 GBK 的不可映射字元
* @author L 錕絪 zl 錕 ?Benke
^
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-core\src\main\java\org\hibernate\annotations\SQLUpdate.java:37: 錯誤 : 編碼 GBK 的不可映射字元
* @author L 錕絪 zl 錕 ?Benke
^
注 : 某些輸入文件使用或覆蓋了已過時的 API 。
注 : 有關詳細信息 , 請使用 -Xlint:deprecation 重新編譯。
注 : 某些輸入文件使用了未經檢查或不安全的操作。
注 : 有關詳細信息 , 請使用 -Xlint:unchecked 重新編譯。
1 個警告
google 了一下,貌似是區域語言設置的問題,需要修改為「英語(英國)」,但編譯並沒用中斷,接著編譯。我將控制面板中的區域語言設置修改後,繼續觀察,看其是否還會報同樣的錯誤。
最終還是失敗了:
:hibernate-entitymanager:compileJava
警告 : [options] 未與 -source 1.6 一起設置引導類路徑
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-entitymanager\src\main\java\org\hibernate\jpa\AvailableSettings.java:290: 錯誤 : 編碼 GBK 的不可映射字元
* contains 鈥淐 REATE SCHEMA 鈥 ?commands. If this property is not supplied (or is explicitly {@code false}), the
^
注 : 某些輸入文件使用或覆蓋了已過時的 API 。
注 : 有關詳細信息 , 請使用 -Xlint:deprecation 重新編譯。
注 : 某些輸入文件使用了未經檢查或不安全的操作。
注 : 有關詳細信息 , 請使用 -Xlint:unchecked 重新編譯。
④ C# 中如何將SQL資料庫中讀取到的 一整行數據 存到數組,最好是list中,請寫詳細答案
輸入框一般都是textbox,命名用戶名輸入框為textbox1密碼為textbox2
select
*
from
【表名】
where
[欄位名]='"
+
textbox1.text
+
"'
一般都是用sqldatareader
dr
去讀取,如果讀取到了說明這個用戶名存在,那麼在判斷密碼欄位dr["pwd"].tostring()
==textbox2.text.tostring()是否等於textbox2輸入的。如果沒有讀到,那說明這個用戶名不存在,可以直接彈出錯誤提示。
這是大概思路,如果想要全部源碼可以向我直接提問,說明問題附帶說明要源碼就可以。
⑤ 關於.net項目 框架選取(orm或其他) ,中型電子商務網站,使用什麼框架比較好(性能、效率、易維護)
你說的3個都是資料庫ORM框架,如果你不熟悉,項目時間不多,就不要用了,
使用EnterpriseLibrary調用SQL或存儲過程,這樣比較簡單,性能可以說最好
網上搜的三層架構EnterpriseLibrary源碼,很多的