import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.sql.*;
import java.util.HashMap;
import java.util.Properties;
public class SQLServerOjdbc {
private static HashMap hashMap = new HashMap(8);
public static void main(String[] args) throws Exception {
String table = "WOMEN_INFO";//表名称
Properties props = new Properties();
props.put("remarksReporting", "true");
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url ="jdbc:sqlserver://IP:1433;DatabaseName=cancer_dev;allowMultiQueries=true";
String userName = "sa";
String passWord = "sa";
props.put("user", userName);
props.put("password", passWord);
Connection conn = DriverManager.getConnection(url, props);
Statement dbmd = conn.createStatement();
ResultSet resultSet = dbmd.executeQuery(" select a.name, cast(isnull(e.[value],'') as nvarchar(100)) as remark " +
"from sys.columns a inner join sys.objects c on a.object_id=c.object_id and c.type='u'" +
"left join sys.extended_properties e on e.major_id=c.object_id " +
"and e.minor_id=a.column_id and e.class=1 where c.name='" + table + "'");
String fileDirPth = "H:\\table";//生成文件存放位置
Type(conn, table);
File pathFile = new File(fileDirPth);
if (!pathFile.exists()) {
pathFile.mkdirs();
}
File userFile = new File(fileDirPth + "/" + table + ".txt");
if (!userFile.exists()) {
userFile.createNewFile();
}
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(userFile));
StringBuffer bufferInsert = new StringBuffer();
StringBuffer bufferInsert2 = new StringBuffer("(");
StringBuffer bufferUpdate = new StringBuffer(" update " + table + "\n" +
" <trim prefix=\"SET\" suffixOverrides=\",\">");
bufferInsert.append("insert into " + table + "(");
while (resultSet.next()) {
String remark = resultSet.getString("remark");
String name = resultSet.getString("name");
String oldName = name;
bufferInsert.append(name + ",");
String type = selectType(name);
bufferedWriter.newLine();
name = ZFC(name);
if (type.equals("Date")) {
bufferedWriter.write(" @ApiModelProperty(value = \"" + remark + "\",example = \"2019-01-01 00:00:00\")");
bufferedWriter.newLine();
bufferInsert2.append("#{" + name + ",jdbcType=TIMESTAMP},");
bufferUpdate.append("<if test=\"null != " + name + " and '' != " + name + "\">\n" +
" " + oldName + "=#{" + name + ",jdbcType=TIMESTAMP}},\n" +
" </if>");
} else {
bufferInsert2.append("#{" + name + "},");
bufferedWriter.write(" @ApiModelProperty(value = \"" + remark + "\")");
bufferedWriter.newLine();
bufferUpdate.append("<if test=\"null != " + name + " and '' != " + name + "\">\n" +
" " + oldName + "=#{" + name + "},\n" +
" </if>");
}
bufferedWriter.write(" private " + type + " " + name + ";");
bufferedWriter.newLine();
}
bufferInsert.append(") VALUES ");
bufferInsert2.append(")");
bufferedWriter.newLine();
bufferedWriter.append("------------------insert--------------------");
bufferedWriter.newLine();
bufferedWriter.write(bufferInsert.append(bufferInsert2.toString()).toString());
bufferedWriter.newLine();
bufferedWriter.append("------------------update--------------------");
bufferedWriter.newLine();
bufferUpdate.append("</trim>");
bufferedWriter.write(bufferUpdate.toString());
bufferedWriter.close();
}
//将数据库中的带有下划线的字段按照驼峰命名
private static String ZFC(String colName) {
String subFen = "";
if (colName.indexOf("_") == -1) {
return colName.toLowerCase();
} else {
String[] feng = colName.split("_");
for (int i = 0; i < feng.length; i++) {
if (i == 0) {
subFen += feng[i].toLowerCase();
} else {
subFen += feng[i].substring(0, 1).toUpperCase() + feng[i].substring(1, feng[i].length()).toLowerCase();
}
}
}
return subFen;
}
//查询字段类型
private static void Type(Connection conn, String tableName) throws Exception {
DatabaseMetaData dbmd = conn.getMetaData();
ResultSet rs = dbmd.getColumns(null, "%", tableName, "%");
while (rs.next()) {
hashMap.put(rs.getString("COLUMN_NAME"), rs.getString("TYPE_NAME"));
}
}
//判断字段类型,返回对应的JAVA类型
private static String selectType(String colName) throws Exception {
String charName = hashMap.get(colName).toString().trim();
switch (charName.hashCode()) {
case 104431:
return "Integer";
case 1793702779:
return "Date";
default:
return "String";
}
}
}