jdbc逆向生成javabean

  • 使用的jfinal的enjoy模版
package cn.javadog.ec.utils;

import com.jfinal.kit.Kv;
import com.jfinal.kit.PropKit;
import com.jfinal.template.Engine;
import com.jfinal.template.Template;
import com.jfinal.template.source.ClassPathSourceFactory;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author: yuyong
 * @date: 2018-11-26 1:47 PM
 * desc:
 */
public class Generator {

    static {
        PropKit.use("config/config.txt");
    }

    //数据库连接
    private static final String URL = PropKit.get("jdbcUrl");
    private static final String NAME = PropKit.get("user");
    private static final String PASS = PropKit.get("password");
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String PKG = "cn.javadog.ec.entity";

    public static void main(String[] args) throws IOException {
        String table = "item";
        String alias = "Item";
        List<Map<String, String>> schema = schema(table);
        String modelStr = render(alias,schema);
        generate(modelStr, alias);
        System.out.println("实体类生成成功");
    }

    /**
     * 生成实体类
     */
    public static void generate(String modelStr, String table) throws IOException {
        String outputPath = new File("").getAbsolutePath() +
                "/src/main/java/" + PKG.replace(".", "/") + "/" + initcap(table) + ".java";
        FileWriter fw = new FileWriter(outputPath);
        PrintWriter pw = new PrintWriter(fw);
        pw.println(modelStr);
        pw.flush();
        pw.close();
    }

    /**
     * 渲染
     */
    public static String render(String table, List<Map<String, String>> schema) {
        //获取模版
        Engine engine = Engine.create("myEngine");
        engine.setDevMode(true);
        engine.setSourceFactory(new ClassPathSourceFactory());
        Template template = engine.getTemplate("model/model.java");
        //渲染
        String modelStr = template.renderToString(Kv.by("schema", schema).set("name",table));
        return modelStr;
    }

    /**
     * 获取schema
     */
    public static List<Map<String,String>> schema(String table) {
        List<Map<String,String>> result = new ArrayList();
        try {
            Connection conn = DriverManager.getConnection(URL, NAME, PASS);
            Class.forName(DRIVER);
            try {
                DatabaseMetaData metaData = conn.getMetaData();
                ResultSet resultSet = metaData.getTables(null, "%", table, new String[] { "TABLE" });
                while (resultSet.next()) {
                    String tableName=resultSet.getString("TABLE_NAME");

                    if(tableName.equals(table)){
                        ResultSet rs = metaData.getColumns(null, null,tableName.toUpperCase(), "%");

                        while(rs.next()){
                            //System.out.println("字段名:"+rs.getString("COLUMN_NAME")+"--字段注释:"+rs.getString("REMARKS")+"--字段数据类型:"+rs.getString("TYPE_NAME"));
                            Map map = new HashMap();
                            String colName = rs.getString("COLUMN_NAME");
                            map.put("colName", colName);

                            String remarks = rs.getString("REMARKS");
                            if(remarks == null || remarks.equals("")){
                                remarks = colName;
                            }
                            map.put("remark",remarks);

                            String dbType = rs.getString("TYPE_NAME");
                            map.put("dbType",dbType);

                            map.put("valueType", changeDbType(dbType));
                            result.add(map);
                        }
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 转换数据库字段类型为java类型
     */
    private static String changeDbType(String dbType) {
        dbType = dbType.toUpperCase();
        switch(dbType){
            case "VARCHAR":
            case "CHAR":
                return "String";
            case "NUMBER":
            case "DECIMAL":
                return "BigDecimal";
            case "INT":
            case "SMALLINT":
            case "INTEGER":
                return "Integer";
            case "BIGINT":
                return "Long";
            case "DATETIME":
            case "TIMESTAMP":
            case "DATE":
                return "Date";
            case "TINYINT":
                return "Boolean";
            default:
                return "String";
        }
    }

    /**
     * 首字母大写,下划线转驼峰
     */
    private static String initcap(String table) {
        StringBuffer sb = new StringBuffer();
        String[] split = table.split("_");
        for (String s : split) {
            char[] ch = s.toCharArray();
            if (ch[0] >= 'a' && ch[0] <= 'z') {
                ch[0] = (char) (ch[0] - 32);
            }
            sb.append(ch);
        }
        return sb.toString();
    }

}

package cn.javadog.ec.entity;

import io.github.biezhi.anima.Model;
import io.github.biezhi.anima.annotation.Table;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;

@Data
@Accessors(chain = true)
@Table(name = "#(name)")
public class #(name) extends Model {

#for (field : schema)
	/**
	 * #(field.remark)
	 */
	private #(field.valueType) #(field.colName);
			
#end
}
public class GeneratorSqlmap { public void generator() throws Exception{ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; //指定 逆向工程配置文件 File configFile = new File("generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); } public static void main(String[] args) throws Exception { try { GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap(); generatorSqlmap.generator(); } catch (Exception e) { e.printStackTrace(); } } } <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetProject:生成PO类的位置 --> <javaModelGenerator targetPackage="cn.itcast.ssm.po" targetProject=".\\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="cn.itcast.ssm.mapper" targetProject=".\\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="cn.itcast.ssm.mapper" targetProject=".\\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定数据库表 --> <table schema="" tableName="user"></table> <table schema="" tableName="orders"></table> <table schema="" tableName="items"></table> <table schema="" tableName="orderdetail"></table>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值