我正在尝试将此查询写入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,resultMapId ='null',jdbcTypeName ='null',expression = '空值'}。原因:org.apache.ibatis.type.TypeException:使用JdbcType VARCHAR为参数#1设置非null时出错。尝试为此参数或其他配置属性设置不同的JdbcType。原因:java.sql.SQLException:参数索引超出范围(1>参数数量,为0)。
我可以这样映射注释吗?我不想为此使用XML。
我决定将部分查询从
field1 like '%\"name\":\"#{name,jdbcType=VARCHAR}\"%'
到
field1 like #{name,jdbcType=VARCHAR}
并在Java中更改了参数名称
parameter = "%\"name\":\"" + parameter + "\"%";
我遵循了我发现的帖子中的解释
'%'||${specific_string}||'%'
或者
#{do_it_in_java}
或者
someFunctionOrProc(#{specific_string})
函数/过程将在哪里处理它。如果您在多个SqlMaps中经常使用它,那么我可能会走这条路。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句