PDF.NET SOD 开源框架红包派送活动 新手快速入门指引

2023-11-03 17:30

本文主要是介绍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

PDF.NET 开源历史:

  1. 2010.2--PDF.NET3.0 会员发布版
  2. 2010.5--PDF.NET3.5 会员发布版
  3. 2011.3--PDF.NET4.0 会员发布版
  4. 2011.9--PDF.NET Ver 3.0 开源版    节前送礼:PDF.NET(PWMIS数据开发框架)V3.0版开源    http://www.cnblogs.com/bluedoctor/archive/2011/09/29/2195751.html
  5. 2012.9--PDF.NET Ver 4.5 开源版 节前送礼:PDF.NET(PWMIS数据开发框架)V4.5版开源
  6. 2014.1--PDF.NET Ver 5.1 春节前最后一篇,CRUD码农专用福利:PDF.NET之SOD Version 5.1.0 开源发布(兼更名)
  7. 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新春之际,送红包给大家!

hongbao

三、快速入门:

3.1,总览

SOD框架分为3大部分:

  1. SQL-MAP
  2. ORM
  3. 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:\Data\SuperMarket.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"
  connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Engine Type=6;Data Source= |DataDirectory|SuperMarket.accdb"
  providerName="Access"/></connectionStrings>
复制代码

在上面的连接配置中, 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”); //连接字符串名字
AdoHelper mySqlDb=MyDB.GetDBHelperByConnectionName(“default”); //连接字符串名字 
bool flag= accessDb.GetType() == typeof(Access); //flag=true;
bool flag2= mySqlDb.GetType() == typeof(PWMIS.DataProvider.Data.MySQL); //flag2=true;
复制代码

注意示例中的 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框架实例讲解)将存储过程映射为实体类 深蓝医生 2011-08-18 17:25 阅读:1748 评论:6

使用XSD编写具有智能提示的XML文件(以SQL-MAP脚本为实例) 深蓝医生 2011-05-13 12:17 阅读:1609 评论:7

PDF.NET(PWMIS数据开发框架)之SQL-MAP目标和规范 深蓝医生 2011-05-07 00:05 阅读:937 评论:1

抽象SQL查询:SQL-MAP技术的使用 深蓝医生 2011-05-06 11:59 阅读:3598 评论:21

使用OQL+SQLMAP解决ORM多表复杂的查询问题 深蓝医生 2011-02-25 19:08 阅读:928 评论:0

PDF.NET数据开发框架 之SQL-MAP使用存储过程 深蓝医生 2010-07-03 23:31 阅读:2386 评论:4

 

五、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;
//实体类作为索引器使用
bool flag = (user["User ID"] == null);//true//删除测试数据
LocalDbContext context = new LocalDbContext();//自动创建表
OQL deleteQ = OQL.From(user).Delete().Where(cmp=>cmp.Comparer(user.UserID,">",0)) //为了安全,不带Where条件是不会全部删除数据的
    .END;
context.UserQuery.ExecuteOql(deleteQ);
Console.WriteLine("插入3条测试数据");
//插入几条测试数据
context.Add<UserEntity>(new UserEntity() {  FirstName ="zhang", LasttName="san" });
context.Add<IUser>(new UserDto() { FirstName = "li", LasttName = "si", Age = 21 });
context.Add<IUser>(new UserEntity() { FirstName = "wang", LasttName = "wu", Age = 22 });//查找姓张的一个用户
UserEntity uq = new UserEntity() { FirstName = "zhang" };
OQL q = OQL.From(uq).Select(uq.UserID, uq.FirstName, uq.Age).Where(uq.FirstName)
.END;//下面的语句等效
//UserEntity user2 = EntityQuery<UserEntity>.QueryObject(q,context.CurrentDataBase);
UserEntity user2 = context.UserQuery.GetObject(q);
复制代码

注意:该实例需要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,

或者下载这个 Example PDF.Net_V4.6 WinForm 数据表单实例

 

或者看这个 Source Code WebTestTool

这2个示例应用程序,都演示了WinForm下如何使用Data Control 数据控件简化CRUD窗体编程。

另外,如果你是WebForms 应用程序,开源项目的超市管理系统源码 你可以看看,

或者直接下载这个(版本较老)Source Code PDF.Net_V4.6_OpenSource (new)

 

结束语:

SOD不仅仅是一个ORM,它还有SQL-MAP和DataControl,具体可以看框架官网 http://www.pwmis.com/sqlmap ,9年历史铸就的成果,坚固可靠。

非常感谢你看到这里,相信你初步了解了SOD框架的基本功能,如果您还有其它问题,欢迎你在项目的开源网站 pwmis.codeplex.com 的讨论去发帖,或者去官方博客相关文章回帖也可。

 

最后,祝愿所有.NET 程序员早日摆脱日复一日的CRUD功能,感谢大家对PDF.NET SOD框架一如既往的支持,

2015年新春之际,祝贺各位会员和其他使用框架的朋友喜气洋洋,合家欢乐,万事如意!

 

附注:如果大家还没有买到节日期间的火车票,推荐本框架开发作者自主开发的《12306无声购票弹窗通知小工具》,工作抢票2不误,绿色无毒安全放心!

 



    本文转自深蓝医生博客园博客,原文链接:http://www.cnblogs.com/bluedoctor/p/4290570.html,如需转载请自行联系原作者



这篇关于PDF.NET SOD 开源框架红包派送活动 新手快速入门指引的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/339778

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多