因此,我在下面有这个选择查询,该查询将两个表连接起来并检索一个字符串:
<select id =“getAppVerByConfId” parameterType=“java.lang.String” resultType=“java.lang.String”>
SELECT t.app_ver
FROM
application a
JOIN transaction t on t.txn_id = a.txn_id
WHERE
a.confirmation_id = #{0}
</select>
然后我以它为模板编写了第二个查询,该查询几乎相同,但是只是从表中检索了一个不同的参数。
<select id =“getStepNameByConfId” parameterType=“java.lang.String” resultType=“java.lang.String”>
SELECT t.step_name
FROM
application a
JOIN transaction t on t.txn_id = a.txn_id
WHERE
a.confirmation_id = #{0}
两者都可以很好地工作,并且可以在程序的同一位置使用它们。但是肯定有比这更好的方法了吗?我应该能够进行一次查询,然后将结果映射到所需的内容,对吗?我应该制作一个结果集,然后将其拉出吗?也许作为HashMap,我可以通过键检索值?我可以使用AS运算符吗?即“ SELECT t.app_ver AS appVersion”?我的想法是,这是为了将变量传递到查询中,而不是为了将它们取出来?
如果对此有任何想法,我希望听听他们的意见。我基本上是试图将它们组合成一个查询,并且我需要能够检索正确的值,并且不能将app_ver分配给step_name,反之亦然。
干杯
正如您所说的,t.app_ver as appVersion
在您select
的名称中使用别名()并不是一个坏主意,但这只是将要映射的列的名称。因此,如果您使用别名作为下一个,则t.app_ver as appVersion, t.step_name as stepName
您的列名称将为appVersion
和stepName
。
然后,要映射结果,您有多种选择,将其映射到map
结构中并不是一个坏主意,这很容易,您只需要将结果类型设置为hashmap
,就可以像这样(并且不需要任何东西Resultmap
) :
(官方页面中的示例)
<select id="selectPerson" parameterType="int" resultType="hashmap">
SELECT * FROM PERSON WHERE ID = #{id}
</select>
列将是键,行将是映射中的值。
由映射到行值的列名作为键
因此,要获取您的值,您将需要使用列名称作为映射中的键:
String appVersionValue = map.get("appVersion");
使用它的另一种方法来创建具有需要映射的属性的类,然后创建您的resultmap
。
结果图定义如下:
resultMap –最复杂,功能最强大的元素,它描述如何从数据库结果集中加载对象。
您的课程如下:
public class Application{
private String appVersion;
private String stepName;
//.... getters and setters
}
然后,您的结果映射将使用列属性映射列名称,该类属性使用为此创建的类来指定类型(在这种情况下为Application
):
<resultMap id="applicationResultMap" type="Application">
<result property="appVersion" column="appVersion"/>
<result property="stepName" column="stepName"/>
</resultMap>
(请注意,因为在此示例中,列和属性被称为相等,所以在某些情况下,列被称为app_version和属性appVersion,例如, <result property="appVersion" column="app_version"/>
最后,在您的选择中指定使用此命令resultmap
:
<select id="selectMethodName" resultMap="applicationResultMap">
select t.app_ver as appVersion, t.step_name as stepName
from your_table
</select>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句