- 浏览: 287019 次
- 性别:
- 来自: 无锡
文章分类
- 全部博客 (100)
- swing (6)
- web (13)
- Eclipse (5)
- plug-in (0)
- mysql (3)
- java综合 (13)
- 反编译 (2)
- oracle (16)
- uml (1)
- 编码相关 (2)
- tomcat (2)
- gis (2)
- windows (8)
- ssh (1)
- android (9)
- LBS (1)
- 笔记 (1)
- struts2 (1)
- http (1)
- 安全 (5)
- vps (1)
- linux (3)
- dwr (1)
- jni (1)
- js (2)
- 支付宝 (1)
- 基础与原理 (4)
- maven (3)
- sso (1)
- 数字证书 (2)
- keytool (1)
最新评论
-
wgyyouge:
有个命令行下的高效迁移工具ora2mysqlhttp://ww ...
强大简单的mysql迁移到oracle的工具 -
qqwe8554677:
...
java汉字转拼音,取汉字首字母,支持繁体 -
相约的旋律:
最后一个结论有疑问。我们在生产服务器上面一开始是使用 in 查 ...
SQL in 和 exists区别(转)(数据量大,效率区别特别明显) -
Seavision:
怎么输出大写?
java汉字转拼音,取汉字首字母,支持繁体 -
诗飘秋舞的活着:
输入 长沙的时候 输出的是 zhangsha 和zs
java汉字转拼音,取汉字首字母,支持繁体
做网站时,感觉数据库的设计比较重要,当花了很多时间设计好数据库时,就希望有一个能自动生成bean的工具,虽然Eclipse的插件能反向生成bean和hibernate的配置文件,但总感觉不够灵活,不够小到随意简单使用。但又实在不想去敲代码写一个个很多属性的bean。网上没找着现成合适的,于是就花了点时间自己写了个生成工具玩玩,也希望能给需要的朋友们一点点帮助~~
直接放出可执行的exe程序和源码了,喜欢且需要的朋友尽管拿去用。
MySQLToBean.java
package org.just.util; import java.io.File; /** * 此类用来将mysql的表直接生成Bean * * @author childlikeman@gmail.com */ 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); 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.yourcom.bean"); 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); 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("123456"); 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) { 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", "")); txtRoot.setText(p.getProperty("user", "root")); textField_4.setText(p.getProperty("pass", "123456")); txtComyourcom.setText(p.getProperty("packname", "com.youcom.bean")); textField_3.setText(p.getProperty("dirstr", "")); 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) { parseTableByShowCreate(conn, tablename, packname, outputdir); } else { parseAllTable(conn, packname, outputdir); } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); setTips("找不到MySQL的jar包"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 开始处理生成所有表 如果不传入表名,表示将数据库中所有表生成bean; 可以指定表名生成bean; */ public void parseAllTable(Connection conn, String packname, String outputdir) { String sql = "show tables"; ResultSet rs = DBManager.query(conn, sql); try { while (rs.next()) { String tablename = rs.getString(1); parseTableByShowCreate(conn, tablename, packname, outputdir); } DBManager.close(conn, null, rs); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 通过 mysql的 show create table TABLE_NAME逆向生成Bean; * * @param conn * @param tname * @param outputdir * @param packname */ private void parseTableByShowCreate(Connection conn, String tablename, String packname, String outputdir) { StringBuilder classInfo = new StringBuilder("\t/**\r\n\t*"); boolean shouldCloseConn = false; String sql = "show create table " + 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*)?(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); String type = typeTrans(m.group(2)); String cmt = m.group(7); fields.append(getFieldStr(field, type, cmt)); methods.append(getMethodStr(field, type)); // System.out.println(field); // System.out.println(type); // System.out.println(cmt); } if (i == lines.length - 1) { classInfo.append("此类由" + getClass().getSimpleName() + "工具自动生成\r\n"); classInfo.append("\t*备注(数据表的comment字段):"); int index = line.indexOf("COMMENT="); if (index != -1) { String tmp = line.substring(index + 8); classInfo.append(tmp.replace("'", "")); } else { classInfo.append("无备注信息"); } classInfo.append("\r\n"); classInfo .append("\t*@author childlikeman@gmail.com,http://t.qq.com/lostpig\r\n"); classInfo.append("\t*@since "); classInfo.append(sdf.format(new Date())); classInfo.append("\r\n\t*/\r\n\r\n"); } } } classInfo.append("\tpublic class ") .append(upperFirestChar(tablename)).append("{\r\n"); classInfo.append(fields); classInfo.append(methods); classInfo.append("\r\n"); classInfo.append("}"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { DBManager.close(shouldCloseConn ? conn : null, null, rs); } String packageinfo = "package " + packname + ";\r\n\r\n"; File file = new File(outputdir, upperFirestChar(tablename) + ".java"); System.out.println(file.getAbsolutePath()); try { 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(upperFirestChar(field)); } get.append("(){").append("\r\n\t\treturn this.").append(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(upperFirestChar(field)); } set.append("(").append(type).append(" ").append(field) .append("){\r\n\t\tthis.").append(field).append("=") .append(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)); } private String getFieldStr(String field, String type, String cmt) { StringBuilder sb = new StringBuilder(); sb.append("\t").append("private ").append(type).append(" ") .append(field).append(";"); if (cmt != null) { sb.append("//").append(cmt); } 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("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"; } } }
评论
1 楼
hunterboyzlw
2014-12-09
非常感谢楼主的分享,受益匪浅。
不过有我遇到了一个小问题不知道是否楼主或者其他网友也遇到了,就是乱码的问题。
楼主的代码里没有明确生成javabean的字符集,我看生成文件默认的是Chinese Simplified(GB2312),而通常大家在开发的时候用的都是utf-8。
把这段代码改一下,就ok了。
FileWriter fw = new FileWriter(file);
改为:
Writer w = new OutputStreamWriter(new FileOutputStream(file),"utf-8")。
不过有我遇到了一个小问题不知道是否楼主或者其他网友也遇到了,就是乱码的问题。
楼主的代码里没有明确生成javabean的字符集,我看生成文件默认的是Chinese Simplified(GB2312),而通常大家在开发的时候用的都是utf-8。
把这段代码改一下,就ok了。
FileWriter fw = new FileWriter(file);
改为:
Writer w = new OutputStreamWriter(new FileOutputStream(file),"utf-8")。
发表评论
-
request.getPathInfo() 方法的作用
2012-07-05 12:15 1351request.getPathInfo(); 这个方法返回请 ... -
mysql触发器
2012-04-20 09:52 1118有个产品,产品有专辑,每个产品只能有一个专辑。 专辑表有个专 ... -
java 操作(创建)excel,jxl加边框,jxl合并单元格,单元格的设置,单元格居中
2012-03-17 19:00 7232jxl加边框 WritableWorkbook wwb ... -
在Swing的Label中显示网络读取的BMP图像数组
2012-03-03 14:39 3037在SWING中显示网络上动 ... -
聊聊Web应用的会话管理
2011-12-14 15:54 1531http连接是无状态的,但web程序交互中经常又需要状态。所以 ... -
Java 线程池的原理与实现
2011-09-09 16:09 887这几天主要是狂看源程序,在弥补了一些以前知识空白的同时,也学会 ... -
httpclient来进行https访问
2011-07-17 11:18 1242httpclient完全支持ssl连接方式。通常,如果不需要 ... -
JDK细节-jdbc非寻常用法
2011-06-26 13:03 1110从JDBC2.0开始,ResultSet 接口提供了 ... -
Java实现的各种排序
2011-06-20 15:00 1130转自:http://blog.sina.com.cn/s/bl ... -
JAVA--- BigDecimal
2011-03-08 17:31 1471双精度浮点型变量double可以处理16位有效数 ... -
获取电脑物理网卡地址工具类
2011-01-27 09:54 1611MacAddr.java import java.io ... -
RGB转HSL
2011-01-25 12:45 1596public static float[] getHsl(i ... -
java汉字转拼音,取汉字首字母,支持繁体
2010-12-30 14:13 18878import net.sourceforge.pinyin4j ... -
Mysql查询时按汉语拼音首字母排序
2010-12-24 17:30 2865按A字母排序, select * from `table` ... -
java/swing屏幕截图代码
2010-11-30 10:00 1305try { Robot r; r = ne ... -
java消息提示框,功能类似360的漏洞修复提醒,自制背景图,可拖动,实用
2010-08-19 21:28 6342花了一晚上把昨天昨天写的气泡提示的程序改了改,做了张背景图,表 ... -
含动画的java气泡提示效果,右下角消息提示窗
2010-08-18 09:14 6582消息提示框类,包含动画的设置,以及取任务栏高度 TipWin ... -
java(Swing)获取任务栏的高度
2010-08-13 12:55 2611import java.awt.Insets; import ...
相关推荐
工具能智能开启驼峰命名,将数据库中的字段名转换为JavaBean的属性名,例如将`table_name`转换为`tableName`。 3. **操作简单**: - 工具设计的目标是简化工作流程,通常只需几步就能完成JavaBean的生成。开发者...
总的来说,"数据库表生成javabean工具及源代码(修正版)"是Java开发中的一个实用工具,它简化了数据模型到代码的转换过程,尤其适用于数据库驱动的应用开发。合理利用这类工具,可以优化开发流程,让开发团队更加...
总的来说,这个项目展示了如何利用JSP、Servlet和JavaBean的协同工作来实现对MySQL数据库的访问。这种分层架构使得代码更易于维护和扩展,同时也遵循了MVC(Model-View-Controller)设计模式的思想,即模型处理数据...
于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持...
标题中的“基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v5.8.0版)”指的是一个软件工具,它能够帮助开发者快速地根据数据库结构自动生成相关的Java代码和文档,大大提高了开发效率。这个...
综上所述,这个过程利用了Java的自动化工具和XML配置,实现了从MySQL数据库到Java源代码的快速转换,极大地提高了开发效率,同时也保持了代码的规范性和一致性。在实际项目中,这样的自动化代码生成策略可以节省大量...
在这个“Ajax Jsp 连接MySQL数据库”的主题中,我们将深入探讨如何在JSP页面上利用Ajax技术与后台MySQL数据库进行交互,同时处理多个Ajax请求。 首先,让我们了解基本概念。Ajax的核心是通过JavaScript向服务器发送...
标题和描述中提到的“servlet”、“javabean”和“jsp”是Java Web开发中的关键技术,它们共同构建了一个学生成绩管理系统的后端部分,并结合了MySQL数据库来存储和管理数据。这个项目可能包含了一个完整的、基于Web...
数据库直接生成JavaBean文件的工具是一种高效开发辅助软件,它极大地简化了开发人员从数据库模型到Java对象(JavaBean)的转换过程。这种工具能够直接连接到数据库,根据数据库中的表结构自动生成对应的JavaBean类,...
于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持...
在IT行业中,数据库管理和Java编程是两个至关重要的领域,它们之间的结合——`Mysql javaBean`,涉及到如何在Java应用程序中有效地操作MySQL数据库。这里,我们将会深入探讨这个主题,了解如何通过JavaBean来实现与...
【标题】"购物系统(jsp+JavaBean+mysql)"是一个基于Web的电子商务应用程序,它利用了JavaServer Pages(JSP)、JavaBeans以及MySQL数据库来实现一个基础的在线购物平台。这个项目旨在帮助初学者理解如何将前端界面...
于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持去除多个前缀,...
鲤鱼论坛BBS v1.0是一个基于Java技术栈,使用JSP、MySQL数据库和JavaBean进行开发的在线讨论平台。这个系统展示了如何利用这些技术构建一个基础的Web应用程序,为用户提供发布、阅读和回复帖子的功能。以下是关于...
于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持去除多个前缀,...
于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持去除多个前缀,...
`generator-mysql`是一个实用工具,它基于`generator-mybatis`项目,用于自动从MySQL数据库生成实体类,大大简化了开发过程,特别是在处理大量数据表时。这个工具的亮点在于它不仅生成实体类,还能够生成字段的注释...
这个免费插件允许开发者轻松地从Oracle和MySQL数据库的表结构自动生成对应的Java Bean类,大大简化了数据操作层的代码编写工作。 首先,我们来看标题中的核心概念“eclipse插件”。Eclipse是一个开源的集成开发环境...
在Java开发中,将Java实体类转换为MySQL数据库的建表语句是一项常见的任务,它有助于快速构建数据库模型,尤其在使用ORM(对象关系映射)框架如Hibernate、MyBatis时更为便捷。本篇文章将深入探讨这个过程,并提供...
于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持去除多个前缀,...