在有些业务上需要后端人员根据动态的表名匹配查询的表,包括字段信息也要动态的来获取,此时可以使用mybatis的动态匹配来动态查询内容。
fhcVarConfigurationService.getNumber(name.toString(), targetTable, targetField
, parameter, parameter1, parameter2, parameter3
, portFields1, portFields2, portFields3, portFields4);
targetTable、tarfetField 分别是传向sql中的动态参数
parameter, parameter1, parameter2, parameter3这些参数是我从后台查出来的进行动态匹配,因为业务需求,这些字段,表名,都要从后台查出来。
portFields1, portFields2, portFields3, portFields4字段所对应的值,配合底下的sql一起看
至于方法还是根据service,mapper一层一层往下写就行了,写到xml文件就对应下面的sql语句
<select id="getNumber" resultType="java.lang.String" statementType="STATEMENT">
SELECT
${targetField}
FROM
${targetTable} b
WHERE
b.del_flag = '0'
<if test="portFields1 != '' and portFields1 != null">
AND b.${portFields1} = '${parameter}'
</if>
<if test="portFields2 != '' and portFields2 != null">
AND b.${portFields2} = '${parameter1}'
</if>
<if test="portFields3 != '' and portFields3 != null">
AND b.${portFields3} = '${parameter2}'
</if>
<if test="portFields4 != '' and portFields4 != null">
AND b.${portFields4} = '${parameter3}'
</if>
</select>
select,from后面都是刚刚从后台传过来的。这里一定注意要是用${},这是非预编译的写法,而且这种表示的方法不带引号。当然字段值一定要记得自己加上引号。
*****注意重点,sql标签上一定要加上
statementType="STATEMENT"
这样才起作用