我想這個查詢寫入MyBatis的MyBatis的參數指標超出範圍
(select * from table1 where field1 like '%"name":"appname"%' limit 1)
union all
(select * from table2 where field1 like '%"name":"appname"%' limit 1)
limit 1
所以我創造了這個註釋:
@Select({
"(select * from table1 where field1 like '%\"name\":\"#{name,jdbcType=VARCHAR}\"%' limit 1)",
"union all",
"(select * from table2 where field1 like '%\"name\":\"#{name,jdbcType=VARCHAR}\"%' limit 1)",
"limit 1"
})
@Results({
@Result(column="ID", property="id", jdbcType=JdbcType.INTEGER, id=true)
})
Object hasName(@Param("name")String name);
但是當我運行它,我得到這個例外:
無法設置映射參數:ParameterMapping {property ='name',mode = IN,javaType = class java.lang.String,jdbcType = VARCHAR,numericScale = null,r esultMapId ='null',jdbcTypeName ='null',表達式='null'}。原因:org.apache.ibatis.type.TypeException:使用JdbcType VARCHAR爲參數#1設置非空值時出錯。嘗試爲此參數或其他配置屬性設置不同的JdbcType。原因:java.sql.SQLException:參數索引超出範圍(1>參數數量,即0)。
我可以映射這樣的註釋還是我錯過了什麼?我不想爲此使用XML。
你可以通過兩個參數與不同的名字和檢查? 'hasName(@Param(「name」)字符串名稱,@Param(「otherName」)字符串otherName);'我想問題是mybatis期待兩個參數,但你傳遞一個。 – Lucky
@Lucky我得到了同樣的錯誤..我認爲有什麼問題的「 – feco
你也可以在你的問題中發佈這個查詢的mysql等價物,並嘗試這個工作在你的mysql工作臺嗎? – Lucky