拼接mybatis打印日志中的完整sql

本文描述了开发者在开发过程中使用ChatGPT自动生成SQL插入语句的方法,通过trim(),split(),正则表达式和StringBuilder等技术实现参数的自动替换,提高代码效率。同时提及了快捷键操作技巧用于处理长SQL语句。
摘要由CSDN通过智能技术生成

起因:

开发的时候看到后台打印出来的sql还需要一个个参数手动拼接去执行一下,好麻烦,然后就叫chatgpt帮忙生成了一个方法,手动改了一下,能拼接完整的sql

正片:

 @Test
    public void createSql(){
       String sql="insert into depart_info(emp_id, depart_type, depart_status, apply_time, depart_time, final_work_time, reality_depart_time, depart_reason, depart_reason_illustrate, notes, revoke_depart_reason, abandon_depart_reason, creator, create_time) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
       String param="2(Integer), 1(Integer), 1(Integer), 2023-11-14 00:00:00.0(Timestamp), 2023-11-21 00:00:00.0(Timestamp), 2023-11-21 00:00:00.0(Timestamp), null, 3(Integer), 111(String), 222(String), null, null, admin(String), 2023-11-30 09:53:07.143(Timestamp)";
        System.out.println( replaceQuestionMark(sql, param));
    }


    private static String replaceQuestionMark(String original, String replacement) {
        original=original.trim();
        replacement=replacement.trim();
        // 将replacement字符串按逗号分割成ArrayList
        List<String> replacementList = new ArrayList<>(Arrays.asList(replacement.split(", ")))
                .stream().map(s->{
                    s=s.trim();
                    // 使用正则表达式匹配括号中的内容
                    Pattern pattern = Pattern.compile("\\(([^)]+)\\)");
                    Matcher matcher = pattern.matcher(s);
                    String type= matcher.find() ? matcher.group(1) : "";
                    //剔除括号内容
                    s=s.replaceAll("\\([^)]*\\)", "");
                    //判断括号内的类型
                    if (!type.equalsIgnoreCase("Integer")){
                       if (!s.equalsIgnoreCase("null")){
                           s="'"+s+"'";
                       }
                    }
                   return s;
                }).collect(Collectors.toList());

        // 使用StringBuilder来构建替换后的字符串
        StringBuilder resultBuilder = new StringBuilder();

        // 遍历原始字符串的每一个字符
        for (char c : original.toCharArray()) {
            // 如果是问号字符,将其替换为replacementList中的下一个字段
            if (c == '?') {
                // 检查是否还有更多的字段
                if (!replacementList.isEmpty()) {
                    resultBuilder.append(replacementList.get(0));
                    // 删除已经使用的字段
                    replacementList.remove(0);
                } else {
                    // 如果replacementList中的字段已经用完,保留原始的问号字符
                    resultBuilder.append(c);
                }
            } else {
                // 如果不是问号字符,直接添加到结果中
                resultBuilder.append(c);
            }
        }

        return resultBuilder.toString();
    }

输出内容测试

彩蛋

sql很长的话可以用快捷键,光标选定开始,shift+end ,我是联想小新的笔记本,end键在右箭头上,所以要加个alt,变成shift+alt+end,就可以选到末尾

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值