Java工具类_表结构自动生成对应的实体类、Mapper.xml文件、Dao类

这个Java工具类能够根据指定的表结构,自动生成对应的实体类(Entity)、Mapper.xml配置文件和Dao接口。用户只需要修改test_Table()方法中的参数,设置数据库连接信息和生成文件的路径,工具将自动完成文件的创建。目前,该工具支持常见的MySQL数据类型,但仍有待完善其他数据类型的转换。生成的文件遵循特定的命名规范,并且包含了属性、getter/setter方法以及MyBatis的ResultMap和SQL操作配置。
摘要由CSDN通过智能技术生成
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 根据表生成Entity文件
 * 
 * 修改test_Table()方法中的参数值,即可执行main方法获得想要的结果
 * 
 * 生成文件后导入需要的包
 * 依赖包:mysql数据库驱动包
 * 生成其他数据库类型的表需要更换驱动类并略做数据类型转换的修改即可
 * 
 * 注意:数据库数据类型只包括了常用的几种,其他数据类型还需要在完善,请添加‘ftype’该数组变量的值
 *
 */
public class TableToEntity {

    public static void main(String args[]) {
        test_Table();
    }

    /**
     * 设置参数--需要修改
     */
    public static void test_Table() {
        String tableName = "tableName";//需要转换的表
        String host = "127.0.0.1";//数据库host
        String port = "3306";//数据库端口
        String database = "databaseName";//数据库名
        String username = "root";//数据库用户名
        String password = "root";//数据库用密码
        String path = "F:/file/";//生成文件存放目录,不包括文件名,文件名自动命名为 '表名.java,表名Mapper.xml,表名Dao.java' 首字母大写
        String dao_package = "com.test.dao.";//dao的包路径
        String entity_package = "com.test.entity.";//entity的包路径
        //生成entity文件
        getTableToEntityFile(tableName, host, port, database, username, password, entity_package,
            path);
        //生成ResultMap文件
        getTableToResultMap(tableName, host, port, database, username, password, dao_package,
            entity_package, path);
        //生成Dao文件
        getResultMapToDao(tableName, dao_package, entity_package, path);
    }

    /**
     * 根据表生成Entity文件
     */
    public static void getTableToEntityFile(String tableName, String host, String port,
                                            String database, String username, String password,
                                            String entity_package, String path) {
        String strforname = "com.mysql.jdbc.Driver";
        String strurl = "jdbc:mysql://" + host + ":" + port + "/" + database
                        + "?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull";
        //需要替换的数据类型,待完善
        String ftype[][] = new String[][] { { "tinyint unsigned", "Integer" },
                { "tinyint", "Integer" }, { "int unsigned", "Integer" }, { "int", "Integer" },
                { "smallint unsigned", "Integer" }, { "smallint", "Integer" },
                { "varchar", "String" }, { "char", "String" }, { "longtext", "String" },
                { "text", "String" }, { "decimal unsigned", "BigDecimal" },
                { "decimal", "BigDecimal" }, { "datetime", "String" }, { "date", "String" },
                { "timestamp", "String" }, { "unsigned", "" } };

        //如果包路径是以“.”结尾的要去掉
        entity_package = entity_package == null ? "" : entity_package;
        entity_package = entity_package.length() > 0 && entity_package.endsWith(".") ? entity_package
            .substring(0, entity_package.length() - 1) : entity_package;

        System.out.println("==============================");
        System.out.println("正在生成。。。");
        String sql = "SELECT * FROM " + tableName + " limit 0";
        List<Map<String, String>> list = queryFieldList(sql, strforname, strurl, username, password);

        //模板字符串
        String propertystr = "\tprivate #fieldtype# #fieldname#;\n";

        String methodget1 = "\tpublic #fieldtype# get#fieldname1#() {\n";
        String methodget2 = "\t\treturn #fieldname#;\n";
        String methodget3 = "\t}\n";

        String methodset1 = "\tpublic void set#fieldname1#(#fieldtype# #fieldname#) {\n";
        String methodset2 = "\t\tthis.#fieldname# = #fieldname#;\n";
        String methodset3 = "\t}\n";

        String classstrstart = "package "
                               + entity_package
                               + ";\n\nimport java.io.Serializable;\nimport java.math.BigDecimal;\n\npublic class #tablename# implements Serializable {\n";
        String classstrend = "}";

        String class_pro = "";//类拼接
        if (list != null && list.size() > 0) {
            for (Map<String, String> map : list) {
                for (Ob
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值