All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.webapp.utils.builder.MybatisBuilder Maven / Gradle / Ivy

The newest version!
package com.webapp.utils.builder;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.List;
import java.util.Properties;
import java.util.TreeMap;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.webapp.utils.string.Utils;

import cn.org.rapid_framework.generator.GeneratorControl;
import cn.org.rapid_framework.generator.GeneratorFacade;
import cn.org.rapid_framework.generator.GeneratorProperties;

public final class MybatisBuilder {

	private static final Logger logger = LoggerFactory.getLogger(MybatisBuilder.class);

	private static final String PASSWORD = "password";
	private static final String USERNAME = "username";
	private static final String DRIVER = "driver";
	private static final String URL = "url";

	public enum TemplatType {
		simple("classpath:/template/simple"),
		view("classpath:/template/view");
		TemplatType(String template){
			this.template = template;
		}
		private String template;
		public String getTemplate() {
			return template;
		}
	}

	public static void viewProp(String jdbcCfg) {
		if(!setCfg(jdbcCfg)) return;
		Properties props = GeneratorProperties.getProperties();

		TreeMap map = new TreeMap<>();
		props.forEach((key, val) -> {map.put(key.toString(), val.toString());});

		map.forEach((key, val) -> {
			logger.info("{} --> {}", key, val);
		});
	}

	public static void buildByTable(String jdbcCfg, String basePkg, List tables) {
		buildByTable(jdbcCfg, basePkg, false, tables);
    }

	public static void buildByTable(String jdbcCfg, String basePkg, boolean suffix, List tables) {
		GeneratorFacade gf = build(jdbcCfg, basePkg, suffix);
		tables.forEach(x->Utils.toSnake(x));
		try {
			gf.deleteOutRootDir();
			gf.generateByTable(tables.toArray(new String[]{}));
		} catch (Exception e) {
			logger.error(" error buildByTable ", e);
		}
	}

	public static void buildAll(String jdbcCfg, String basePkg) {
		buildAll(jdbcCfg, basePkg, false);
    }

	public static void buildAll(String jdbcCfg, String basePkg, boolean suffix) {
		GeneratorFacade gf = build(jdbcCfg, basePkg, suffix);
		try {
			gf.deleteOutRootDir();
			gf.generateByAllTable();
        } catch (Exception e) {
	        logger.error(" error buildAll ", e);
        }
    }

	private static GeneratorFacade build(String jdbcCfg, String basePkg, boolean suffix) {
		if(!setCfg(jdbcCfg)) return null;

		tableName();

		GeneratorProperties.setProperty("basepkg", basePkg);
		if(basePkg != null) {
			GeneratorProperties.setProperty("basepkg_dao", suffix ? basePkg + ".dao" : basePkg.replace("model", "dao"));
			GeneratorProperties.setProperty("basepkg_model", suffix ? basePkg + ".model" : basePkg.replace("dao", "model"));
		}
		GeneratorControl gc = new GeneratorControl();
		gc.setOverride(true);

		GeneratorFacade gf = new GeneratorFacade();
		gf.getGenerator().addTemplateRootDir(TemplatType.simple.getTemplate());
		return gf;
	}

	private static boolean setCfg(String jdbcCfg){
		GeneratorProperties.setProperty("outRoot", System.getProperty("user.dir") + "/codes/");

		Properties jdbc = new Properties();
		try {
			if(jdbcCfg.equals("")){
				logger.error("please call setJdbcCfg()");
				return false;
			}
	        jdbc.load(MybatisBuilder.class.getResourceAsStream("/" + jdbcCfg));
        } catch (Exception e) {
        	logger.error("classpath not exist " + jdbcCfg);
        	return false;
        }

		setJdbc(jdbc, URL);
		setJdbc(jdbc, DRIVER);
		setJdbc(jdbc, USERNAME);
		setJdbc(jdbc, PASSWORD);
		return true;
	}

	private static void setJdbc(Properties jdbc, String key) {
		String jdbc_key = "jdbc_" + key;
		String jdbc_keys = "jdbc." + key;

		if(jdbc.containsKey(jdbc_key)){
			GeneratorProperties.setProperty(jdbc_key, jdbc.getProperty(jdbc_key));
		}else if (jdbc.containsKey(key)) {
			GeneratorProperties.setProperty(jdbc_key, jdbc.getProperty(key));
		}else if (jdbc.containsKey(jdbc_keys)) {
			GeneratorProperties.setProperty(jdbc_key, jdbc.getProperty(jdbc_keys));
		}else {
			logger.error("Must contain {} or {} configuration", jdbc_key, key);
		}
	}

	private static void tableName() {
		tableName(null);
    }

	private static void tableName(List tables) {
    	try {
    		String jdbc_driver = GeneratorProperties.getProperty("jdbc_driver");
        	String jdbc_user = GeneratorProperties.getProperty("jdbc_username");
        	String jdbc_pwd = GeneratorProperties.getProperty("jdbc_password");
        	String jdbc_url = GeneratorProperties.getProperty("jdbc_url");
        	Class.forName(jdbc_driver);
        	Connection conn = DriverManager.getConnection(jdbc_url, jdbc_user, jdbc_pwd);
            ResultSet resultSet = conn.getMetaData().getTables(null, "%", "%", new String[] { "TABLE" });

            StringBuffer buf = new StringBuffer();
            while (resultSet.next()) {
            	String tableName = resultSet.getString("TABLE_NAME");
            	if(tables != null && !tables.contains(tableName)){
            		continue;
            	}
                String sql = "select table_comment from information_schema.TABLES where TABLE_SCHEMA='%1s' and table_name = '%2s'";
                sql = String.format(sql, resultSet.getString("TABLE_CAT"), tableName);
                ResultSet set = conn.prepareStatement(sql).executeQuery();
                if(set.next()){
                	String comment = set.getString("table_comment");
                	buf.append(tableName + "->" + comment + "<-");
//                	GeneratorProperties.setProperty("remarks_"+ tableName, comment);
                }
            }

            String result = buf.toString();
            if(!result.equals("")){
            	result = StringUtils.removeEnd(result, "<-");
            }
            GeneratorProperties.setProperty("remarks", result);
    	}catch (Exception e){
    		e.printStackTrace();
    	}
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy