【发布时间】:2024-01-14 15:46:01
【问题描述】:
我已经编写了一个网关来从我的数据库中获取结果集。我如何将每一行存储在一个单独的 dao 中,以便我可以进一步操作每条记录?或者我可以直接访问结果集来获取记录吗?
这是我的网关(顺便说一句,我应该将 cfquery 中的条件逻辑写入扩展此网关的单独 cfc 吗?)
<cfcomponent name="MaterialDao" hint="data access object" output="false">
<cffunction name="init" hint="constructor" access="public" output="false" returntype="MaterialDao">
<cfargument name="dsn" type="String" required="true" hint="datasource" />
<cfset variables.instance.dsn = arguments.dsn />
<cfreturn this />
</cffunction>
<cffunction name="readMaterial" hint="read" access="public" output="false" returntype="Query">
<cfargument name="district" type="String" />
<cfset var qReadMaterial = "" />
<cfquery name="qReadMaterial" datasource="#variables.instance.dsn#">
<cfif StructKeyExists(arguments,"district")>
SELECT A.NR, A.BEZ, D.BES, D.STA
<cfelse>
SELECT A.NR, A.BEZ
</cfif>
FROM DEK AS D INNER JOIN ART AS A
ON D.NR = A.NR
WHERE 0=0
<cfif StructKeyExists(arguments,"district")>
AND D.BEZ = #arguments.district#
</cfif>
ORDER BY A.BEZ
</cfquery>
<cfreturn qReadMaterial />
</cffunction>
</cfcomponent>
我已经阅读了很多文章,似乎对这个问题有不同的看法(DAO vs. Gateway,DAO & Gateway 等)。最佳做法是什么,专业人士会做什么?
【问题讨论】:
-
我注意到您在 cfif 语句中使用了 # 符号。没有必要使用 # 符号,除非将变量用作某些输出的一部分,例如用于查询、视图或标记的参数,就像您对 datasource="#variables.instance.dsn#" 所做的那样它在引号之间的位置。只是一个小提示,可以为您节省一些打字按键。 :)
-
我采纳了 Aaron 的提示并将我的网关更改为 dao,以便更符合专业人士:)
-
您在 StructKeyExist 检查中缺少右括号。
-
另外,您应该将 cfqueryparam 用于#arguments.district#
标签: coldfusion dao cfc gateway