写SQL语句是一个非常枯燥的事情,事实上凡是大量重复的东西,都是非常枯燥的。
因此我们就想到要改变,于是有人就搞出对象关系映射的框架来,Java中的Hibernate就是个活生生的例子。
c#也是不甘落后的,它搞了个EF框架,即Entity framework。
唯独还在Delphi世界里面苦苦挣扎的人,简直就是苦不堪言啊。每增加一张表,就得写每一次insert,update,select的语句,这是个多么苦逼的事情!
自从Delphi2010后,你发现Delphi编译出来的程序越来越大了,为啥会这么大啊,因为增加了一些东西,保存了更多的数据,这个增加的东西是什么呢?就是RTTI。
RTTI-Runtime type information,翻译成中文就是运行时类信息。这些数据信息是非常大的,包含了类的属性,变量,方法等等的信息。
今天只是简单的探讨一下该怎么用,不介入详细的东西,详细的东西,学半年都学不完吧。
1、将一个类插入到表中
function TDMBase.InsertObject(AClass:TObject;ATable:string):Integer; var ctx: TRttiContext; t: TRttiType; f: TRttiField; str:string; begin ctx:=ctx.Create; t:= ctx.GetType(AClass.ClassType); Self.ClearSQL; Self.Table:=ATable; for f in t.GetFields do begin str:= f.GetValue(AClass).ToString; if str<>'' then BEGIN Self.AddInsertField(f.Name,str); END; end; ctx.Free; result:=Self.ExecInsert; end;
2、select 数据,将ADOQuery中的数据填充到一个类中:
function TDMBase.SelectObject(AClass:TClass):TObject; var ctx: TRttiContext; t: TRttiType; f: TRttiField; str:string; obj:TObject; begin ctx:=ctx.Create; t:= ctx.GetType(AClass); obj:=AClass.Create; for f in t.GetFields do begin str:=Self.Str(f.Name); f.SetValue(obj,str); end; ctx.Free; result:=obj; end;
虽然涉及到主键,时间,日期,字段长度等内容还需仔细琢磨,而且远比不上EF框架。
毕竟是不用一点点去写SQL,这就很幸福了!
如无特别说明,本博客文章皆为原创。转载请说明,来自吵吵博客。
原文链接:http://chaochaoblog.com/archives/3062
吵吵微信朋友圈,请付款实名加入:
看SQL语句 也很枯燥啊