java实体类生成mysql表_自己简单写的JDBCUtils,可以根据当前数据库下面的表生成java实体类。...

自己简单写的JDBCUtils,可以根据当前数据库下面的表生成java实体类,代码萌新,请多多包涵,不足的地方很多,还有待改进。

初始化配置:

//驱动程序名//不固定,根据驱动

static String driver = "com.mysql.jdbc.Driver";//URL指向要访问的数据库名******,8.0jar包新增时区。

static String url = "jdbc:mysql://localhost/你的数据库名?serverTimezone=GMT%2B8";//MySQL配置时的用户名

static String user = "你的帐号";//Java连接MySQL配置时的密码******

static String password = "你的密码";private static String[] colnames; //列名数组

private static String[] colTypes; //列名类型数组

private static String[] upperColnames; //驼峰命名的字段

private static List listArr=new ArrayList(); //存储最终的数据

static{try{

Class.forName(driver);

}catch(ClassNotFoundException e) {

e.printStackTrace();

}

}

打开与关闭数据库连接:

public staticConnection mySQLOpen() {

Connection con= null;try{

con=DriverManager.getConnection(url, user, password);

System.out.println("succeed to connection mysql!");

}catch(SQLException e) {

e.printStackTrace();

}returncon;

}public static voidmySQLClose(ResultSet rs, Statement st, Connection con) {try{try{if (rs != null) {

rs.close();

}

}finally{try{if (st != null) {

st.close();

}

}finally{if (con != null)

con.close();

}

}

}catch(SQLException e) {

e.printStackTrace();

}

}

获得当前数据库下的所有表名:

/*** 获得当前数据库生成数据库下所有的表名

*@authorone

*

**/

public static ListgetTableFromNowConnectDB(){

Connection conn=null;

DatabaseMetaData dbmd= null;

List list = null;try{

conn=mySQLOpen();

dbmd=(DatabaseMetaData) conn.getMetaData();//conn.getCatalog():获得当前目录

ResultSet rs = dbmd.getTables(conn.getCatalog(), "%", "%", new String[] { "TABLE"});if (rs != null) {

list= new ArrayList();

}while(rs.next()){//System.out.println(rs.getString("TABLE_NAME"));

list.add(rs.getString("TABLE_NAME"));

}

}catch(Exception e) {

e.printStackTrace();

}returnlist;

}

生成每个表名的所有字段:

/*** 生成所有的字段

*

*@paramsb,把stringbuffer 对象传进来继续append

*@return

*/

private static voidprocessAllField(StringBuffer sb) {for (int i = 0; i < colnames.length; i++) {

sb.append("\tprivate " + colTypes[i] + " " + colnames[i] + ";\r\n");

}

}

生成每个表名的set(),get()访问器:

/*** 生成所有的set(),get()

*

*@paramsb,把stringbuffer 对象传进来继续append*/

private static voidprocessAllMethod(StringBuffer sb) {for (int i = 0; i < colnames.length; i++) {

sb.append("\tpublic void set" + upperColnames[i] + "(" + colTypes[i] + " " + colnames[i] + "){\r\n");

sb.append("\t\tthis." + colnames[i] + " = " + colnames[i] + ";\r\n");

sb.append("\t}\r\n");

sb.append("\tpublic " + colTypes[i] + " get" + upperColnames[i] + "(){\r\n");

sb.append("\t\treturn this." + colnames[i] + ";\r\n");

sb.append("\t}\r\n");

}

}

生成每个表名的构造函数:

/***@authorone

* 该方法用于生成构造函数

*@paramsb,把stringbuffer 对象传进来继续append

*@see默认生成一个无参数构造和带全部参数构造

*

* public UserInfo(){}

public UserInfo(int uid, String uname, String usex) {

super();

this.uid = uid;

this.uname = uname;

this.usex = usex;

}

**/

