Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从SQL查询映射两个变量-MyBatis_Sql_Spring_Mapping_Mybatis - Fatal编程技术网

如何从SQL查询映射两个变量-MyBatis

如何从SQL查询映射两个变量-MyBatis,sql,spring,mapping,mybatis,Sql,Spring,Mapping,Mybatis,下面有一个select查询,它连接两个表并检索一个字符串: <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 =“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操作员吗?i、 e.选择t.app\u ver作为appVersion?我的想法是,这是为了将变量传递到查询中,而不是为了将它们取出

如果对此有什么想法,我很乐意听听。我基本上是在尝试将这些组合到一个查询中,我需要能够检索正确的值,而不是将app\u ver分配给step\u name,反之亦然


干杯

正如您所说,在您的选择中使用别名t.app\u ver作为appVersion不是一个坏主意,但它只是要映射的列的名称。因此,如果使用别名作为下一个t.app\u ver作为appVersion,t.step\u name作为stepName,则列名将是appVersion和stepName

然后,要映射结果,您有多个选择在映射结构中映射结果的想法不是一个坏主意,而且很简单,您只需要将结果类型设置为hashmap,它将是这样的,不需要任何Resultmap:

哈希映射

结果图 另一种方法是创建一个具有需要映射的属性的类,然后创建结果映射

结果映射定义为下一个:

resultMap–描述 如何从数据库结果集中加载对象

您的班级将是:

public class Application{

   private String appVersion;
   private String stepName;

   //.... getters and setters

}
结果映射会将列名与类属性映射,这些属性指定了为该类创建的类的类型,在本例中为应用程序:

String appVersionValue = map.get("appVersion");
public class Application{

   private String appVersion;
   private String stepName;

   //.... getters and setters

}
<resultMap id="applicationResultMap" type="Application">
  <result property="appVersion" column="appVersion"/>
  <result property="stepName" column="stepName"/>
</resultMap>
<select id="selectMethodName" resultMap="applicationResultMap">
  select t.app_ver as appVersion, t.step_name as stepName
  from your_table
</select>