mybatis 自动生成插入修改sql工具大幅度提高开发速度

本人最近正在用mybatis这个框架开发,写了sql以后感觉很纠结。。因为mybatis写插入和修改sql是这样的。。

update 表名 set username=#{username},
password=#{password},
phone=#{phone} 

insert into 表名 (username,
password,
phone
) values (#{username},
#{password},
#{phone}
)

写起来感觉很麻烦很浪费时间所以做了个工具后是这样的。。

这工具的用法是通过字段生成insert 和update 语句

查询的话可以通过mysql工具生成 如下↓ navicat premium

生成sql 可以通过ctrl+F 查找 t1. 然后清空掉 把字段复制到工具里生成 insert update 语句 这样查询和增加还有修改基本就完成了。

废话不多说上源码。。

package com.kero99.ygc.util;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.MatteBorder;
/**
 * 
 * @author 作者:于公成
 * @see    博客  https://blog.youkuaiyun.com/qq_17025903
 */
public class CreateSqlWin extends JFrame {  
  
    private JPanel contentPane;  
    private JTextField txtStr;  
    private JRadioButton rdbtnString;  
    private JRadioButton rdbtnStringbuffer;  
    private JSplitPane splitPane;  
    private JTextArea newSql;  
    private JTextArea oldSql;  
      
 //   private ImageIcon ico = new ImageIcon(this.getClass().getResource("sql.png"));  
  
    /** 
     * Launch the application. 
     */  
    public static void main(String[] args) {  
        EventQueue.invokeLater(new Runnable() {  
            public void run() {  
                try {  
                    CreateSqlWin frame = new CreateSqlWin();  
                    frame.setVisible(true);  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
        });  
    }  
  
    /** 
     * Create the frame. 
     */  
    public CreateSqlWin() {  
    //    setIconImage(ico.getImage());  
        setMinimumSize(new Dimension(840, 600));  
        setTitle("SQL转JAVA字符串-于公成");  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        setBounds(100, 100, 842, 605);  
        contentPane = new JPanel();  
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));  
        setContentPane(contentPane);  
        contentPane.setLayout(new BorderLayout(0, 0));  
          
        JPanel panel = new JPanel();  
        panel.setPreferredSize(new Dimension(10, 80));  
        contentPane.add(panel, BorderLayout.NORTH);  
        panel.setLayout(new BorderLayout(0, 0));  
          
        JPanel panel_1 = new JPanel();  
        panel_1.setBorder(new LineBorder(new Color(0, 0, 0)));  
        panel_1.setPreferredSize(new Dimension(300, 10));  
        panel.add(panel_1, BorderLayout.CENTER);  
        panel_1.setLayout(null);  
          
        JLabel label = new JLabel("选择生成方式:");  
        label.setBounds(10, 10, 153, 20);  
        panel_1.add(label);  
          
        rdbtnString = new JRadioButton("String");  
        rdbtnString.setSelected(true);  
        rdbtnString.setBounds(52, 36, 79, 23);  
        panel_1.add(rdbtnString);  
          
        rdbtnStringbuffer = new JRadioButton("StringBuffer");  
        rdbtnStringbuffer.setBounds(144, 36, 107, 23);  
        panel_1.add(rdbtnStringbuffer);  
          
        ButtonGroup bGroup = new ButtonGroup();  
        bGroup.add(rdbtnString);  
        bGroup.add(rdbtnStringbuffer);  
          
        txtStr = new JTextField();  
        txtStr.setText("str");  
        txtStr.setBounds(313, 31, 180, 33);  
        panel_1.add(txtStr);  
        txtStr.setColumns(10);  
          
        JLabel label_1 = new JLabel("输入变量名:");  
        label_1.setBounds(276, 13, 87, 15);  
        panel_1.add(label_1);  
          
        JPanel panel_3 = new JPanel();  
        panel_3.setBorder(new MatteBorder(1, 0, 1, 1, (Color) new Color(0, 0, 0)));  
        panel_3.setPreferredSize(new Dimension(200, 10));  
        panel.add(panel_3, BorderLayout.EAST);  
        panel_3.setLayout(new BorderLayout(0, 0));  
          
        JButton button = new JButton("生成");  
        button.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent e) {  
                //生成SQL  
                String oldSqlStr = oldSql.getText();  
                if(oldSqlStr.equals("")){  
                    JOptionPane.showMessageDialog(CreateSqlWin.this, "请在左侧输入SQL再执行!");  
                    return;  
                }  
                //清空  
                if(!newSql.getText().equals("")){  
                    newSql.setText("");  
                }  
                String valibleName = txtStr.getText();  
                if(valibleName.trim().equals("")){  
                    JOptionPane.showMessageDialog(CreateSqlWin.this, "请输入变量名!");  
                    return;  
                }  
                String[] sqls = oldSqlStr.split("\n");  
                StringBuffer result = new StringBuffer();  
                //对SQL进行拼接  
                if(rdbtnString.isSelected()){  
                    //string形式  
                    for(int i=0;i<sqls.length-1;i++){  
                        if(result.toString().equals("")){  
                            result.append(valibleName+" = \" "+sqls[i]+" \"\n");  
                        }  
                        else {  
                            result.append(" +\" "+sqls[i]+" \"\n");  
                        }  
                    }  
                    result.append(" +\" "+sqls[sqls.length-1]+" \";\n");  
                }  
                else{  
                    //string形式  
                    for(int i=0;i<sqls.length;i++){  
                        result.append(valibleName+".append(\" "+sqls[i]+" \");\n");  
                    }  
                }  
                newSql.setText(result.toString());  
            }  
        });  
        button.setFont(new Font("楷体", Font.PLAIN, 32));  
        panel_3.add(button, BorderLayout.CENTER);  
          
        JPanel panel_2 = new JPanel();  
        panel_2.setBorder(new MatteBorder(0, 1, 1, 1, (Color) new Color(0, 0, 0)));  
        contentPane.add(panel_2, BorderLayout.CENTER);  
        panel_2.setLayout(new BorderLayout(0, 0));  
          
        splitPane = new JSplitPane();  
        splitPane.addComponentListener(new ComponentAdapter() {  
            @Override  
            public void componentResized(ComponentEvent e) {  
                divider();  
            }  
        });  
        panel_2.add(splitPane, BorderLayout.CENTER);  
          
        JScrollPane scrollPane = new JScrollPane();  
        splitPane.setLeftComponent(scrollPane);  
          
        oldSql = new JTextArea();  
        scrollPane.setViewportView(oldSql);  
          
        JScrollPane scrollPane_1 = new JScrollPane();  
        splitPane.setRightComponent(scrollPane_1);  
          
        newSql = new JTextArea();  
        scrollPane_1.setViewportView(newSql);  
          
        JPanel panel_4 = new JPanel();  
        FlowLayout flowLayout = (FlowLayout) panel_4.getLayout();  
        flowLayout.setAlignment(FlowLayout.LEFT);  
        panel_4.setPreferredSize(new Dimension(10, 30));  
        panel_2.add(panel_4, BorderLayout.NORTH);  
          
        JLabel lblsql = new JLabel("请在左侧输入你要格式化的SQL语句:");  
        lblsql.setHorizontalAlignment(SwingConstants.LEFT);  
        panel_4.add(lblsql);  
    }  
      
    public void divider(){  
        splitPane.setDividerLocation(0.4);  
    }  
}  

