
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