Mysql自动生成javabean
时间:2015-01-06 00:05 来源:linux.it.net.cn 作者:IT
直接上代码:
数据库链接工具类:
-
import java.sql.Connection;
-
import java.sql.DriverManager;
-
import java.sql.ResultSet;
-
import java.sql.SQLException;
-
import java.sql.Statement;
-
-
//本类专门用来连接数据库,可以作为固定的工具类使用(记下来即可)
-
public class DBManager {
-
// 定义一个静态的连接对象用来连接数据库
-
// private static Connection conn = null;
-
// 定一个静态的语句对象,用来执行sql语句
-
// private static Statement stmt = null;
-
// 定义一个静态的结果集对象用来存放执行sql语句后查询得到的结果
-
// private static ResultSet rs = null;
-
-
/**
-
* 连接数据库的方法
-
*
-
* @return conn 返回一个连接对象
-
*/
-
public static Connection mssql(String url, String user, String pass) {
-
Connection conn = null;
-
try {
-
// 1、加载连接驱动
-
// "jdbc:odbc:bookdemo"
-
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
-
// 2、连接到数据库(获得连接对象)
-
// 通过连接管理器(DriverManager)类的一个方法来获得连接对象,里面的参数表示我们连接到数据源bookdemo
-
conn = DriverManager.getConnection(url, user, pass);
-
} catch (ClassNotFoundException e) {
-
// 以堆栈的方式将错误信息打印出来
-
e.printStackTrace();
-
} catch (SQLException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
-
return conn; // 将连接对象返回
-
}
-
-
/**
-
* 连接数据库的方法
-
*
-
* @return conn 返回一个连接对象
-
* @throws ClassNotFoundException
-
* @throws SQLException
-
*/
-
public static Connection mysql(String url, String user, String pass)
-
throws ClassNotFoundException, SQLException {
-
Connection conn = null;
-
-
// 1、加载连接驱动
-
// "jdbc:odbc:bookdemo"
-
Class.forName("com.mysql.jdbc.Driver");
-
// 2、连接到数据库(获得连接对象)
-
// 通过连接管理器(DriverManager)类的一个方法来获得连接对象,里面的参数表示我们连接到数据源bookdemo
-
conn = DriverManager.getConnection(url, user, pass);
-
-
return conn; // 将连接对象返回
-
}
-
-
/**
-
* 动漫网的mysql数据库连接
-
* @throws SQLException
-
* @throws ClassNotFoundException
-
*/
-
public static Connection mysql(String host, String database, String user,
-
String pass) throws ClassNotFoundException, SQLException {
-
String url = "jdbc:mysql://" + host + "/" + database
-
+ "?useUnicode=true&characterEncoding=UTF-8";
-
return mysql(url, user, pass);
-
}
-
-
/**
-
* 本函数用来执行用户传入的sql语句(仅限于select语句)
-
*
-
* @param sql
-
* 传入的sql语句,等待执行
-
* @return 返回执行sql语句后的结果集对象
-
*/
-
public static ResultSet query(Connection conn, String sql) {
-
ResultSet rs = null;
-
try {
-
// 3、通过连接对象创建一个语句对象stmt,用来执行sql语句
-
Statement stmt = conn.createStatement();
-
// 4、执行sql语句,得到一个rs(结果集对象)
-
rs = stmt.executeQuery(sql);
-
} catch (Exception e) { // 错误处理,暂时不用理会
-
e.printStackTrace();
-
}
-
return rs; // 将查询得到的结果集对象返回
-
}
-
-
/**
-
* 本方法用来执行更新语句,并返回影响了多少行(insert,update,delete)
-
*
-
* @param sql
-
* 传入的sql语句,等待执行
-
* @return 返回执行sql语句后的结果集对象
-
*/
-
public static int update(Connection conn, String sql) {
-
// 执行sql语句前先连接到数据库
-
Statement stmt = null;
-
int i = 0;
-
try {
-
// 通过连接对象创建一个语句对象stmt,用来执行sql语句
-
stmt = conn.createStatement();
-
// 执行更新语句,并返回影响了多少行
-
i = stmt.executeUpdate(sql);
-
} catch (Exception e) { // 错误处理,暂时不用理会
-
e.printStackTrace();
-
} finally {
-
try {
-
stmt.close();
-
} catch (SQLException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
}
-
return i;
-
}
-
-
public static void close(Connection conn, Statement stmt, ResultSet rs) {
-
-
try {
-
if (rs != null) {
-
rs.close();
-
rs = null;
-
}
-
if (stmt != null) {
-
stmt.close();
-
stmt = null;
-
}
-
if (conn != null) {
-
conn.close();
-
conn = null;
-
}
-
} catch (SQLException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
}
-
}
Javebean生成类:
-
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.Date;
-
import java.util.Properties;
-
-
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;
-
-
/**
-
* 此类用来将mysql的表直接生成Bean
-
*
-
* @author Ming
-
*/
-
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 = "desc " + tablename;
-
ResultSet rs = null;
-
try {
-
rs = DBManager.query(conn, sql);
-
StringBuilder fields = new StringBuilder();
-
StringBuilder methods = new StringBuilder();
-
int i = 0;
-
while (rs.next()) {
-
String fieldName = rs.getString("Field");
-
System.out.println(rs.getString("Type"));
-
String fieldType = "";
-
if (rs.getString("Type").contains("(")) {
-
fieldType = typeTrans(rs.getString("Type").substring(0,
-
rs.getString("Type").indexOf("(")));
-
} else {
-
fieldType = typeTrans(rs.getString("Type"));
-
}
-
-
fields.append(getFieldStr(fieldName, fieldType, null));
-
methods.append(getMethodStr(fieldName, fieldType));
-
-
if (i == 0) {
-
classInfo.append("此类由" + getClass().getSimpleName()
-
+ "工具自动生成\r\n");
-
-
classInfo.append("\r\n");
-
classInfo.append("\t*@author \r\n");
-
classInfo.append("\t*@since ");
-
classInfo.append(sdf.format(new Date()));
-
classInfo.append("\r\n\t*/\r\n\r\n");
-
-
}
-
i++;
-
}
-
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.replace("src.", "")
-
+ ";\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 类型参考文章
-
*
-
*/
-
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";
-
}
-
}
-
}
-
(责任编辑:IT)
直接上代码:
数据库链接工具类:
Javebean生成类:
(责任编辑:IT) |