选择具有动态列名称,目标表以及i-batis中的动态where条件的查询

时间:2014-11-11 09:35:43

标签: sql sql-server mybatis

我想使用具有动态返回列名的Select查询,表名以及表1返回的动态where表来检索表2中的记录。我使用sql server。以下是方案 -

<typeAlias alias="paramBean" type="com.loyalty.sys.bulkemail.dao.ParamBean" />

<resultMap id="paramBeanMap" class="paramBean">
        <result property="columnName" column="COLUMN_NAME" />
        <result property="tableName" column="TABLE_NAME" />
        <result property="uniqueKey" column="UNIQUE_KEY" />                     
</resultMap>

<select id="getKeywordData" parameterClass="String" resultMap="paramBeanMap">

    SELECT COLUMN_NAME, TABLE_NAME, UNIQUE_KEY from LT_TB_SMS_EMAIL_MESSAGE_KEYWORD where KEYWORD
    in #keywordName#

</select>

<select id="selectKeywordValue" parameterClass="paramBean" resultClass="String">

    SELECT #columnName# from #tableName# where #uniqueKey# in #memberNo#

</select>

我能够从ParamBean属性中的第一个查询中获取值,但是在第二个查询中它会在列名中引发错误。我试图搜索类似的查询,但遗憾的是无法找到任何地方。是否有可能在i-batis或我应采取另一种方法来检索动态输入的记录?任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:5)

您需要对不是查询参数的列,表等名称使用直接字符串替换$param$。这将直接将您的String放入查询中。在这种情况下,请注意SQL注入。

<select id="selectKeywordValue" parameterClass="paramBean" resultClass="String">

    SELECT $columnName$ from $tableName$ where $uniqueKey$ in $memberNo$

</select>

请注意,在这种情况下,您的memberNo必须是类似"(val1, val2, val3)"的字符串。

请参阅文档中的3.9.5. Simple Dynamic SQL Elements