专栏首页程序员的SOD蜜(PDF.NET框架实例讲解)将任意复杂的SQL查询映射成实体类

(PDF.NET框架实例讲解)将任意复杂的SQL查询映射成实体类

通常情况下我们的ORM框架都是将单表或者视图映射成一个实体类,有时候也会将存储过程映射成实体类,如果处于系统移植性的考虑,你不想写存储过程,那这些复杂的SQL查询怎么映射成实体类?

实际上,不管是单表,视图,存储过程,SQLSERVER的表值函数,自定义的SQL查询,甚至是任意复杂的SQL查询,都可以用一个SQL语句来表示,只要我们的ORM框架能够实现将SQL语句的查询结果映射成实体类,那么使用ORM就很简单了。我们使用PDF.NET(PWMIS数据开发框架)来实例讲解一下这个过程。

1,首先下载并安装一个“PDF.NET集成开发环境”,详细内容请参见《PDF.NET数据开发框架之集成开发工具Ver 4.1发布》,下面是该工具运行的界面:

2,在“数据连接”选项卡上,选择或创建一个连接分组,然后再添加一个连接(注意鼠标右键菜单),之后就能够打开该连接,看到该连接下面的数据库、表、视图、存储过程等内容,如上图所示。工具支持各种类型的数据库。

3,新建一个查询,在上图右边的内容区输入你的SQL语句,按“F5”键,如果正确将会看到结果网格。

    到此为止,你可以使用本工具作为一个支持多种数据库的“查询分析器”来使用了,你还可以扩展它的数据提供程序,以支持你自己的数据源。

4,在“查询窗口”,鼠标右键的弹出菜单上,选择“生成实体类”

 然后,弹出一个新窗口,进行生成实体类的有关设置:

注意勾选“SQL查询的有效性”,并输入要映射的实体类名称等信息,然后点击“确定”。

在“属性浏览器”里面,进行一些生成的设置,主要有文件路径和代码语言的选择,设置好以后,可以单击网格上面的“预览”连接,弹出如下界面:

这个时候可以看到我们生成的实体类的原貌,如果觉得不好,可以修改重新进行。

关闭窗口后,如果还想添加更多的自定义查询,请单击“高级”按钮,将重复上面的步骤,添加一个新的查询,结果如下图:

单击“生成”按钮,将生成两个选中的实体类文件。

注意:这里除了生成的实体类文件之外,还会生成一个固定名称的实体类配置文件 EntitySqlMap.config文件,下面将会讲到它的用处。

5,经过上面的步骤,我们的实体类文件生成好了,下面做一些准备工作,看看如何在项目里面使用。

    先打开自定义查询的实体类配置文件 EntitySqlMap.config文件,我们做一下修改:

修改该文件的内容,将原来有实际基金代码的地方,都替换成 @jjdm 的SQL查询参数名称,如上图。

接下来,将这3个文件添加到我们的Model项目中:

接下来,将EntitySqlMap.config文件作为嵌入式资源文件编译,注意如果你做的是WinForm 程序,可以跳过这一步,但程序运行时需要包含该文件,所以还是建议作为嵌入式文件编译,这样有更好的安全性。另外该文件应该和实体类文件放到同一个目录下面。

最后,我们看看如何在项目里面使用这样的实体类:

自定义查询的实体类跟普通的PDF.NET实体类使用方式类似,都需要OQL表达式来操作,例如选取要使用的字段,设置Where条件,这里为了简便,仅仅调用了OQL.Select()方法,选取查询出来的全部列。

注意:自定义查询的实体类如果你的SQL查询语句需要使用参数,例如本地的 @jjdm,则还应该设置OQL的InitParameters属性,如上图所示。

最后,将可以直接查询了,用过PDF.NET框架的朋友都知道,就一行代码,如本例所示:

  List<JJDangAnInfo> list = EntityQuery<JJDangAnInfo>.QueryList(q);

6,经过以上步骤,我们的代码已经可以运行了。当前的实例用到了一个ASP.NET+MVC 2.0的项目中,下面是运行的效果图:

PDF.NET自定义查询实体类的实例运用,还可以参考

SQLSERVER 占了500多M内存,原来的程序无法一次查询出50多W数据了,记录下这个问题的解决过程。

除了可以通过本文说的方式将SQL语句映射到实体类,还可以通过PDF.NET内置的SQL-MAP技术来实现实体类映射,就像iBaits那样,但比iBaits简单很多,详细内容,请参看:

PDF.NET数据开发框架 之SQL-MAP使用存储过程

注:本文所说的自定义查询在PDF.NET3.5以后方可以支持,实例代码需要在PDF.NET 4.1以上支持,PDF.NET本身仅需要.net 2.0支持,框架的最新版本没有公开发布,有关框架的详细信息请看官网介绍: http://www.pwmis.com/sqlmap

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 让DBA去写数据访问层(DAL)代码--PDF.NET数据开发框架之SQL-MAP使用图解

    面对一堆堆的复杂SQL语句,你需要把它写成.NET程序,是不是有点厌烦了? 我们的DAL代码和具体的数据库,SQL语句紧密耦合,有没有办法分离开? 如果你有一...

    用户1177503
  • 打造轻量级的实体类数据容器

        这里有三个关键词:轻量级,实体类,数据容器,还有一个潜在的关键词:通用。这几个名词之间有什么联系呢?     一般来说,操作实体类往往伴随着一个实体类集...

    用户1177503
  • “设计应对变化”--实例讲解一个数据同步系统

     系列文章索引: [WCF邮件通信系统应用 之 数据同步程序 之 设计内幕 之 一] 同步一个数据库要发多少个数据包? [WCF邮件通信系统应用 之 数据同步...

    用户1177503
  • 为什么学了那么多软件,还是做不好数据分析?

    大概是自带了亲和属性,经常会有很多机会听到身边同事、朋友,甚至一些仅有数面之缘的人分享他们对于职业的看法和困惑。前不久,身边相熟的妹子,非常困惑地问我,为什么学...

    CDA数据分析师
  • 一个综合的分布式项目之项目架构 原

        限于服务器资源,这里除了服务上下游各有两台,其他没做集群。总共9台服务器,其中八台是centos7虚拟机,各有2G内存,还有一台是windows装的my...

    尚浩宇
  • 【职业】为什么学了那么多软件,还是做不好数据分析?

    大概是自带了亲和属性,经常会有很多机会听到身边同事、朋友,甚至一些仅有数面之缘的人分享他们对于职业的看法和困惑。前不久,身边相熟的妹子,非常困惑地问我,为什么学...

    小莹莹
  • 欲善事先利器——IDEA 插件篇

    上篇《欲善事先利器——系统篇》已经推荐了一些个人常用的效率系统软件。觉得有帮助的,有共鸣的 Rock 一下。我们继续新篇——IDEA 插件篇。用 Eclipse...

    码哥字节
  • CNodejs每日新闻周刊|第 6 期

    在一个知识爆炸的时代,身边的一些技术、文章、工具铺天盖地,有时候我们会困惑该如何选择?哪些是对自己有价值的?“CNodejs 每日新闻” 的出现也是期望为大家...

    coder_koala
  • Java程序员必备的Intellij插件

    支持lombok的各种注解,从此不用写getter setter这些 可以把注解还原为原本的java代码 非常方便

    纯洁的微笑
  • 记录一些服务端术语和搭建web服务器

    CS(Client/Server),基于安装包类型的桌面或手机软件模式,比如常见的QQ、微信、迅雷等等。 优点是 :基于安装包,性能更高,安全性更高。 缺点是:...

    tandaxia

扫码关注云+社区

领取腾讯云代金券