我想这个查询写入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