OracleO福特ExplorerM查询语言(OQL)简介–概念篇

O宝马X5M查询语言(OQL)简介–实例篇

2,数据总括:

 

OQL q=OQL.From(entityObject)

.Select().Count(entityObject.PropertyX,<””>|<“CountAsName”>)

.Where([<entityObject.Property1>[,entityObject.Property2][,…]]|[OQL2]|[OQLCompare])

.End;

 

O奇骏M查询语言(OQL)简介–高级篇(续):天柱山真貌

 ② 、ORM带来的标题

 

 

  使用O奥迪Q5M后,再也不用去写那么些枯燥的DAL代码了,不用拼接那几个恐怕存在安全难题要么敲错字段名的SQL语句,可是大家发现,仅仅使用OTiggoM它反而丧失了SQL的布帆无恙,那也是过多少人拒绝使用OTiguanM的理由。大家看看众三个人的O普拉多M是怎么定义数据操作接口的,他们平日把这一个接口方法由实体类去落到实处,从而构建2个个充血的实体类:

public interface IEntity<T> where T:class
{
void Add();
void Update();
void Delete();
List<T> GetAll();
T GetOne(int id);
}

 

  使用充血实体类,在运用上或许相比方便的,不过Insert
\Update\Delete 都只可以操作一条数据,GetAll 方法不仅把方方面面多少拿出来了,而且还大概把不供给的字段值也拿了出去,那多少个GetOne方法,恐怕实际上表的主键并不是int
类型的,那么这一个概念就会分外。。。

  所以,大家来看众多选用了O大切诺基M的花色,不管多少是还是不是全体亟需,先拿出来再说,不管主键是否int
类型,先定3个措施在这里,大不断是个空方法,不管当前实体是还是不是须要Delete功效(比如一些系统用户数量是不能够去除的),都基类给一贯促成了。。。。。。

 相关小说内容索引:

一、SQL与ORM

   关周密据库(奥迪Q3DBMS)的询问有SQL(Structured Query Language)结构化查询语言,相比较高级程序语言(命令式语言)而言,SQL首要讲述想要做什么样,而不是命令式语言的实际什么做,由此,SQL也被叫作第④代语言(4GL),它为当代大多数的关周到据库系统所支撑。SQL的主旨是对“关系”的操作,数据库理论研商证实,SQL是关联上完备的,可是当代多数高等语言都是面向对象的,高级语言程序要跟关周到据库举行相互,SQL就成了必须的桥梁,由于SQL基于的“关系”和程序语言的“对象”是例外的体系,它们之间要完结很好的相互,就得有一个“映射”进程,完毕那几个进度的次第,正是O汉兰达M(Object/Relation Mapping)。

  应用程序调用O奥迪Q5M的办法,OCR-VM自动生成相应的SQL语句到数据库进行询问,然后OLX570M将接受到的关周密据映射成实体对象。借使没有运用O哈弗M,那么一般应用程序会拆分出1个数目访问层(DAL)来生成SQL语句并履行相应的查询。所以,OCR-VM出现后,在一定水平上,它能够代替DAL,那使得你少了1个层的工作量,对于增长工效是很重点的。

  下图是应用程序使用OLANDM和行使古板的DAL的贰个示意图。

Oracle 1

 

 

(图1:二种多少访问架构)

OXC90M查询语言(OQL)简介–高级篇:脱胎换骨

3,数据更新:

 

OQL q=OQL.From(entityObject)

.Update([entityObject.Property1][,entityObject.Property2][{,…}])

.Where([<entityObject.Property1>[,entityObject.Property2][,…]]|[OQL2]|[OQLCompare])

.End;

 

 1,分离关心点

  那么,这几个题材OEscortM能够解决呢?ORAV4M本来是完成“对象-关系映射”的,但此间超越1/4的O奥迪Q5M都包括了“生成SQL”的功力,而要实现SQL那样的油滑,那么我们必须分离出O汉兰达M这几个关心点,将“生成SQL”的效果从O奥迪Q7M中抽取出来,这样大家就能够有越多的生命力从事于发美赞臣(Meadjohnson)(Aptamil)个面向对象的,用于OCR-VM查询的言语,(OLacrosseM Query
Language) ,那正是OQL。

 

  O库罗德M查询语言,其实早就有了,从早期的Hibernate的HQL,到MS的Linq(Linq2SQL,EF其实内部都以选拔Linq生成的SQL),它们都得以转移复杂的SQL语句,它们都是一贯效果于O奔驰M级M框架的。大致在与Linq同一时半刻代,PDF.NET也申明了友好的ORubiconM查询语言,称为OQL。上面提到的OQL,都是指的PDF的OQL。

 

 

