import org.apache.commons.lang.StringUtils;
import com.ijwt.exception.JavaTypeException;
import com.ijwt.exception.MybatisTypeException;
/**
* @author InJavaWeTrust
*/
public enum UtilString {
INSTANCE;
/**
* 首字母大写
* @param str
* @return
*/
public String capitalize(String str) {
return StringUtils.capitalize(str);
}
/**
* 将列名转换成java类属性名称</br>
* 如果表中列名有下划线,则去掉下划线,且下划线后首字母大写其他字母小写(驼峰式声明变量)
* @param columnName 表中列名
* @return java类属性名
*/
public String columnNameToJavaName(String columnName) {
if (columnName == null) {
return null;
}
StringBuilder fieldName = new StringBuilder();
boolean toUpper = false;
for (int i = 0; i < columnName.length(); i++) {
char ch = columnName.charAt(i);
if (ch == '_') {
toUpper = true;
} else if (toUpper) {
fieldName.append(Character.toUpperCase(ch));
toUpper = false;
} else {
fieldName.append(Character.toLowerCase(ch));
}
}
return fieldName.toString();
}
/**
* 将数据库表中列类型转换成java变量类型
* @param columnType 数据库类型
* @return java类型
* @throws JavaTypeException
*/
public String columnTypeToJavaType(String columnType) throws JavaTypeException {
String javaType = "";
switch (columnType) {
case "BIT": javaType = "Boolean"; break;
case "BIGINT": javaType = "java.math.BigInteger"; break;
case "BLOB": javaType = "byte[]"; break;
case "CHAR": javaType = "String"; break;
case "DATE": javaType = "java.util.Date"; break;
case "DATETIME": javaType = "java.util.Date"; break;
case "DECIMAL": javaType = "java.math.BigDecimal"; break;
case "DOUBLE": javaType = "Double"; break;
case "FLOAT": javaType = "Float"; break;
case "INT": javaType = "Integer"; break;
case "INT UNSIGNED": javaType = "Integer"; break;
case "LONGBLOB": javaType = "byte[]"; break;
case "LONGTEXT": javaType = "byte[]"; break;
case "MEDIUMBLOB": javaType = "byte[]"; break;
case "MEDIUMTEXT": javaType = "byte[]"; break;
case "MEDIUMINT": javaType = "Integer"; break;
case "SMALLINT": javaType = "Integer"; break;
case "TEXT": javaType = "String"; break;
case "TINYBLOB": javaType = "byte[]"; break;
case "TINYTEXT": javaType = "byte[]"; break;
case "TIME": javaType = "java.util.Date"; break;
case "TIMESTAMP": javaType = "java.util.Date"; break;
case "TINYINT": javaType = "Integer"; break;
case "VARBINARY": javaType = "byte[]"; break;
case "VARCHAR": javaType = "String"; break;
case "YEAR": javaType = "String"; break;
default: javaType = null;
}
if (javaType == null) {
throw new JavaTypeException("java类型转换异常,未知的数据库字段类型 [" + columnType + "]");
}
return javaType;
}
/**
* 将MySQL数据库类型转换成MyBatis配置文件中jdbcType类型
* @param sqlTypeName 数据库类型
* @return MyBatis配置文件jdbcType类型
* @throws MybatisTypeException
*/
public String mySqlTypeToJdbcType(String mySqlType) throws MybatisTypeException {
String jdbcType = "";
switch (mySqlType) {
case "BIT": jdbcType = "BIT"; break;
case "BIGINT": jdbcType = "BIGINT"; break;
case "BLOB": jdbcType = "BLOB"; break;
case "CHAR": jdbcType = "CHAR"; break;
case "DATE": jdbcType = "TIMESTAMP"; break;
case "DATETIME": jdbcType = "TIMESTAMP"; break;
case "DECIMAL": jdbcType = "DECIMAL"; break;
case "DOUBLE": jdbcType = "DOUBLE"; break;
case "FLOAT": jdbcType = "FLOAT"; break;
case "INT": jdbcType = "INTEGER"; break;
case "INT UNSIGNED": jdbcType = "INTEGER"; break;
case "LONGBLOB": jdbcType = "BLOB"; break;
case "LONGTEXT": jdbcType = "BLOB"; break;
case "MEDIUMBLOB": jdbcType = "BLOB"; break;
case "MEDIUMTEXT": jdbcType = "BLOB"; break;
case "MEDIUMINT": jdbcType = "INTEGER"; break;
case "SMALLINT": jdbcType = "SMALLINT"; break;
case "TEXT": jdbcType = "VARCHAR"; break;
case "TINYBLOB": jdbcType = "BLOB"; break;
case "TINYTEXT": jdbcType = "BLOB"; break;
case "TIME": jdbcType = "TIMESTAMP"; break;
case "TIMESTAMP": jdbcType = "TIMESTAMP"; break;
case "TINYINT": jdbcType = "TINYINT"; break;
case "VARBINARY": jdbcType = "BLOB"; break;
case "VARCHAR": jdbcType = "VARCHAR"; break;
case "YEAR": jdbcType = "VARCHAR"; break;
default: jdbcType = null;
}
if (jdbcType == null) {
throw new MybatisTypeException("mybatis类型转换异常,未知的数据库字段类型 [" + mySqlType + "]");
}
return jdbcType;
}
}