mybatis输出预编译的sql替换为可直接执行的sql
Posted 敲出一个世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(); } }
以上是关于mybatis输出预编译的sql替换为可直接执行的sql的主要内容,如果未能解决你的问题,请参考以下文章