第一步:连接数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import  java.sql.Connection;
import  java.sql.DriverManager;
import  java.sql.ResultSet;
import  java.sql.SQLException;
import  java.sql.Statement;
import  javax.swing.JOptionPane;
public  class  DBConnection {
private  static  final  String DBDRIVER =  "com.mysql.jdbc.Driver" ;                  //驱动类类名
private  static  final  String DBURL =  "jdbc:mysql://localhost:3306/ibatis" ;       //连接URL
private  static  final  String DBUSER =  "root" ;                                     //数据库用户名
private  static  final  String DBPASSWORD =  "admin" ;                                //数据库密码
static {                                                                          //将加载驱动放到静态块中
try  {
Class.forName(DBDRIVER);                                                 //加载驱动
catch  (ClassNotFoundException e1) {                                        //发生加载驱动异常
JOptionPane.showMessageDialog( null , "加载驱动失败!!!" , "提示信息" ,
JOptionPane.INFORMATION_MESSAGE);                                //提示加载驱动失败
}
}
public  static  Connection getConnection() {
Connection conn =  null ;                                                      //建立Connection接口引用
try  {
conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);           //建立连接
catch  (SQLException e) {                                                   // 发生连接异常
JOptionPane.showMessageDialog( null , "连接MySQL连接失败!!!" , "提示信息" ,
JOptionPane.INFORMATION_MESSAGE);                                //提示连接MySQL连接失败
}
return  conn;
}
public  static  void  close(Connection conn) {
if  (conn !=  null ) {                                                          //判断Connection对象是否为空
try  {
conn.close();                                                        // 关闭连接数据库资源
catch  (SQLException e){                                                //判断关闭Connection对象时是否发生异常
System.out.println( "关闭数据库连接发生异常" );
}
}
}
public  static  void  close(Statement stmt) {
if  (stmt !=  null ){                                                           //判断Statement对象是否为空
try  {
stmt.close();                                                        //关闭操作数据库资源
catch  (SQLException e){                                                //判断关闭Statement对象时是否发生异常
JOptionPane.showMessageDialog( null , "关闭数据库操作资源发生异常!!!" , "提示信息" ,
JOptionPane.INFORMATION_MESSAGE);                            //提示关闭数据库操作资源发生异常
}
}
}
public  static  void  close(ResultSet rs) {
if  (rs !=  null ) {                                                            //判断结果集是否为空
try  {
rs.close();                                                          //关闭结果集
catch  (SQLException e){                                                //判断结果集是否发生异常
JOptionPane.showMessageDialog( null , "关闭结果集发生异常!!!" , "提示信息" ,
JOptionPane.INFORMATION_MESSAGE);                            //提示关闭结果集发生异常
}
}
}
}

第二步:执行转换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import  java.io.File;
import  java.io.PrintWriter;
import  java.sql.Connection;
import  java.sql.DatabaseMetaData;
import  java.sql.PreparedStatement;
import  java.sql.ResultSet;
import  java.sql.ResultSetMetaData;
import  java.sql.Types;
import  org.apache.commons.dbutils.DbUtils;
public  class  BuildDTO {
public  void  build(String tableName, String packageName, String className) {
Connection conn =  null ;
PreparedStatement pment =  null ;
ResultSet rs =  null ;
PrintWriter pw =  null ;
String pack = packageName.replace( "." "/" );
// 包名
System.out.println( "src/"  + pack +  "/"  + className +  ".java" );
try  {
pw =  new  PrintWriter( new  File( "src/"  + pack +  "/"  + className
".java" ));
pw.println( "package "  + packageName +  ";\n\n" );
pw.println( "" );
pw.println( "public class "  + className +  " \n{\t" );
// 创建连接
conn = DBConnection.getConnection();
// 构建预处理器
pment = conn.prepareStatement( "select * from "  + tableName
" where 1 = 2;" );
rs = pment.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
// 获取表单的列数
int  colum = metaData.getColumnCount();
for  ( int  i =  1 ; i <= colum; i++) {
String pStr =  "" // setXxxx
String typeStr =  "" // 类型
// 获取列名
String columName = metaData.getColumnName(i);
// 获取每一列的数据类型
int  type = metaData.getColumnType(i);
// System.out.println(i+"---"+type);
// 判断
typeStr = type(type);
// 组装 private 的语句
pStr +=  "private "  + typeStr +  " "  + columName +  ";" ;
// 输出 private 的字段
pw.println( "\t"  + pStr +  "" );
}
String constructStr =  "" // 构造
// 组装空参构造
constructStr +=  "public "  + className +  "()\n\t{\n\n\t}" ;
// 输出空参构造
pw.println( "\n\t"  + constructStr +  "\n" );
for  ( int  i =  1 ; i <= colum; i++) {
String getStr =  "" ;
String setStr =  "" ;
String typeStr =  "" ;
// 获取列名
String columName = metaData.getColumnName(i);
// 获取每一列的数据类型
int  type = metaData.getColumnType(i);
// 判断
typeStr = type(type);
// 组装 set 的语句
setStr +=  "public void set"
+ columName.substring( 0 1 ).toUpperCase() +  ""
+ columName.substring( 1 ) +  "("  + typeStr +  " "
+ columName +  ")\n\t{\n" ;
setStr +=  "\t\tthis."  + columName +  " = "  + columName
";\n\t}" ;
// 组装get语句
getStr +=  "public "  + typeStr +  " get"
+ columName.substring( 0 1 ).toUpperCase() +  ""
+ columName.substring( 1 ) +  "()\n\t{\n\t" ;
getStr +=  "\treturn this."  + columName +  ";\n\t}" ;
// 输出 set
pw.println( "\t"  + setStr);
// 输出 get
pw.println( "\t"  + getStr);
}
pw.println( "}" );
// 缓冲
pw.flush();
pw.close();
catch  (Exception e) {
e.printStackTrace();
finally  {
// 关闭连接
DbUtils.closeQuietly(conn, pment, rs);
}
}
public  String type( int  type) {
String typeStr =  null ;
if  (Types.INTEGER == type) {
typeStr =  "Integer" ;
else  if  (Types.VARCHAR == type) {
typeStr =  "String" ;
else  if  (Types.CHAR == type) {
typeStr =  "CHAR" ;
else  if  (Types.TIMESTAMP == type) {
typeStr =  "Date" ;
else  if  (Types.INTEGER == type) {
typeStr =  "Integer" ;
else  if  (Types.LONGVARCHAR == type) {
typeStr =  "String" ;
}
return  typeStr;
}
//获取数据库中的所有表
public  void  getTableNameByCon(Connection con) {
try  {
DatabaseMetaData meta = con.getMetaData();
ResultSet rs = meta.getTables( null null null ,
new  String[] {  "TABLE"  });
while  (rs.next()) {
System.out.println( "表名:"  + rs.getString( 3 ));
System.out.println( "表所属用户名:"  + rs.getString( 2 ));
System.out.println( "------------------------------" );
}
con.close();
catch  (Exception e) {
try  {
con.close();
catch  (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public  static  void  main(String[] args) {
BuildDTO dto =  new  BuildDTO();
dto.build( "User" "com.mzsx.sql2bean" "User" );
dto.getTableNameByCon(DBConnection.getConnection());
}
}