mybatis动态列名
<select id="getUser" resultType="java.util.Map" parameterType="java.lang.String" statementType="STATEMENT"> select ${columns} from ${tableName} where COMPANY_REMARK = ${company} </select>
要实现动态调用表名和字段名,就不能使用预编译了,需添加statementType="STATEMENT"。
statementType:STATEMENT(非预编译),PREPARED(预编译)或CALLABLE中的任意一个,这就告诉 MyBatis 分别使用Statement,PreparedStatement或者CallableStatement。
默认:PREPARED。这里显然不能使用预编译,要改成非预编译。
其次,sql里的变量取值是${xxx},不是#{xxx}。因为${}是将传入的参数直接显示生成sql,如${xxx}传入的参数为字符串数据,需在参数传入前加上引号,如:
String name = "sprite";
name = "'" + name + "'";
如果使用的是动态列名,则不需要添加 ' ',直接传入参数即可
<!--查询月度指标--> <select id="findMonthIndicator" resultMap="BaseResultMap" parameterType="com.jn.ssr.superrescuereporting.web.entity.PerformanceIndicatorEntity" statementType="STATEMENT"> select ${param.orderNumber},${param.turnover} from in_performance_indicators <where> <if test="param.year != null"> and year = #{param.year,jdbcType=INTEGER} </if> </where> </select>