我想使用Select查询从表2中检索记录,该查询具有动态返回的列名,表名以及表1返回的动态where条件。我正在使用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中是否可能,或者我应该采用另一种方法来检索具有动态输入的记录?任何帮助将不胜感激。谢谢。!
您需要对$param$不是查询参数的列,表等使用直接字符串替换。这将直接将您String放入查询中。在这种情况下,请注意SQL注入。
$param$
String
<select id="selectKeywordValue" parameterClass="paramBean" resultClass="String"> SELECT $columnName$ from $tableName$ where $uniqueKey$ in $memberNo$ </select>
请注意,在这种情况下,您的memberNo必须是类似于的字符串"(val1, val2, val3)"。
"(val1, val2, val3)"
参见3.9.5。文档中的简单动态SQL元素。