java - MyBatis 参数索引超出范围

标签 java mysql 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);

但是当我运行它时我得到了这个异常:

Could not set parameters for mapping: ParameterMapping{property='name', mode=IN, javaType=class java.lang.String, jdbcType=VARCHAR, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType VARCHAR . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

我可以像那样映射注释还是我遗漏了什么?我不想为此使用 XML。

最佳答案

我决定从

更改我的部分查询
field1 like '%\"name\":\"#{name,jdbcType=VARCHAR}\"%'

field1 like #{name,jdbcType=VARCHAR}

并在 Java 中更改参数名称

parameter = "%\"name\":\"" + parameter + "\"%";

我遵循了 post 的解释我找到了

'%'||${specific_string}||'%'

or

#{do_it_in_java}

or

someFunctionOrProc(#{specific_string}) where the function/proc will handle it. If you use this a lot in multiple SqlMaps then I might go down this road.

关于java - MyBatis 参数索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35884936/

相关文章:

java - apache ant 增加内存和速度

java - 在servlet中获取部分请求url

mysql - 同步两个不同系统用户表的最佳实践

php - 将文本区域保存到 mySQL 数据库字段 PHP

java - mybatis-spring中如何使用@Transactional注解?

java - Gradle JettyRun找不到MyBatis映射器xml文件

Java:需要站点用户之间的有效通知

java - 如何使用java在azure文件存储帐户上写入CSV文件?

php - 测试数据库中是否存在数字,如果存在则创建新数字

java - 使用 'spring boot + mybatis'创建的项目使用 'spring Application'可以启动,如果使用外部tomcat,注入(inject)dao报错