因为mybatis 对应的参数要求是对应实体类所以又做了一个通过对象生成mybatis对应的属性。。

package com.kero99.utils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import com.kero99.pojo.Lfeaturebaseinfo;

public class EntityUtil {
	/**
	 * 通过实体类反射拿到属性转换insert  获取值sql
	 * @param model
	 * @return
	 * @throws Exception
	 * @author ygc
	 */
	public static List<String> modelReflect(Object model) throws Exception{
        List<String> list=new ArrayList<String>();
		for (Field field : model.getClass().getDeclaredFields()) {
            field.setAccessible(true);
            list.add(field.getName().replace(field.getName(),"#{"+field.getName()+"}")+"\n");
//            System.out.println(field.getName());
        }
		if(list.get(list.size()-1).contains(",")) {
			list.get(list.size()-1).replace(",", "");
		}
		return list;
    }
	public static void main(String[] args) throws Exception {
	
		Lfeaturebaseinfo s=new Lfeaturebaseinfo();
		System.out.println(EntityUtil.modelReflect(s));		
	}

	
}

生成的属性可以直接复制替换values 后面的 如下图↓

generator自动生成的全为小写,基于最初的版本修改了版,默认获取的值全为小写。如下↓

package com.kero99.ygc.util;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.MatteBorder;

public class CreateSqlWinMybatis extends JFrame {  
  
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;  
    private JTextField txtStr;  
    private JRadioButton rdbtnString;  
    private JRadioButton rdbtnStringbuffer;  
    private JSplitPane splitPane;  
    private JTextArea newSql;  
    private JTextArea oldSql;  
      
 //   private ImageIcon ico = new ImageIcon(this.getClass().getResource("sql.png"));  

