packagecom;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.sql.Connection;importjava.sql.DatabaseMetaData;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.ResultSetMetaData;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;import java.util.*;/*** 根据数据库表结构 自动生成java MVC中的dao
*
*@authorDLHT 2018年5月10日下午15:00:28 AutoCreateDao.java*/
public classAutoCreateDao {/*// sql 驱动类
private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
// 数据库登录用户名
private static final String USER = "";
// 数据库登录密码
private static final String PASSWORD = "";
// 数据库连接地址
private static final String URL = "jdbc:sqlserver://localhost:1433;databasename=TakeawayDB";*/
public static String DRIVER = "com.mysql.jdbc.Driver";public static String URL = "jdbc:mysql://localhost:3306/schooldb?serverTimezone=GMT%2B8";public static String USER = "root";public static String PASSWORD = "";private staticString tablename;private String[] colnames; //列名数组
private String[] colTypes; //列名类型数组
private int[] colSizes; //列名大小数组
/*** 获取指定数据库中包含的表 TBlist
*
* @time 2016年3月4日下午5:54:52
* @packageName com.util
*@return返回所有表名(将表名放到一个集合中)
*@throwsException*/
public List TBlist() throwsException {//访问数据库 采用 JDBC方式
Class.forName(DRIVER);
Connection con=DriverManager.getConnection(URL, USER, PASSWORD);
DatabaseMetaData md=con.getMetaData();
List list = null;
ResultSet rs= md.getTables(null, null, "teacher", null);if (rs != null) {
list= new ArrayList();
}while(rs.next()) {//System.out.println("|表" + (i++) + ":" + rs.getString("TABLE_NAME"));
String tableName = rs.getString("TABLE_NAME");
list.add(tableName);
}
rs= null;
md= null;
con= null;returnlist;
}public void GenEntity(List TBlist, String packageName)throwsException {
Connection conn= null;
PreparedStatement pstmt= null;
ResultSetMetaData rsmd= null;//访问数据库 采用 JDBC方式
Class.forName(DRIVER);
conn=DriverManager.getConnection(URL, USER, PASSWORD);for (int k = 0; k < TBlist.size(); k++) {
tablename=TBlist.get(k);
String strsql= "select * from " +tablename;
pstmt=conn.prepareStatement(strsql);
rsmd=pstmt.getMetaData();int size =rsmd.getColumnCount();//共有多少列
colnames = newString[size];
colTypes= newString[size];
colSizes= new int[size];for (int i = 0; i < rsmd.getColumnCount(); i++) {
colnames[i]= rsmd.getColumnName(i + 1);
colTypes[i]= rsmd.getColumnTypeName(i + 1);/*if (colTypes[i].equalsIgnoreCase("datetime")) {
f_util = true;
}
if (colTypes[i].equalsIgnoreCase("image")
|| colTypes[i].equalsIgnoreCase("text")) {
f_sql = true;
}*/colSizes[i]= rsmd.getColumnDisplaySize(i + 1);
}
markerBean(initcap(tablename), parse(), packageName);
}
pstmt= null;
rsmd= null;
conn= null;
}/***
* 解析处理(生成实体类主体代码)*/
privateString parse() {
StringBuffer sb= newStringBuffer();//导入包
sb.append("import java.sql.*;\r\n");
sb.append("import java.util.*;\r\n");//自己新加一个导入包
sb.append("import util.DBUtil;\r\n");//自己新加一个时间导入包
sb.append("import java.sql.Date;\r\n");//导入对应实体包
sb.append("import com.vo." + initcap(tablename) + ";\r\n");
sb.append("public class " + initcap(tablename) + "DAO {\r\n");
processAllMethod(sb);
sb.append("}\r\n");returnsb.toString();
}/*** 创建java 文件 将生成的属性 get/set 方法 保存到 文件中 markerBean
*
* @time 2015年9月29日下午4:15:22
* @packageName fanshe
*@paramclassName
* 类名称
*@paramcontent
* 类内容 包括属性 getset 方法*/
public voidmarkerBean(String className, String content, String packageName) {
String folder= System.getProperty("user.dir") + "/src/" + packageName + "/";
File file= newFile(folder);if (!file.exists()) {
file.mkdirs();
}
String fileName= folder + className + "DAO.java";try{
File newdao= newFile(fileName);
FileWriter fw= newFileWriter(newdao);
fw.write("package\t" + packageName.replace("/", ".") + ";\r\n");
fw.write(content);
fw.flush();
fw.close();
}catch(IOException e) {
e.printStackTrace();
}
}/*** 生成所有的方法
*
*@paramsb*/
private voidprocessAllMethod(StringBuffer sb) {/*生成五个方法:
* findById,findAll,insert,update,delete*/
//getModel
sb.append("\tpublic List getModel("+sqlType2JavaType(colTypes[0])+" "+colnames[0]+") {\r\n");
sb.append("\t\tString sql = \"select * from " + tablename + " where "+colnames[0]+"=?\";\r\n");
sb.append("\t\tObject[] in = {"+colnames[0]+"};\r\n");
sb.append("\t\tResultSet rs = DBUtil.executeQuery(sql, in);\r\n");
sb.append("\t\tList list = new ArrayList();\r\n");
sb.append("\t\t" + initcap(tablename) + " model = null;\r\n");
sb.append("\t\ttry {\r\n");
sb.append("\t\t\tif(rs.next()) {\r\n");
sb.append("\t\t\t\tmodel = new " + initcap(tablename) + "(\r\n");
String link="";for (int i = 0; i < colnames.length; i++) {
sb.append(link+"\t\t\t\t\trs.get" + sqlTypeJavaType(colTypes[i]) + "(\"" + colnames[i] + "\")");
link=",\r\n";
}
sb.append(");\r\n");
sb.append("\t\t\t\tlist.add(model);\r\n");
sb.append("\t\t\t}\r\n");
sb.append("\t\t\tDBUtil.close();\r\n");
sb.append("\t\t} catch (SQLException e) {\r\n");
sb.append("\t\t\te.printStackTrace();\r\n");
sb.append("\t\t}\r\n");
sb.append("\t\treturn list;\r\n");
sb.append("\t}\r\n");//getModels
sb.append("\tpublic List getModels() {\r\n");
sb.append("\t\tString sql = \"select * from " + tablename + "\";\r\n");
sb.append("\t\tResultSet rs = DBUtil.executeQuery(sql);\r\n");
sb.append("\t\tList list = new ArrayList();\r\n");
sb.append("\t\t" + initcap(tablename) + " model = null;\r\n");
sb.append("\t\ttry {\r\n");
sb.append("\t\t\twhile(rs.next()) {\r\n");
sb.append("\t\t\t\tmodel = new " + initcap(tablename) + "(\r\n");
link="";for (int i = 0; i < colnames.length; i++) {
sb.append(link+"\t\t\t\t\trs.get" + sqlTypeJavaType(colTypes[i]) + "(\"" + colnames[i] + "\")");
link=",\r\n";
}
sb.append(");\r\n");
sb.append("\t\t\t\tlist.add(model);\r\n");
sb.append("\t\t\t}\r\n");
sb.append("\t\t\tDBUtil.close();\r\n");
sb.append("\t\t} catch (SQLException e) {\r\n");
sb.append("\t\t\te.printStackTrace();\r\n");
sb.append("\t\t}\r\n");
sb.append("\t\treturn list;\r\n");
sb.append("\t}\r\n");/*//insert
sb.append("\tpublic int insert(" + initcap(tablename) + " model) {\r\n");
//添加相同个数的?
String linkinsert="";
for (int i = 1; i < colnames.length; i++) {
linkinsert+="?";
if(i
linkinsert+=",";
}
}
sb.append("\t\tString sql = \"insert into " + tablename + " values("+linkinsert+") \";\r\n");
sb.append("\t\tObject[] in = {");
link="";
for (int i = 1; i < colnames.length; i++) {
sb.append(link+"model.get"+initcap(colnames[i])+"()");
link=",";
}
sb.append("};\r\n");
//DBUtil...改成自己项目的util
sb.append("\t\treturn DBUtil.executeUpdate(sql, in);\r\n");
sb.append("\t}\r\n");*/
//insert
String linkinserttop="";for (int i = 1; i
linkinserttop+=sqlType2JavaType(colTypes[i])+" "+colnames[i];if(i
linkinserttop+=",";
}
}
sb.append("\tpublic int insert(" + linkinserttop + ") {\r\n");//添加相同个数的?
String linkinsert="";for (int i = 1; i < colnames.length; i++) {
linkinsert+="?";if(i
linkinsert+=",";
}
}
sb.append("\t\tString sql = \"insert into " + tablename + " values("+linkinsert+")\";\r\n");
sb.append("\t\tObject[] in = {");
link="";for (int i = 1; i < colnames.length; i++) {
sb.append(link+colnames[i]);
link=",";
}
sb.append("};\r\n");//DBUtil...改成自己项目的util
sb.append("\t\treturn DBUtil.executeUpdate(sql, in);\r\n");
sb.append("\t}\r\n");//update
String linkupdate1="";for (int i = colnames.length-1; i >=0 ; i--) {//调用类型,使其进行改变
linkupdate1+=sqlType2JavaType(colTypes[i])+" "+colnames[i];if(i>0) {
linkupdate1+=",";
}
}
sb.append("\tpublic int update("+linkupdate1+") {\r\n");
String linkupdate2="set"+" ";for (int i = 1; i < colnames.length; i++) {
linkupdate2+=colnames[i]+"=?";if(i
linkupdate2+=",";
}
}
sb.append("\t\tString sql = \"update " + tablename + " "+linkupdate2+" where "+colnames[0]+"=?\";\r\n");
sb.append("\t\tObject[] in = {");
link="";for (int i = colnames.length-1; i >=0 ; i--) {
sb.append(link+colnames[i]);if(i>0) {
link=",";
}
}
sb.append("};\r\n");//DBUtil...改成自己项目的util
sb.append("\t\treturn DBUtil.executeUpdate(sql, in);\r\n");
sb.append("\t}\r\n");//delete
sb.append("\tpublic int delete("+sqlType2JavaType(colTypes[0])+" "+colnames[0]+") {\r\n");
sb.append("\t\tString sql = \"delete from " + tablename + " where "+colnames[0]+"=?\";\r\n");
sb.append("\t\tObject[] in = {"+colnames[0]+"};\r\n");//DBUtil...改成自己项目的util
sb.append("\t\treturn DBUtil.executeUpdate(sql, in);\r\n");
sb.append("\t}\r\n");
}/*** 把输入字符串的首字母改成大写
*
*@paramstr
*@return
*/
privateString initcap(String str) {char[] ch =str.toCharArray();if (ch[0] >= 'a' && ch[0] <= 'z') {
ch[0] = (char) (ch[0] - 32);
}return newString(ch);
}privateString sqlType2JavaType(String sqlType) {if (sqlType.equalsIgnoreCase("bit")) {return "boolean";
}else if (sqlType.equalsIgnoreCase("tinyint")) {return "byte";
}else if (sqlType.equalsIgnoreCase("smallint")) {return "short";
}else if (sqlType.equalsIgnoreCase("int")) {return "int";
}else if (sqlType.equalsIgnoreCase("bigint")) {return "long";
}else if (sqlType.equalsIgnoreCase("float")) {return "float";
}else if (sqlType.equalsIgnoreCase("decimal")|| sqlType.equalsIgnoreCase("numeric")|| sqlType.equalsIgnoreCase("real")) {return "double";
}else if (sqlType.equalsIgnoreCase("money")|| sqlType.equalsIgnoreCase("smallmoney")) {return "double";
}else if (sqlType.equalsIgnoreCase("varchar")|| sqlType.equalsIgnoreCase("char")|| sqlType.equalsIgnoreCase("nvarchar")|| sqlType.equalsIgnoreCase("nchar")|| sqlType.equalsIgnoreCase("uniqueidentifier")|| sqlType.equalsIgnoreCase("ntext")) {return "String";
}else if (sqlType.equalsIgnoreCase("datetime")||sqlType.equalsIgnoreCase("date")){return "Date";
}else if (sqlType.equalsIgnoreCase("image")) {return "Blob";
}else if (sqlType.equalsIgnoreCase("text")) {return "Clob";
}return "String";
}privateString sqlTypeJavaType(String sqlType) {if (sqlType.equalsIgnoreCase("bit")) {return "Boolean";
}else if (sqlType.equalsIgnoreCase("tinyint")) {return "Byte";
}else if (sqlType.equalsIgnoreCase("smallint")) {return "Short";
}else if (sqlType.equalsIgnoreCase("int")) {return "Int";
}else if (sqlType.equalsIgnoreCase("bigint")) {return "Long";
}else if (sqlType.equalsIgnoreCase("float")) {return "Float";
}else if (sqlType.equalsIgnoreCase("decimal")|| sqlType.equalsIgnoreCase("numeric")|| sqlType.equalsIgnoreCase("real")) {return "Double";
}else if (sqlType.equalsIgnoreCase("money")|| sqlType.equalsIgnoreCase("smallmoney")) {return "Double";
}else if (sqlType.equalsIgnoreCase("varchar")|| sqlType.equalsIgnoreCase("char")|| sqlType.equalsIgnoreCase("nvarchar")|| sqlType.equalsIgnoreCase("nchar")|| sqlType.equalsIgnoreCase("uniqueidentifier")|| sqlType.equalsIgnoreCase("ntext")) {return "String";
}else if (sqlType.equalsIgnoreCase("datetime")||sqlType.equalsIgnoreCase("date")){return "Date";
}else if (sqlType.equalsIgnoreCase("image")) {return "Blob";
}else if (sqlType.equalsIgnoreCase("text")) {return "Clob";
}return "String";
}public static void main(String[] args) throwsException {
AutoCreateDao auto= newAutoCreateDao();
List list =auto.TBlist();
auto.GenEntity(list,"com/dao");
}
}