模拟idea的SQL Params Setter插件,实现SQL语句的拼接

发布于:2025-07-27 ⋅ 阅读:(18) ⋅ 点赞:(0)

package com.jd.doctor.v2.doctor.entity;

import lombok.extern.slf4j.Slf4j;

import java.util.*;

@Slf4j
public class SqlFormatUtil {
    static String preparing = "SELECT COUNT(1) FROM (SELECT d.id, h.drug_code, h.drug_name, h.py_code, h.wb_code, d.examine, h.drug_type, h.is_split, h.trade_name, h.dosage_code, h.dosage_name, h.specifications, h.manufactor_code, h.manufactor_name, h.approval_number, h.medical_insurance_code, h.medical_insurance_type, h.drug_unit, h.pack_rate, h.base_drug_type, h.ismonitor, h.hospital_branch_code, h.hospital_code, d.pharmacy_code, h.tenant_id, d.deleted AS storedeleted, h.ismedicaluse, h.price_hospital, d.price_drugstore, d.hospital_drug_id, h.default_unit, h.default_way, h.default_frequency, h.default_dose, d.created_time, h.id AS hospitalId, h.deleted, ds.deleted drugstore_deleted, ds.type drugstore_type, d.stock, h.med_list_codg, h.medins_list_codg, h.drug_introduction FROM drug_catalogue_hospital h LEFT JOIN drug_catalogue_drugstore d ON d.hospital_drug_id = h.id AND d.tenant_id = '100053' LEFT JOIN drugstore_settings ds ON ds.code = d.pharmacy_code AND ds.deleted = 'N' AND ds.tenant_id = '100053' WHERE h.id IN (SELECT hospital_drug_id FROM drug_catalogue_drugstore WHERE hospital_drug_id = h.id AND deleted = 'N' AND `status` = 1 AND tenant_id = '100053') AND h.tenant_id = '100053') c WHERE (deleted = ? AND storedeleted = ? AND drugstore_deleted = ? AND tenant_id = ? AND hospital_code = ? AND pharmacy_code = ? AND hospital_branch_code = ?)";
    static String parameters = "N(String), N(String), N(String), 100053(String), H0001(String), D72.01.03.05(String), H0001(String)";

    public static void main(String[] args) {
        String sql = preparing.replaceAll("= \\?", "= %s");
        List<String> list = getParametersMap(parameters);
        if (!list.isEmpty()) {
            String newSql = String.format(sql, list.toArray());
            log.info("--------->");
            log.info("格式完成的SQL:{}", newSql);
            log.info("<---------");
        }
    }

    /**
     * 参数格式化
     * @param parameters: 参数字符串
     * @return 格式化后的参数集合
     */
    private static List<String> getParametersMap(String parameters) {
        List<String> list = new ArrayList<>();
        String[] parametersList = parameters.split(", ");
        for (String s : parametersList) {
            String type = s.substring(s.lastIndexOf("(") + 1, s.lastIndexOf(")"));
            String parameter = s.substring(0, s.lastIndexOf("("));
            list.add(parameterFormat(type, parameter));
        }
        return list;
    }

    /**
     * 单个参数格式化
     * @param type:参数类型
     * @param parameter:参数值
     * @return 格式化后的参数
     */
    private static String parameterFormat(String type, String parameter) {
        if (null == type) {
            throw new RuntimeException("类型不能为空!");
        }
        String parameterFormat;
        switch (type) {
            case "String":
            case "Timestamp":
                parameterFormat = "'" + parameter + "'";
                break;
            case "Boolean":
            case "Integer":
                parameterFormat = parameter;
                break;
            default:
                log.info("类型不匹配:{}", type);
                throw new RuntimeException("类型不匹配!");
        }
        return parameterFormat;
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到