zoukankan      html  css  js  c++  java
  • mybatis输出预编译的sql替换为可直接执行的sql

    package wanjing;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    
    public class SqlReplaceUtil extends JFrame {
    
        private static final Pattern HUMP_PATTERN = Pattern.compile("\?");
        JPanel jp;
        JButton b1;
        JTextArea sqlTextField;
        JTextArea paramTextField;
        JTextArea resultTextField;
        JLabel lb3;
        JLabel lb4;
    
        SqlReplaceUtil() {
            jp = new JPanel();
            b1 = new JButton("替换");
            sqlTextField = new JTextArea("输入待处理的SQL,比如:insert into test (id,name,age) values (?,?,?)",10,90);
            paramTextField = new JTextArea("输入待处理参数,比如:100(Integer),zhangsan(String),null",10,90);
            resultTextField = new JTextArea(10,90);
            lb3 = new JLabel("结果为:");
            lb4 = new JLabel("");
            b1.addActionListener(new ActionListener() {//响应按钮的事件
                public void actionPerformed(ActionEvent e) {
                    try {
                        lb4.setText("");
                        String sql = sqlTextField.getText();
                        String param = paramTextField.getText();
                        resultTextField.setText(replaceSql(sql, param));
                    } catch (Exception ex) {
                        lb4.setText(ex.getMessage());
                    }
                }
    
            });
            jp.add(sqlTextField);
            jp.add(paramTextField);
            jp.add(b1);
            jp.add(resultTextField);
            jp.add(lb4);
    
            add(jp);
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setLocationRelativeTo(null);
            setLocation(600, 200);
            setVisible(true);
            pack();
            setSize(1050, 700);
            setLocationRelativeTo(null);
            setVisible(true);
            setResizable(false);
        }
    
        public static void main(String[] args) {
            SqlReplaceUtil e = new SqlReplaceUtil();
            Container contentPane = e.getContentPane();
            contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
        }
    
        private String replaceSql(String sql, String param) {
            String[] split = param.split(",");
            //校验数量
            int paramCount = split.length;
            int matcherCount = 0;
            Matcher matcher = HUMP_PATTERN.matcher(sql);
            while (matcher.find()) {
                matcherCount++;
            }
            if (paramCount != matcherCount) {
                throw new RuntimeException("待替换参数和参数数量不一致");
            }
            //处理参数
            for (int i = 0; i < split.length; i++) {
                split[i] = split[i].trim();
                int index = split[i].lastIndexOf('(');
                if (split[i].equals("null")||index<0) {
                    continue;
                }
                split[i] = "'" + split[i].substring(0, index) + "'";
            }
            StringBuffer sb = new StringBuffer();
            Matcher matcher2 = HUMP_PATTERN.matcher(sql);
            int index = 0;
            while (matcher2.find()) {
                matcher2.appendReplacement(sb, split[index]);
                index++;
            }
            matcher2.appendTail(sb);
            return sb.toString();
        }
    }
    

      

  • 相关阅读:
    springboot与微信开发(一)
    使用springboot+layim+websocket实现webim
    使用springboot+layim+websocket实现webim
    Spring boot WebSocket 注入失败
    使用spring boot +WebSocket的那些坑
    Scrapy 问题锦集(后边继续更新)
    mac安装并创建Scrapy项目
    mac 安装MySQL-python的坑
    IDEA/Pycharm文件头注释模板
    工作用到的正则及测试工具
  • 原文地址:https://www.cnblogs.com/wanjn/p/12764721.html
Copyright © 2011-2022 走看看