1,数据查询:

OQL q=OQL.From(entityObject)

[.[InnerJoin|LeftJoin|RightJoin](entityObject2).On(entityObject.PK,entityObject2.FK)]

[.[InnerJoin|LeftJoin|RightJoin](entityObject3).On(entityObject.PK,entityObject3.FK)]

.Select([entityObjectX.Property1][,entityObjectX.Property2][{,…}])

.Where([<entityObject.Property1>[,entityObject.Property2][,…]]|[OQL2]|[OQLCompare])

.GroupBy(entityObjectX.PropertyN,<“asc”>|<“desc”>)

.HavingBy(entityObjectX.PropertyM)

.End;

 

 如若急需分页,仅须求那样操作:

q.Limit(分页大小[,页码[,总记录数]]);

 

 执行该方法,会扭转特定数据库平台的分页SQL语句。

 

2,PDF.NET的ORM框架

  PDF.NET的OENCOREM框架包含四个部分:

  1. Entity Object :PDF.NET实体类,它继续于基类
    EntityBase,使得每2个实体类都改为二个“数据容器”;
  2. OQL:OEnclaveM查询语言,以实体类对象为操作对象,生成查询表明式,供实体查询对象使用。
  3. AdoHelper:数据访问提供程序抽象类,封装了对ADO.NET的种种访问,包含事物操作;框架暗中同意提供了奥莱dbProvider、OdbcProvider、AccessProvider、SqlServerProvider、OracleProvider等,要补助越来越多的数据库,只须求继续AdoHelper即可。
  4. EntityQuery<T> :实体查询对象,它是二个O/RAV4Mapping对象,它操作涉及的目的类型是3个实体类(类型T);在目的内部,它会把OQL转换到SQL,然后调用AdoHelper达成查询。

 

Oracle 2 

 (图2:PDF.NET OQL 架构)

 

  假如仅从询问调用端来察看,大家发现OQL,跟SQL逻辑上是等价的,二个是“对象化”的查询,多个是“结构化”的查询:

 

 

对象化查询:OQL->O君越M-> Entity Objects

等于

结构化查询:SQL ->DB-> DataSet

 

  如若最终效果Entity
Object==DataSet,那么OQL==SQL。

  所以,OQL的宏图指标,正是要它生成的SQL语句效果基本实现手写的SQL语句一样。由于SQL的现实落实又有不少两样的本子,所以广大时候SqlServer用的SQL语句在Oracle 上不必然能够利用,唯有这几个完全标准的SQL语句才是通用的,由此,OQL的设计,也亟须是那般标准的SQL规范,近年来,完成的是SQL92标准规范。

叁 、ORM查询语言

O哈弗M查询语言(OQL)简介–概念篇

3,OQL查询范式

  下边是OQL襄助的查询范式举例,注意下边的概念里面使用了“BNF”范式,为了幸免我们误会,那里补充下BFN的始末,详细内容请参考那么些链接:http://baike.baidu.com/view/1137652.htm

 

4,数据删除:

 

OQL q=OQL.From(entityObject)

.Delete()

.Where([<entityObject.Property1>[,entityObject.Property2][,…]]|[OQL2]|[OQLCompare])

.End;

 

下卷大家将选用实例来讲学OQL的切切实进行使,敬请期待。 

 

 

注:PDF.NET今后曾经开源,有关框架的详细消息,请看官网介绍:http://www.pwmis.com/sqlmap

 

 开源音信介绍:

节前送礼:PDF.NET(PWMIS数据开发框架)V4.5版开源

 

———————分界线—————————————–

小说表露后,热心网友对自己提了有个别眼光,由于不涉及个人隐衷,那里贴上她的原稿,尽管他看到有异议的话请及时跟自个儿沟通。在此谢谢他建议的下列意见!

 

别的大家认为好请点个推荐,反对的话请留个理由,多谢。

———————分界线—————————————–

 

 shawn(630235793) 1:10:46
大约浏览了眨眼之间间,感觉尚可

