package com.javaniu; import java.awt.BorderLayout; import java.awt.Color; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class MySQLToBean extends JFrame { /** * */ private static final long serialVersionUID = 1L; private JCheckBox checkBox; Properties p = new Properties(); String configFile = "config.ini"; private JLabel lblNewLabel_4; public MySQLToBean() { setResizable(false); setTitle("MySQL生成javabean小工具"); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); setBounds(100, 100, 484, 324); JPanel panel = new JPanel(); getContentPane().add(panel, BorderLayout.CENTER); panel.setLayout(null); txtLocalhost = new JTextField(); txtLocalhost.setText("localhost"); txtLocalhost.setBounds(146, 10, 147, 21); panel.add(txtLocalhost); txtLocalhost.setColumns(10); JLabel lblIp = new JLabel("IP:"); lblIp.setBounds(80, 13, 30, 15); panel.add(lblIp); JLabel label = new JLabel("数据库:"); label.setBounds(80, 42, 54, 15); panel.add(label); textField = new JTextField(); textField.setBounds(146, 39, 147, 21); textField.setText("weibo4j"); panel.add(textField); textField.setColumns(10); JLabel label_1 = new JLabel("表名:"); label_1.setBounds(80, 127, 54, 15); panel.add(label_1); textField_1 = new JTextField(); textField_1.setBounds(146, 124, 147, 21); panel.add(textField_1); textField_1.setColumns(10); JLabel label_2 = new JLabel("包名:"); label_2.setBounds(79, 156, 54, 15); panel.add(label_2); txtComyourcom = new JTextField(); txtComyourcom.setText("com.javaniu.weibo4j"); txtComyourcom.setBounds(146, 155, 147, 21); panel.add(txtComyourcom); txtComyourcom.setColumns(10); JLabel lblNewLabel = new JLabel("输出目录:"); lblNewLabel.setBounds(80, 190, 65, 15); panel.add(lblNewLabel); textField_3 = new JTextField(); textField_3.setBounds(146, 186, 147, 21); textField_3.setText("c:/"); panel.add(textField_3); textField_3.setColumns(10); checkBox = new JCheckBox("生成包结构目录"); checkBox.setSelected(true); checkBox.setBounds(145, 213, 147, 23); panel.add(checkBox); JLabel lblNewLabel_1 = new JLabel("可以指定表名,也可以不指定"); lblNewLabel_1.setBounds(303, 127, 176, 15); panel.add(lblNewLabel_1); JLabel lblNewLabel_2 = new JLabel("* 数据库名"); lblNewLabel_2.setForeground(Color.RED); lblNewLabel_2.setBounds(303, 42, 66, 15); panel.add(lblNewLabel_2); JLabel lblNewLabel_3 = new JLabel("* 包结构"); lblNewLabel_3.setForeground(Color.RED); lblNewLabel_3.setBounds(303, 158, 79, 15); panel.add(lblNewLabel_3); JButton button = new JButton("执行"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { go(); } }); button.setBounds(145, 242, 93, 23); panel.add(button); textField_4 = new JTextField(); textField_4.setText("111111"); textField_4.setBounds(145, 93, 147, 21); panel.add(textField_4); textField_4.setColumns(10); txtRoot = new JTextField(); txtRoot.setText("root"); txtRoot.setBounds(145, 66, 148, 21); panel.add(txtRoot); txtRoot.setColumns(10); JLabel label_3 = new JLabel("用户名:"); label_3.setBounds(80, 69, 54, 15); panel.add(label_3); JLabel label_4 = new JLabel("密码:"); label_4.setBounds(80, 96, 54, 15); panel.add(label_4); lblNewLabel_4 = new JLabel(""); lblNewLabel_4.setForeground(Color.RED); lblNewLabel_4.setBounds(248, 242, 204, 23); panel.add(lblNewLabel_4); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { super.windowClosing(e); // export(); System.exit(0); } }); // inport(); } static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private JTextField txtLocalhost; private JTextField textField; private JTextField textField_1; private JTextField txtComyourcom; private JTextField textField_3; private JTextField textField_4; private JTextField txtRoot; /** * @param args */ public static void main(String[] args) { // // String field = "create_time"; // int idx = field.indexOf("_"); // if (idx != -1) { // String temp = field.substring(idx + 1, idx + 2); // String temp2 = new MySQLToBean().upperFirestChar(temp); // field = field.replaceFirst("_" + temp, temp2); // } // System.out.println(field); try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { e.printStackTrace(); } EventQueue.invokeLater(new Runnable() { public void run() { try { MySQLToBean frame = new MySQLToBean(); frame.setLocationRelativeTo(null); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } private void inport() { File config = new File(configFile); if (config.exists()) { try { InputStream is = new FileInputStream(config); p.load(is); is.close(); setUIVal(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { try { config.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } } public void setUIVal() { txtLocalhost.setText(p.getProperty("host", "localhost")); textField.setText(p.getProperty("database", "javaniu2")); txtRoot.setText(p.getProperty("user", "root")); textField_4.setText(p.getProperty("pass", "111111")); txtComyourcom.setText(p.getProperty("packname", "com.javaniu.weibo4j")); textField_3.setText(p.getProperty("dirstr", "c:/")); textField_1.setText(p.getProperty("tablename", "")); } private void export() { String host = txtLocalhost.getText(); String database = textField.getText(); String user = txtRoot.getText(); String pass = textField_4.getText(); String packname = txtComyourcom.getText(); String dirstr = textField_3.getText();// 空表示当前目录 String tablename = textField_1.getText(); p.setProperty("host", host); p.setProperty("database", database); p.setProperty("user", user); p.setProperty("pass", pass); p.setProperty("packname", packname); p.setProperty("dirstr", dirstr); p.setProperty("tablename", tablename); try { OutputStream out = new FileOutputStream(configFile); p.store(out, "退出保存文件," + sdf.format(new Date())); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void setTips(String msg) { lblNewLabel_4.setText(msg); } public void go() { String host = txtLocalhost.getText(); String database = textField.getText(); if (database.length() == 0) { setTips("数据库名必填"); return; } String user = txtRoot.getText(); String pass = textField_4.getText(); String packname = txtComyourcom.getText(); String dirstr = textField_3.getText();// 空表示当前目录 String tablename = textField_1.getText(); boolean createPackage = checkBox.getSelectedObjects() != null; System.out.println(createPackage); if (dirstr != null && !dirstr.isEmpty()) { if (!dirstr.endsWith("/")) { dirstr += "/"; } } File dir = new File(dirstr); if (createPackage) { dir = new File(dirstr + packname.replaceAll("\\.", "/")); if (!dir.exists()) { dir.mkdirs(); } } String outputdir = dir.getAbsolutePath();// bean的生成目录 Connection conn = null; try { conn = DBManager.mysql(host, database, user, pass); if (tablename.length() > 0) { parseTableByShowCreateModule(conn, tablename, packname, outputdir); } else { parseAllTable(conn, packname, outputdir); } } catch (ClassNotFoundException e) { e.printStackTrace(); setTips("找不到MySQL的jar包"); } catch (SQLException e) { e.printStackTrace(); } } /** * 开始处理生成所有表 如果不传入表名,表示将数据库中所有表生成bean; 可以指定表名生成bean; */ public void parseAllTable(Connection conn, String packname, String outputdir) { String sql = "show tables"; ResultSet rs = DBManager.query(conn, sql); try { List<String> tablenames = new ArrayList<String>(); while (rs.next()) { String tablename = rs.getString(1); // 生成module parseTableByShowCreateModule(conn, tablename, packname, outputdir); // 生成repository parseTableByShowCreateRepository(conn, tablename, packname, outputdir); // 生成service parseTableByShowCreateService(conn, tablename, packname, outputdir); // 生成serviceimpl parseTableByShowCreateServiceImpl(conn, tablename, packname, outputdir); // 生成controller parseTableByShowCreateController(conn, tablename, packname, outputdir); tablenames.add(tablename); } // 生成basecontroller parseTableByShowCreateBaseController(conn, tablenames, packname, outputdir); DBManager.close(conn, null, rs); } catch (SQLException e) { e.printStackTrace(); } } /** * 通过 mysql的 show create table TABLE_NAME逆向生成Bean; * * @param conn * @param tname * @param outputdir * @param packname */ private void parseTableByShowCreateModule(Connection conn, String tablename, String packname, String outputdir) { StringBuilder classInfo = new StringBuilder("/**\r\n\t*"); String sql = "show create table " + tablename; String _tablename = tablename; tablename = replaceS(tablename); ResultSet rs = null; try { rs = DBManager.query(conn, sql); StringBuilder fields = new StringBuilder(); StringBuilder methods = new StringBuilder(); while (rs.next()) { String sqlstr = rs.getString(2); String lines[] = sqlstr.split("\r\n"); for (int i = 0; i < lines.length; i++) { String line = lines[i]; System.out.println(line); // System.out.println("------------"); String regex = "\\s*`([^`]*)`\\s*(\\w+[^ ]*)\\s*(NOT\\s+NULL\\s*)?(AUTO_INCREMENT\\s*)?(DEFAULT\\s*([^ ]*|NULL|'0'|''|CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)\\s*)?(COMMENT\\s*'([^']*)')?\\s*,\\s*"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(line); while (m.find()) { String field = m.group(1); if (field.equals("created_at")) { continue; } if (field.equals("id")) { continue; } field = replaceS(field); String type = typeTrans(m.group(2)); fields.append(getFieldStr(field, type)); methods.append(getMethodStr(field, type)); } if (i == lines.length - 1) { classInfo.append("*@author javaniu\r\n"); classInfo.append(sdf.format(new Date())); classInfo.append("\r\n*/\r\n"); } } } classInfo.append("import javax.persistence.Entity;\n"); classInfo.append("import javax.persistence.Table;\n"); classInfo.append("import org.apache.commons.lang.builder.ToStringBuilder;\n"); classInfo.append("import java.util.Date;\n"); classInfo.append("@Entity\n"); classInfo.append("@Table(name = \"" + _tablename + "\")\n"); classInfo.append("public class ") .append(tablename + " extends BaseEntity").append("{\r\n"); classInfo.append(fields); classInfo.append("\t public " + tablename + "() {\n"); classInfo.append("\t \tthis.createAt = new Date();\n"); classInfo.append("\t }\n"); classInfo.append(methods); classInfo.append("\t @Override\n"); classInfo.append("\t public String toString() {\n"); classInfo .append("\t \treturn ToStringBuilder.reflectionToString(this);\n"); classInfo.append("\t }"); classInfo.append("\r\n"); classInfo.append("}"); } catch (SQLException e) { e.printStackTrace(); } String packageinfo = "package " + packname + ".module;\r\n\r\n"; File file = new File(outputdir + "/module", tablename + ".java"); System.out.println(file.getAbsolutePath()); try { File parent = file.getParentFile(); if (!parent.exists()) { parent.mkdirs(); } FileWriter fw = new FileWriter(file); fw.write(packageinfo); fw.write(classInfo.toString()); fw.flush(); fw.close(); } catch (IOException e) { e.printStackTrace(); } } private void parseTableByShowCreateRepository(Connection conn, String tablename, String packname, String outputdir) { StringBuilder classInfo = new StringBuilder(""); tablename = replaceS(tablename); classInfo .append("import org.springframework.data.jpa.repository.JpaRepository;\n"); classInfo.append("import com.javaniu.weibo4j.module." + tablename + ";\n"); classInfo.append("\t/**\r\n\t*"); classInfo.append("\t*@author javaniu\r\n"); classInfo.append(sdf.format(new Date())); classInfo.append("\r\n\t*/\r\n\r\n"); classInfo.append("public interface ").append(tablename + "Repository") .append(" extends JpaRepository<" + tablename + ", Long>") .append("{\r\n"); classInfo.append("\r\n"); classInfo.append("}"); String packageinfo = "package " + packname + ".repository;\r\n\r\n"; File file = new File(outputdir + "/repository", tablename + "Repository.java"); System.out.println(file.getAbsolutePath()); try { File parent = file.getParentFile(); if (!parent.exists()) { parent.mkdirs(); } FileWriter fw = new FileWriter(file); fw.write(packageinfo); fw.write(classInfo.toString()); fw.flush(); fw.close(); } catch (IOException e) { e.printStackTrace(); } } private void parseTableByShowCreateService(Connection conn, String tablename, String packname, String outputdir) { StringBuilder classInfo = new StringBuilder(""); tablename = replaceS(tablename); classInfo.append("import com.javaniu.weibo4j.module." + tablename + ";\n"); classInfo.append("import java.util.List;\n"); classInfo.append("\t/**\r\n\t*"); classInfo.append("\t*@author javaniu\r\n"); classInfo.append(sdf.format(new Date())); classInfo.append("\r\n\t*/\r\n\r\n"); classInfo.append("public interface ").append(tablename + "Service") .append("{\r\n"); classInfo.append("\t public void save(" + tablename + " " + lowerFirestChar(tablename) + ");\n"); classInfo.append("\t public void save(List<" + tablename + "> " + lowerFirestChar(tablename) + "s);\n"); classInfo.append("\t public void delete(long id);\n"); classInfo.append("\t public " + tablename + " findById(long id);\n"); classInfo.append("\t public Iterable<" + tablename + "> findByIds(List<Long> ids);\n"); classInfo.append("}"); String packageinfo = "package " + packname + ".service;\r\n\r\n"; File file = new File(outputdir + "/service", tablename + "Service.java"); System.out.println(file.getAbsolutePath()); try { File parent = file.getParentFile(); if (!parent.exists()) { parent.mkdirs(); } FileWriter fw = new FileWriter(file); fw.write(packageinfo); fw.write(classInfo.toString()); fw.flush(); fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void parseTableByShowCreateServiceImpl(Connection conn, String tablename, String packname, String outputdir) { StringBuilder classInfo = new StringBuilder(""); tablename = replaceS(tablename); classInfo.append("import org.springframework.stereotype.Service;\n"); classInfo.append("import com.javaniu.weibo4j.service." + tablename + "Service;\n"); classInfo.append("import com.javaniu.weibo4j.module." + tablename + ";\n"); classInfo.append("import java.util.List;\n"); classInfo.append("import com.javaniu.weibo4j.repository." + tablename + "Repository;\n"); classInfo .append("import org.springframework.transaction.annotation.Transactional;\n"); classInfo.append("import javax.annotation.Resource;\n"); classInfo.append("\t/**\r\n\t*"); classInfo.append("\t*@author javaniu\r\n"); classInfo.append(sdf.format(new Date())); classInfo.append("\r\n\t*/\r\n\r\n"); classInfo.append("@Service\n"); classInfo.append("@Transactional(readOnly = true)\n"); classInfo .append("public class ") .append(tablename + "ServiceImpl implements " + tablename + "Service").append("{\r\n"); classInfo.append("@Resource\n"); classInfo.append("private " + tablename + "Repository " + lowerFirestChar(tablename) + "Repository;\n"); classInfo.append("\t @Override\n"); classInfo.append("\t @Transactional(readOnly = false)\n"); classInfo.append("\t public void save(" + tablename + " " + lowerFirestChar(tablename) + ") {\n"); classInfo.append("\t \t " + lowerFirestChar(tablename) + "Repository.save(" + lowerFirestChar(tablename) + ");\n"); classInfo.append("\t }\n"); classInfo.append("\t @Override\n"); classInfo.append("\t @Transactional(readOnly = false)\n"); classInfo.append("\t public void save(List<" + tablename + "> " + lowerFirestChar(tablename) + "s) {\n"); classInfo.append("\t \t " + lowerFirestChar(tablename) + "Repository.save(" + lowerFirestChar(tablename) + "s);\n"); classInfo.append("}\n"); classInfo.append("\t @Override\n"); classInfo.append("\t @Transactional(readOnly = false)\n"); classInfo.append("\t public void delete(long id) {\n"); classInfo.append("\t \t " + lowerFirestChar(tablename) + "Repository.delete(id);\n"); classInfo.append("\t }\n"); classInfo.append("\t @Override\n"); classInfo.append("\t public " + tablename + " findById(long id) {\n"); classInfo.append("\t \t return " + lowerFirestChar(tablename) + "Repository.findOne(id);\n"); classInfo.append("\t }\n"); classInfo.append("\t @Override\n"); classInfo.append("\t public Iterable<" + tablename + "> findByIds(List<Long> ids) {\n"); classInfo.append("\t \t return " + lowerFirestChar(tablename) + "Repository.findAll(ids);\n"); classInfo.append("\t }\n"); classInfo.append("}"); String packageinfo = "package " + packname + ".service.impl;\r\n\r\n"; File file = new File(outputdir + "/service/impl/", tablename + "ServiceImpl.java"); System.out.println(file.getAbsolutePath()); try { File parent = file.getParentFile(); if (!parent.exists()) { parent.mkdirs(); } FileWriter fw = new FileWriter(file); fw.write(packageinfo); fw.write(classInfo.toString()); fw.flush(); fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void parseTableByShowCreateBaseController(Connection conn, List<String> tablenames, String packname, String outputdir) { String packageinfo = "package " + packname + ".controller;\r\n\r\n"; StringBuilder classInfo = new StringBuilder(""); classInfo .append("import org.springframework.beans.factory.annotation.Autowired;\n"); for (String tablename : tablenames) { tablename = replaceS(tablename); classInfo.append("import com.javaniu.weibo4j.service." + tablename + "Service;\n"); } classInfo.append("public abstract class BaseController") .append("{\r\n"); for (String tablename : tablenames) { tablename = replaceS(tablename); classInfo.append("\t @Autowired\n"); classInfo.append("\t public " + tablename + "Service " + lowerFirestChar(tablename) + "Service;\n"); } classInfo.append("}"); File file = new File(outputdir + "/controller", "BaseController.java"); System.out.println(file.getAbsolutePath()); try { File parent = file.getParentFile(); if (!parent.exists()) { parent.mkdirs(); } FileWriter fw = new FileWriter(file); fw.write(packageinfo); fw.write(classInfo.toString()); fw.flush(); fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void parseTableByShowCreateController(Connection conn, String tablename, String packname, String outputdir) { StringBuilder classInfo = new StringBuilder(""); String _tablename = tablename; tablename = replaceS(tablename); classInfo.append("import org.springframework.stereotype.Controller;\n"); classInfo .append("import org.springframework.web.bind.annotation.RequestMapping;\n"); classInfo.append("\t/**\r\n\t*"); classInfo.append("\t*@author javaniu\r\n"); classInfo.append(sdf.format(new Date())); classInfo.append("\r\n\t*/\r\n\r\n"); classInfo.append("@Controller\n"); classInfo.append("@RequestMapping({ \"/" + _tablename + "\" })\n"); classInfo.append("public class ") .append(tablename + "Controller extends BaseController") .append("{\r\n"); classInfo.append("}"); String packageinfo = "package " + packname + ".controller;\r\n\r\n"; File file = new File(outputdir + "/controller/", tablename + "Controller.java"); System.out.println(file.getAbsolutePath()); try { File parent = file.getParentFile(); if (!parent.exists()) { parent.mkdirs(); } FileWriter fw = new FileWriter(file); fw.write(packageinfo); fw.write(classInfo.toString()); fw.flush(); fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * * @param type * @return */ private String getMethodStr(String field, String type) { StringBuilder get = new StringBuilder("\tpublic "); get.append(type).append(" "); if (type.equals("boolean")) { get.append(field); } else { get.append("get"); get.append(field); } get.append("(){").append("\r\n\t\treturn this.") .append(lowerFirestChar(field)).append(";\r\n\t}\r\n"); StringBuilder set = new StringBuilder("\tpublic void "); if (type.equals("boolean")) { set.append(field); } else { set.append("set"); set.append(field); } set.append("(").append(type).append(" ").append(lowerFirestChar(field)) .append("){\r\n\t\tthis.").append(lowerFirestChar(field)) .append("=").append(lowerFirestChar(field)) .append(";\r\n\t}\r\n"); get.append(set); return get.toString(); } public String upperFirestChar(String src) { return src.substring(0, 1).toUpperCase().concat(src.substring(1)); } public String lowerFirestChar(String src) { return src.substring(0, 1).toLowerCase().concat(src.substring(1)); } private String getFieldStr(String field, String type) { StringBuilder sb = new StringBuilder(); sb.append("\t").append("private ").append(type).append(" ") .append(lowerFirestChar(field)).append(";"); sb.append("\r\n"); return sb.toString(); } /** * mysql的类型转换到java 类型参考文章 * http://hi.baidu.com/wwtvanessa/blog/item/9fe555945a07bd16d31b70cd.html */ public String typeTrans(String type) { if (type.contains("tinyint")) { return "boolean"; } else if (type.contains("bigint")) { return "long"; } else if (type.contains("int")) { return "int"; } else if (type.contains("varchar") || type.contains("date") || type.contains("time") || type.contains("datetime") || type.contains("timestamp") || type.contains("text") || type.contains("enum") || type.contains("set")) { return "String"; } else if (type.contains("binary") || type.contains("blob")) { return "byte[]"; } else { return "String"; } } public String replaceS(String input) { StringBuffer output = new StringBuffer(); int idx = input.indexOf("_"); if (idx == -1) { output.append(new MySQLToBean().upperFirestChar(input)); } else { String[] inputs = input.split("_"); for (String _input : inputs) { output.append(new MySQLToBean().upperFirestChar(_input)); } } return output.toString(); } }

jaonsang LV25
2019年10月26日
idcomcn2003 LV5
2019年4月2日
jiajia0524 LV2
2018年9月1日
wgtgt LV24
2017年9月9日
Fshenye LV1
2017年8月9日
淋湿巴黎mh LV2
2016年11月4日
inhv LV18
2016年4月15日
ivan747 LV7
2015年12月31日
zhangdashu LV1
2015年12月1日
勇往直前 LV10
2015年6月24日

婆婆12254 LV2
2023年6月12日
122378 LV3
2022年12月14日
wangjie49 LV7
2022年10月1日
接小兔兔回家
2021年12月3日
暂无贡献等级
马牛逼 LV1
2020年12月30日
1771658781 LV5
2020年12月17日
j_heyao LV1
2020年9月29日
zhangtian1997 LV10
2020年7月13日
cuimeng991226 LV1
2020年5月13日
gf12345678 LV5
2020年5月11日