本人最近正在用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);
}
}