生成类 java_Java中自动生成实体类

该代码段展示了一个Java程序,用于根据数据库表结构自动生成对应的DAO层代码。程序首先获取数据库中的表名,然后针对每个表,通过JDBC连接获取表的列名、类型和大小,接着生成实体类的get/set方法以及CRUD操作的方法,并将结果保存到指定的Java文件中。主要涉及数据库连接、元数据查询和文件写入操作。
摘要由CSDN通过智能技术生成

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");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值