之前在用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/