    public static void main(String[] args) {  
        EventQueue.invokeLater(new Runnable() {  
            public void run() {  
                try {  
                    CreateSqlWinMybatis frame = new CreateSqlWinMybatis();  
                    frame.setVisible(true);  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
        });  
    }  
    
    public CreateSqlWinMybatis() {  
    //    setIconImage(ico.getImage());  
        setMinimumSize(new Dimension(840, 600));  
        setTitle("MybatisSql自动生成工具-于公成");  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        setBounds(100, 100, 842, 605);  
        contentPane = new JPanel();  
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));  
        setContentPane(contentPane);  
        contentPane.setLayout(new BorderLayout(0, 0));  
          
        JPanel panel = new JPanel();  
        panel.setPreferredSize(new Dimension(10, 80));  
        contentPane.add(panel, BorderLayout.NORTH);  
        panel.setLayout(new BorderLayout(0, 0));  
          
        JPanel panel_1 = new JPanel();  
        panel_1.setBorder(new LineBorder(new Color(0, 0, 0)));  
        panel_1.setPreferredSize(new Dimension(300, 10));  
        panel.add(panel_1, BorderLayout.CENTER);  
        panel_1.setLayout(null);  
          
   
          
        rdbtnString = new JRadioButton();  
        rdbtnString.setSelected(true);  
        rdbtnString.setBounds(52, 36, 79, 23);  
     
          
//        rdbtnStringbuffer = new JRadioButton();  
//        rdbtnStringbuffer.setBounds(144, 36, 107, 23);  
        
          
        ButtonGroup bGroup = new ButtonGroup();  
        bGroup.add(rdbtnString);  
//        bGroup.add(rdbtnStringbuffer);  
          
        txtStr = new JTextField();  
          
        JPanel panel_3 = new JPanel();  
        panel_3.setBorder(new MatteBorder(1, 0, 1, 1, (Color) new Color(0, 0, 0)));  
        panel_3.setPreferredSize(new Dimension(200, 10));  
        panel.add(panel_3, BorderLayout.EAST);  
        panel_3.setLayout(new BorderLayout(0, 0));  
          
        JButton button = new JButton("生成sql");  
        button.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent e) {  
                //生成SQL  
                String oldSqlStr = oldSql.getText();  
                if(oldSqlStr.equals("")){  
                    JOptionPane.showMessageDialog(CreateSqlWinMybatis.this, "请在左侧输入SQL再执行!");  
                    return;  
                }  
                //清空  
                if(!newSql.getText().equals("")){  
                    newSql.setText("");  
                }  
        
                String[] sqls = oldSqlStr.split("\n");  
             
                StringBuffer result = new StringBuffer();  
                result.append("update 表名 set ");
                StringBuffer result1 = new StringBuffer();  
                StringBuffer result2 = new StringBuffer();  
                result1.append("insert into 表名 (");
                //对SQL进行拼接  
                if(rdbtnString.isSelected()){  
                    //string形式  
                    for(int i=0;i<sqls.length;i++){  
                    	  if(sqls[i].trim().contains(",")) {
                    		      
                    		  String sql=sqls[i].trim().replace(",","=#{"+sqls[i].trim().toLowerCase().replace(",", "")+"},");
                        	  
                              result.append(sql.trim().replace(sql.trim(), sql.trim()+"\n"));  
                    	  }else {
                    		  String sql=sqls[i].trim().replace(sqls[i].trim(), sqls[i].trim()+"=#{"+sqls[i].toLowerCase().trim()+"}");
                    		  result.append(sql.trim().replace(sql.trim(), sql.trim()+"\n"));  
                    	  }
                    	 
                    }  
                    for(int i=0;i<sqls.length;i++){  
                    
                    	result1.append(sqls[i].trim()+"\n");
                    	if(sqls[i].trim().contains(",")) {
                    		result2.append(sqls[i].trim().replace(sqls[i].trim(),"#{"+sqls[i].trim().toLowerCase().replace(",", "")+"},")+"\n");
                    	}else {
                    		result2.append(sqls[i].trim().replace(sqls[i].trim(),"#{"+sqls[i].trim().toLowerCase().replace(",", "")+"}")+"\n");
                    	}

                    }
                	result1.append(") values ("+result2.toString()+")");
                }
         
                newSql.setText(result.toString()+"\n"+result1.toString());
             
            }  
        });  
        button.setFont(new Font("楷体", Font.PLAIN, 32));  
        panel_3.add(button, BorderLayout.CENTER);  
          
        JPanel panel_2 = new JPanel();  
        panel_2.setBorder(new MatteBorder(0, 1, 1, 1, (Color) new Color(0, 0, 0)));  
        contentPane.add(panel_2, BorderLayout.CENTER);  
        panel_2.setLayout(new BorderLayout(0, 0));  
          
        splitPane = new JSplitPane();  
        splitPane.addComponentListener(new ComponentAdapter() {  
            @Override  
            public void componentResized(ComponentEvent e) {  
                divider();  
            }  
        });  
        panel_2.add(splitPane, BorderLayout.CENTER);  
          
        JScrollPane scrollPane = new JScrollPane();  
        splitPane.setLeftComponent(scrollPane);  
          
        oldSql = new JTextArea();  
        scrollPane.setViewportView(oldSql);  
          
        JScrollPane scrollPane_1 = new JScrollPane();  
        splitPane.setRightComponent(scrollPane_1);  
          
        newSql = new JTextArea();  
        scrollPane_1.setViewportView(newSql);  
          
        JPanel panel_4 = new JPanel();  
        FlowLayout flowLayout = (FlowLayout) panel_4.getLayout();  
        flowLayout.setAlignment(FlowLayout.LEFT);  
        panel_4.setPreferredSize(new Dimension(10, 30));  
        panel_2.add(panel_4, BorderLayout.NORTH);  
          
        JLabel lblsql = new JLabel("请在左侧输入字段生成sql:");  
        lblsql.setHorizontalAlignment(SwingConstants.LEFT);  
        panel_4.add(lblsql);  
    }  
      
    public void divider(){  
        splitPane.setDividerLocation(0.4);  
    }  
}  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南归北隐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值