Java 代码实现SQL拼接 并执行

以下是update语句为例:

import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
import org.apache.ibatis.jdbc.SQL;

Long thisDataId =123456L;
SQL sql = new SQL()
        .UPDATE(OppConst.OPP_FOLLOW_UP_TABLE)
        .SET("name={0},sex={1},nick_name={2},phone={3}")
        .WHERE("id = " + thisDataId);
SqlRunner.db(OppFollowUp.class).update(sql.toString(), Arrays.asList("张三","男","张工","10086"));

我的程序代码:

private void executeSql(Long oppId, Map<String, Object> needToUpdateMap) {
    if (MapUtil.isNotEmpty(needToUpdateMap)) {
        log.info("执行更新商机主表sql开始");
        //存放更改的字段的数据
        List<Object> dataList = new ArrayList<>();
        //存放更改的字段的信息
        List<String> setSqlList = new ArrayList<>();
        Integer index = 0;
        for (String field : needToUpdateMap.keySet()) {
            StringBuilder setSql = new StringBuilder();
            //将驼峰的字段转为下滑杠格式的数据库字段
            String convertCamelToSnakeCase = convertCamelToSnakeCase(field);
            setSql.append(convertCamelToSnakeCase);
            Object value = needToUpdateMap.get(field);
            if (Objects.isNull(value)) {
                setSql.append(" = null ");
            } else {
                setSql.append(" = {").append(index).append("}");
                dataList.add(value);
                index++;
            }
            setSqlList.add(setSql.toString());
        }
        SQL sql = new SQL()
                .UPDATE(OppConst.OPP_FOLLOW_UP_TABLE)
                .SET(String.join(",", setSqlList))
                .WHERE("id = " + oppId);
        try {
            SqlRunner.db(OppFollowUp.class).update(sql.toString(), dataList.toArray());
        } catch (Exception e) {
            log.error("更新商机主表异常 ## {}", ExceptionMessageUtils.stackTraceToString(e));
            throw new CrmException("更新商机主表异常");
        } finally {
            log.info("sql:{}  数据:{}", sql.toString(), JSONObject.toJSONString(dataList));
            log.info("执行更新商机主表sql结束");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值