select、from关键字后使用动态的字段与表名实现动态查询

在有些业务上需要后端人员根据动态的表名匹配查询的表,包括字段信息也要动态的来获取,此时可以使用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"

这样才起作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值