表名称相关转换工具类
说明
在模板中通过 ${tableNameUtil.upperFirst('hello')} 方式可以直接使用。
主要的方法和功能请参看源码。
Java源码
public class TableNameUtil {
public HashMap<String, String> dataTypeMap;
public HashMap<String, String> jspTagMap;
/**
* 缓存map
*/
private Map<String, Object> cacheMap = new HashMap<>();
public TableNameUtil() {
dataTypeMap = new HashMap();
dataTypeMap.put("VARCHAR", "String");
dataTypeMap.put("VARCHAR2", "String");
dataTypeMap.put("CHAR", "String");
dataTypeMap.put("TEXT", "String");
dataTypeMap.put("BOOLEAN", "Boolean");
dataTypeMap.put("FLOAT", "Float");
dataTypeMap.put("DOUBLE", "Double");
dataTypeMap.put("DECIMAL", "java.math.BigDecimal");
dataTypeMap.put("TINYINT", "Integer");
dataTypeMap.put("SMALLINT", "Integer");
dataTypeMap.put("MEDIUMINT", "Integer");
dataTypeMap.put("INT", "Integer");
dataTypeMap.put("INTEGER", "Integer");
dataTypeMap.put("BIGINT", "Long");
dataTypeMap.put("DATE", "java.util.Date");
dataTypeMap.put("DATETIME", "java.util.Date");
dataTypeMap.put("TIMESTAMP", "java.sql.Timestamp");
jspTagMap = new HashMap<String, String>();
jspTagMap.put("DATE", "DATE");
jspTagMap.put("DATETIME", "DATETIME");
jspTagMap.put("TIMESTAMP", "DATETIME");
}
/**
* 首字符大写,为空返回空
* 示例: userName->UserName 常用于获取类名
*
* @param str 要转换的字符串
* @return 首字符大写
*/
public String upperFirst(String str) {
if (str == null) {
return "";
}
str = str.trim();
if (str.length() == 0) {
return "";
}
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
/**
* 首字符小写,为空返回空
* 示例: UserName -> userName 常用于类名转实例名
*
* @param str 要转换的字符串
* @return 首字符小写
*/
public static String lowerCaseFirst(String str) {
if (str == null) {
return "";
}
str = str.trim();
if (str.length() == 0) {
return "";
}
return str.substring(0, 1).toLowerCase() + str.substring(1);
}
/**
* 数据库字段名称转换为属性名称 MY_OLD-> myOld
*
* @param dbNames 数据库字段名称
* @return 属性名称
*/
public String convertToBeanNames(String dbNames) {
String[] sr = dbNames.split("[_]");
StringBuilder builder = new StringBuilder();
System.out.println(dbNames);
for (int i = 0; i < sr.length; i++) {
String str2 = sr[i];
if (i != 0) {
String c = str2.charAt(0) + "";
builder.append(c.toUpperCase() + str2.substring(str2.length() > 1 ? 1 : 0).toLowerCase());
} else
builder.append(str2.toLowerCase());
}
return builder.toString();
}
/**
* 转换为数据库字段名称 myOld --> MY_OLD
*
* @param dbNames 属性名称
* @return 数据库字段名称
*/
public String convertToDbNames(String dbNames) {
StringBuilder builder = new StringBuilder();
List<String> list = splitByUppercase(dbNames);
for (String string : list) {
builder.append(string.toUpperCase()).append("_");
}
builder.deleteCharAt(builder.length() - 1);
return builder.toString();
}
/**
* 将字符串按大写字母拆分为List元素
* 如: userName -> [user, name]
*
* @param src
* @return
*/
public List<String> splitByUppercase(String src) {
LinkedList<String> list = new LinkedList<String>();
if (src == null || src.length() == 0) {
return list;
}
int lastInd = 0;
for (int i = 1; i < src.length(); i++) {
char c = src.charAt(i);
if (Character.isUpperCase(c)) {
list.add(src.substring(lastInd, i));
lastInd = i;
}
}
if (lastInd != src.length()) {
list.add(src.substring(lastInd, src.length()));
}
return list;
}
/**
* 根据数据库类型获取java数据类型
* <p>
* 如 VARCHAR -> String
*
* @param dbType 数据库数据类型
* @return 数据类型
*/
public String getDataType(String dbType) {
if (dbType == null) {
dbType = "";
}
String dataType = dataTypeMap.get(dbType.toUpperCase());
if (dataType == null) {
dataType = "String";
}
return dataType;
}
/**
* 根java数据类型获取数据库类型
* <p>
* 如 String -> VARCHAR
*
* @param dataType 数据类型
* @return 数据库类型
*/
public String transToColumnType(String dataType) {
if (dataType == null) {
dataType = "String";
}
String cacheKey = "dataType_to_column_" + dataType;
String dataType2ColumnType = (String) cacheMap.get(cacheKey);
if (dataType2ColumnType != null) {
return dataType2ColumnType;
}
if (dataTypeMap == null || dataTypeMap.isEmpty()) {
return "VARCHAR";
}
String columnType = "VARCHAR";
for (Map.Entry<String, String> entry : dataTypeMap.entrySet()) {
String dataTypeName = entry.getValue();
if (dataTypeName.contains(".") && !dataType.contains(".")) {
dataTypeName = StringUtils.substring(dataTypeName, dataTypeName.lastIndexOf(".") + 1);
}
if (Objects.equals(dataTypeName, dataType)) {
columnType = entry.getKey();
break;
}
}
cacheMap.put(cacheKey, columnType);
return columnType;
}
/**
* 根据数据库类型获取java数据类型 z全包名, 如java.lang.Integer
*
* @param dbType 数据库数据类型
* @return 数据类型
*/
public String getFullDataType(String dbType) {
String dataType = this.getDataType(dbType);
if (dataType.length() > 0 && dataType.indexOf(".") < 0) {
dataType = "java.lang." + dataType;
}
return dataType;
}
/**
* 根据数据库类型获取Tag
*
* @param dbType 数据库数据类型
* @return 数据类型
*/
public String getJspTag(String dbType) {
if (dbType == null) {
dbType = "";
}
String jspTag = jspTagMap.get(dbType.toUpperCase());
if (jspTag == null)
jspTag = "TEXT";
return jspTag;
}
/**
* 获取排序字段
*
* @param tableModel
* @return
*/
public String getOrderString(TableModelVo tableModel) {
StringBuilder orderStr = new StringBuilder();
if (tableModel == null)
return "";
List<OrderColumnVo> orderColumns = tableModel.getOrderColumns();
if (orderColumns != null && !orderColumns.isEmpty()) {
orderStr.append(" order by ");
for (OrderColumnVo orderColumn : orderColumns) {
orderStr.append(orderColumn.getColumnName());
if ("asc".equalsIgnoreCase(orderColumn.getOrderType())) {
orderStr.append(" asc,");
} else {
orderStr.append(" desc,");
}
}
orderStr.deleteCharAt(orderStr.length() - 1);
}
return orderStr.toString();
}
/**
* 获取列的测试数据
*
* @param column
* @return
*/
public String genTestDataQuote(ColumnVo column, Map<String, DictVo> dictMap) {
if (column == null) {
return "null";
}
String dataType = this.getDataType(column.getColumnType());
if ("String".equals(dataType) || "java.lang.String".equals(dataType)) {
return wrapWithQuote(genTestDataWithDict(column.getColumnName(), column, dictMap));
}
if ("java.util.Date".equals(dataType) || "java.sql.Timestamp".equals(dataType)) {
return String.valueOf(System.currentTimeMillis());
}
if ("Float".equals(dataType) || "Double".equals(dataType) || "Integer".equals(dataType) || "Long".equals(dataType) ||
"java.math.BigDecimal".equals(dataType)) {
String value = genTestDataWithDict("1", column, dictMap);
return value;
}
return "null";
}
/**
* 通过字典项生成数据
*
* @param data
* @param column
* @param dictMap
* @return
*/
public static String genTestDataWithDict(String data, ColumnVo column, Map<String, DictVo> dictMap) {
if (dictMap == null || StringUtils.isEmpty(column.getDictName())) {
return data;
}
DictVo dict = dictMap.get(column.getDictName());
if (dict != null && CollectionUtils.isNotEmpty(dict.getOptionList())) {
data = dict.getOptionList().get(0).getValue();
}
return data;
}
public static String wrapWithQuote(String value) {
if (value == null) {
return "null";
}
return "\"" + value + "\"";
}
}
数据类型映射XML
特别说明: dataTypeMap 目前代码只是赋予了默认值,如果需要添加改变映射信息,可以在工具安装目录下:config/molicode/db2javaTypeMap.xml 文件中修改映射信息。
<?xml version="1.0" encoding="UTF-8" ?>
<!--
数据库类型映射java类型映射配置,如果在本文件中没有匹配上,则默认使用String映射
-->
<db2javaTypeMap>
<keyValue key="VARCHAR" name="字符">String</keyValue>
<keyValue key="VARCHAR2" name="字符">String</keyValue>
<keyValue key="CHAR" name="字符">String</keyValue>
<keyValue key="TEXT" name="字符">String</keyValue>
<keyValue key="BOOLEAN" name="布尔值">Boolean</keyValue>
<keyValue key="FLOAT" name="单精度浮点">Float</keyValue>
<keyValue key="DOUBLE" name="双精度浮点">Double</keyValue>
<keyValue key="DECIMAL" name="定点精度">java.math.BigDecimal</keyValue>
<keyValue key="TINYINT" name="1byte的int">Integer</keyValue>
<keyValue key="TINYINT UNSIGNED" name="1byte的int">Integer</keyValue>
<keyValue key="SMALLINT" name="2byte的int">Integer</keyValue>
<keyValue key="SMALLINT UNSIGNED" name="2byte的int">Integer</keyValue>
<keyValue key="INT" name="4byte的int">Integer</keyValue>
<keyValue key="INT UNSIGNED" name="4byte的int">Integer</keyValue>
<keyValue key="INTEGER" name="4byte的int">Integer</keyValue>
<keyValue key="BIGINT" name="8byte的int">Long</keyValue>
<keyValue key="BIGINT UNSIGNED" name="8byte的int">Long</keyValue>
<keyValue key="DATE" name="日期">java.util.Date</keyValue>
<keyValue key="DATETIME" name="日期+时间">java.util.Date</keyValue>
<keyValue key="TIMESTAMP" name="时间戳">java.sql.Timestamp</keyValue>
</db2javaTypeMap>