将数据库中表转化为实体类的可重复使用工具

我来了!!两周没有更新了!emmmmm
在这里插入图片描述

当拿到数据库表时,为了不用重复写实体类,用Java写一个可以重复使用的转换工具,将数据库中的表自动转化为实体类。程序员应该学会偷懒!!!

JDBCUtuil

package com.homework.dao;

import java.sql.*;
public class JdbcUtils {
    private static String driver="com.mysql.cj.jdbc.Driver";
    private static String url="jdbc:mysql://localhost:3306/mf?serverTimezone=Asia/Shanghai&characterEncoding=utf-8";
    private static String user="root";
    private static String password="java";

    static{/*随着类的加载而执行,而且只执行一次*/
        try {
            // 1.加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConn() throws SQLException {
        //2.创建链接
        Connection conn= DriverManager.getConnection(url, user, password);
        return conn;
    }
     //最后关闭资源
    public static void closeAll(ResultSet rs, Statement stat, Connection conn){
        try {
            if ( rs != null ){
                rs.close();
            }
            if ( stat != null ){
                stat.close();
            }
            if ( conn != null ){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

代码注释应该是比较详细的

package demo;

import dao.JdbcUtils;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class TableAndJava {
    private static String temp = "";

    public static void Table2Java(String packageName, String tableName) {
        temp = "";

        try {
            // 1、数据库连接
            Connection conn = JdbcUtils.getConn();
            PreparedStatement ps = conn.prepareStatement("select * from " + tableName);

            ResultSet rs = ps.executeQuery();/* executeQuery 返回结果集*/
            ResultSetMetaData rsmd = rs.getMetaData();/*metadata元数据*/
            //2.开始拼接数据
            /*拼接实体类开头*/
            createClassFront(packageName, tableName);
            //循环表中的列
            for (int i = 1; i <=rsmd.getColumnCount(); i++) {
                /*拼接实体类属性*/
                createFlied(rsmd.getColumnName(i), rsmd.getColumnClassName(i));
            }
            for (int i = 1; i <=rsmd.getColumnCount(); i++) {
                /*拼接get方法*/
                createGet(rsmd.getColumnName(i), rsmd.getColumnClassName(i));
                /*拼接set方法*/
                createSet(rsmd.getColumnName(i), rsmd.getColumnClassName(i));
            }
            //3.拼接结束
            temp += "}\t\n";
            /*后台打印*/
            System.out.println(temp);
            // 4、使用io流写入
            writeClass(packageName, tableName);
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
    private static void writeClass(String packageName, String tableName) {/*创建文件*/

        File dir =new File("demo/src/"+packageName.replace(".", "/"));
        if(!dir.exists()){/*文件是否存在*/
            dir.mkdirs();/*不存在创建*/
        }
//        File targetFile=new File(dir, firstCharToUpper())
        File targetFile = new File(dir,firstCharToUpper(tableName)+".java");
        try {
            FileWriter fw = new FileWriter(targetFile);
            fw.write(temp);
            fw.flush();
            fw.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    //set方法
    // public void setBook_id(int book_id) {
    //        this.book_id = book_id;}
    private static void createSet(String columnName, String columnClassName) {
        temp += "\tpublic void set" + firstCharToUpper(columnName) + "(" + columnClassName +" "+columnName.toLowerCase()+ "){\t\n";
        temp += "\t\tthis." + columnName.toLowerCase() + " = " + columnName .toLowerCase()+ ";}\t\n";
    }

    //get方法
    // public int getBook_id() {
    //        return book_id;}
    private static void createGet(String columnName, String columnClassName) {
        temp += "\tpublic " + columnClassName + " "+" get" + firstCharToUpper(columnName) + "(){\t\n";
        temp += "\t\treturn " + columnName .toLowerCase()+ ";}\t\n";

    }

    private static void createFlied(String columnName, String columnClassName) {
        temp += "\tprivate " + columnClassName + " " + columnName.toLowerCase() + ";\t\n";
    }

    public static void createClassFront(String packageName, String tableName) {
        temp += "package " + packageName + ";\t\n";
        temp += "public class " + firstCharToUpper(tableName) + "{\t\n";
    }

    //将数据库中拿到的列名首字母转化为小写
    private static Object firstCharToUpper(String tableName) {
        String newt = tableName.toLowerCase();/*toLowerCase()全部转为小写*/
        char[] chars = newt.toCharArray();/*toCharArray()将此字符串转换为新的字符数组。*/
        chars[0] = (char) (chars[0] - ('a' - 'A'));
        return new String(chars);

    }
    public static void main(String[] args) {
        Table2Java("entity","emp");
    }

}

运行后,后台显示
在这里插入图片描述
会自动生成类
在这里插入图片描述
晚安,睡(~﹃~)~zZ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值