shawn(630235793) 1:14:32
只是博文过于技术细节化而缺失了框架消除的切实可行问题域、面向的使用者类型,以及完整架构思想与基于关周详据访问框架的差距性描述,让读者一上来很难明白O卡宴M框架的来意。

回复:

那一个题材的确没有表明清楚,也是因为自个儿的创作水平有限,没有想到这一个难点,也不精晓该如何来抒发。

PDF.NET的OQL要缓解的机要难题正是让O帕杰罗M操作能够有SQL那样的八面后珑,现有当先叁分一O奇骏M框架都以依照CRUD方法级其余操作,还尚无像SQL那样富有语言级别的操作,要不然它怎么会被称作4GL吗?现在,小编认为LINQ也富有了这么的力量,而自小编框架中的OQL,也有那样的能力,所以作者大胆的叫做它是1个“OOdysseyM
Query
Laguage”,就像SQL是提须求福睿斯DBMS的查询引擎使用同一,OQL是提须求OENVISIONM使用的。

之所以,OQL面向的使用者是那两个喜欢O福睿斯M情势来访问数据库,又喜欢SQL的油滑的技术人士,恐怕是提须求喜欢个中一种(O帕杰罗M恐怕SQL)而不太喜欢其它一种情势的人,让他们有空子体会到另一种方法的优势。

全部思想正是,用面向对象的章程来操作数据库,用OO的措施来写SQL!

PS:OQL与LINQ相比较,它更接近于SQL风格,用惯了SQL的人,第一次接触LINQ是很不习惯的,至少自个儿是那般。

 

shawn(630235793) 2012-10-6 1:39:15
数量访问框架设计的初叶设想,首先应当是满意调用层的应用要求,换句话说请求是事务性的,依然非事务性的。借使用户的呼吁是事务性的,在访问层应该提供事务性的处理体制。而不是应用层本身来对是还是不是事务性进行处理。这么些本该放在访问层的对外交互接口处提供给用户来抉择相比合理。
从而,框架之中的分支,小编感觉到还相应再多考虑一下相比较好。

回复:

实体层的接口是一对,只是那一个图里面倒霉放置而且不是任重先生而道远,省略了。
是或不是采取事物,是放在访问层的对外交互接口处提须要用户来摘取的。

shawn(630235793) 2012-10-6 1:47:13
到底数据访问框架对于用户来讲就应该屏蔽全部数据库之间操作的差距性,全部与数据库相关的整套操作都卷入于当中。对于用户来讲那些都以一点一滴不必去考虑的,只必要建议具体请求是怎么就足以了。对于怎么着解读用户请求、怎么样依照用户选用的求实数据库,而将呼吁翻译成底层数据库操作指令等等,那一个都是访问层内部机制形成的。

 

回复:

正如您所说,框架便是这么去做的,OQL屏蔽了SQL区别数据库之间的出入,它会基于具体行使的数据库,去生费用地化的SQL。

 

 

广州-海華²º¹²<harvey.cai@qq.com>  17:04:10
跟 linq 有何似的/分歧?
广州-海華²º¹²<harvey.cai@qq.com>  17:05:45
那篇博文里主推的视角,让人想到 linq。

pdf.net 主推的应该是:linq 般好用,可是质量出众

 

  

回复:

 

LINQ是.NET独有的表征,“语言集成查询”,它是合而为一在.NET语言中的,那是它的天生优势。LINQ基于表明式树,所以它供给必须是.NET平台同时框架版本必要在.NET3.5及以上。

PDF.NET的OQL跟LINQ一样都以ORM框架使用的言语,但是OQL语法更类似于SQL,很容易上手,而且,OQL没有使用.NET的高等性子,那使得它一旦是面向对象的语言而且扶助泛型即可达成,因而将它移植到C++、Java是截然恐怕的,而且在.NET平台上,它也仅需.NET2.0版本的支撑。

 

 

 

 

巴科斯范式的剧情

  在双引号中的字(“word”)代表着那个字符自个儿。而double_quote用来代表双引号。

 

  在双引号外的字(有可能有下划线)代表着语法部分。

 

  尖括号( < > )内涵盖的为必选项。

 

  方括号( [ ] )内含有的为可选项。

 

  大括号( { } )内包括的为可重复0至广大次的项。

 

  竖线( | )表示在其左右两边任选一项,也就是”O奥迪Q7″的意思。

 

  ::= 是“被定义为”的趣味。

相关文章