private static voidprocessConstructor(StringBuffer sb,String tableName) {

sb.append("\tpublic "+tableName+"(){}\r\n");

sb.append("\tpublic "+tableName+"(");

String link="";for (int i = 0; i < colnames.length; i++) {

sb.append(link+ colTypes[i] + " " +colnames[i]);

link=",";

}

sb.append("){\r\n");for (int i = 0; i < colnames.length; i++) {

sb.append("\t\tthis."+colnames[i]+"="+colnames[i]+";\r\n");

}

sb.append("\t}\r\n");

}

数据类型转换的方法:

/*** 该方法用于类型转换

*@paramdbType:传入的数据类型

*@authorone

**/

private staticString sqlTypeToJava(String dbType) {

dbType=dbType.toUpperCase();switch(dbType) {case "VARCHAR":case "VARCHAR2":case "CHAR":return "String";case "NUMBER":case "DECIMAL":return "double";case "INT":case "SMALLINT":case "INTEGER":return "int";case "BIGINT":return "int";case "DATETIME":case "TIMESTAMP":case "DATE":return "Date";default:return "Object";

}

}

创建文件夹,写入项目:

/*** 创建java 文件 将生成的属性 get/set 方法 保存到 文件中 markerBean

*

*@authorone

* @packageName fanshe

*@paramclassName

* 类名称

*@paramcontent

* 类内容 包括属性 getset 方法*/

public static voidcreateFloder(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 + ".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();

}

}

生成实体类:

/*** 该方法生成Entity

*@paramtablename:表名集合

*@parampackname:要生成的路径

*@authorone

**/

public static List createEntity(List tableNames,String packname) throwsException{

Connection conn=null;

PreparedStatement pstmt=null;

ResultSetMetaData rsmd= null;//每个表的表名

String eveTableName="";

conn=mySQLOpen();//System.out.println("当前数据库下的表的总数:"+tableNames.size());

for (int i = 0; i < tableNames.size(); i++) {//用StringBuffer的形式先输出测试一下

StringBuffer sb=new StringBuffer("");//表名首字母转大写

eveTableName=tableNames.get(i).substring(0, 1).toUpperCase()+tableNames.get(i).substring(1,tableNames.get(i).length());

sb.append("public class "+eveTableName+" {\n\n");//查询语句

String sql="select * from "+eveTableName;

pstmt=conn.prepareStatement(sql);//获得表的元数据

rsmd=pstmt.getMetaData();//每个表共有多少列

int size =rsmd.getColumnCount();//把字段放在集合里面

colnames = newString[size];

colTypes= newString[size];

upperColnames= newString[size];for (int j = 0; j < size; j++) {

String columnName= rsmd.getColumnName(j+1);//每列的字段名

colnames[j]=columnName;

String colunmType=sqlTypeToJava(rsmd.getColumnTypeName(j+1));//每列的类型

colTypes[j]=colunmType;//接下来做驼峰命名的字段

String upperColumnNam= rsmd.getColumnName(j+1).substring(0,1).toUpperCase()+rsmd.getColumnName(j+1).substring(1,rsmd.getColumnName(j+1).length());

upperColnames[j]=upperColumnNam;

}

processAllField(sb);//生成字段

processAllMethod(sb); //生成set,get方法

processConstructor(sb,eveTableName); //生成构造函数//添加最后一个括号

sb.append("}");//创建文件夹,sb.toString(),把数据扔进去

createFloder(eveTableName,sb.toString(),packname);

listArr.add(sb);

}//关闭连接

mySQLClose(null,pstmt,conn);returnlistArr;

}

展示数据的方法:

/*** 展示

**/

public static voidgoCreate(){try{

List result=createEntity(getTableFromNowConnectDB(),"vo2");for (int i = 0; i < result.size(); i++) {

System.out.println("============第"+(i+1)+"个表的实体类生成============");

System.out.println(result.get(i));

}

}catch(Exception e) {

e.printStackTrace();

}

}

效果如下:

872914f42a2cdf9bd4d95aa37e8b1bd9.png

文件夹创建效果:

8edf849f1cc28b23c7d5090bc1bdd9e3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值