mybatis表名含有参数

表较多需要分表,或者日志等需要按照模块分表的时候,为了统一接口经常需要将最后不同的部分作为参数传入到sql中进行查询,如

表名 t_log_user,t_log_item等,在拼接如下sql

select * from t_log_*

的时候,需要将 user,item等字符串作为参数传进去。开始使用的mybatisgenerator生成的那种方式,里面传递参数都用的#{module}的方式,但是在参数存在于表名的时候,如果是字符串,mybatis会给加上单引号,即最后拼接成的sql为 select * from t_log_’user’,执行必然报错。

查找了一下网上资料,参考《http://blog.sina.com.cn/s/blog_4822be6d0101g0da.html》,需要在sql mapper xml文件中的语句块里添加 statementType=”STATEMENT” , 并且参数声明必须使用 ${module}($)符号才行。

示例:

<sql id=”selectListByModule” resultMap=”tLog” parameterMap=”tLog” statementType=”STATEMENT” >
select * from t_log_${module} where 1=1
</sql>