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源码,很多的