MyBatis在表名作为参数时遇到的问题

Posted Jacck

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis在表名作为参数时遇到的问题相关的知识,希望对你有一定的参考价值。

之前在用MyBatis的时候没用过表名作为参数,最近使用到了。

基于注释使用MyBatis的Dao层代码如下:

@Repository
public interface Base1102Dao {
    @Select(value = "Select * from ${table_name} order by id")
    @ResultType(HashMap.class)
    List<HashMap> getAll(@Param("table_name") String tableName);
}

区别为:在用表作为参数使用的时候不在使用#{param},而是使用${param}。

 

 

同时遇到的一个问题是因为在参数的时候没有使用@Parem注解会导致编译器误以为String为一个class,报如下错

// 第二个标红的代码(@Param("table_name"))如果去掉就会报这个错

There is no getter for property named ‘table_name‘ in ‘class java.lang.String‘

解决方案:加上@Param然后指定一个名字,在sql中使用就可以了

 

我之前经常不对单个String作为参数的函数用@Param参数注释,因为直接在sql 中写   #{string} 就可以了。但这个不知道为什么一定要这样写(因为参数去当表名了?)。不深究

 

一篇对@Param参数注解细讲的文章连接:

http://iyiguo.net/blog/2012/09/27/mybatis-param-mapping-rules/

以上是关于MyBatis在表名作为参数时遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis中,Integer类型参数值为0时得到 ""(空字符串)

表名作为 PostgreSQL 函数参数

将表名作为参数传递时 PL/SQL 函数不起作用

数组名作函数参数时,实参与形参变量之间的数据传递是?

当用数组名作形参时,形参数组改变可使实参数组随之改变 . 这句话哪里错了 求详细解答

mybatis#{}与${}的区别