表名称相关转换工具类

说明

在模板中通过 ${tableNameUtil.upperFirst('hello')} 方式可以直接使用。

主要的方法和功能请参看源码。

Java源码

  1. public class TableNameUtil {
  2. public HashMap<String, String> dataTypeMap;
  3. public HashMap<String, String> jspTagMap;
  4. /**
  5. * 缓存map
  6. */
  7. private Map<String, Object> cacheMap = new HashMap<>();
  8. public TableNameUtil() {
  9. dataTypeMap = new HashMap();
  10. dataTypeMap.put("VARCHAR", "String");
  11. dataTypeMap.put("VARCHAR2", "String");
  12. dataTypeMap.put("CHAR", "String");
  13. dataTypeMap.put("TEXT", "String");
  14. dataTypeMap.put("BOOLEAN", "Boolean");
  15. dataTypeMap.put("FLOAT", "Float");
  16. dataTypeMap.put("DOUBLE", "Double");
  17. dataTypeMap.put("DECIMAL", "java.math.BigDecimal");
  18. dataTypeMap.put("TINYINT", "Integer");
  19. dataTypeMap.put("SMALLINT", "Integer");
  20. dataTypeMap.put("MEDIUMINT", "Integer");
  21. dataTypeMap.put("INT", "Integer");
  22. dataTypeMap.put("INTEGER", "Integer");
  23. dataTypeMap.put("BIGINT", "Long");
  24. dataTypeMap.put("DATE", "java.util.Date");
  25. dataTypeMap.put("DATETIME", "java.util.Date");
  26. dataTypeMap.put("TIMESTAMP", "java.sql.Timestamp");
  27. jspTagMap = new HashMap<String, String>();
  28. jspTagMap.put("DATE", "DATE");
  29. jspTagMap.put("DATETIME", "DATETIME");
  30. jspTagMap.put("TIMESTAMP", "DATETIME");
  31. }
  32. /**
  33. * 首字符大写,为空返回空
  34. * 示例: userName-&gt;UserName 常用于获取类名
  35. *
  36. * @param str 要转换的字符串
  37. * @return 首字符大写
  38. */
  39. public String upperFirst(String str) {
  40. if (str == null) {
  41. return "";
  42. }
  43. str = str.trim();
  44. if (str.length() == 0) {
  45. return "";
  46. }
  47. return str.substring(0, 1).toUpperCase() + str.substring(1);
  48. }
  49. /**
  50. * 首字符小写,为空返回空
  51. * 示例: UserName -&gt; userName 常用于类名转实例名
  52. *
  53. * @param str 要转换的字符串
  54. * @return 首字符小写
  55. */
  56. public static String lowerCaseFirst(String str) {
  57. if (str == null) {
  58. return "";
  59. }
  60. str = str.trim();
  61. if (str.length() == 0) {
  62. return "";
  63. }
  64. return str.substring(0, 1).toLowerCase() + str.substring(1);
  65. }
  66. /**
  67. * 数据库字段名称转换为属性名称 MY_OLD-&gt; myOld
  68. *
  69. * @param dbNames 数据库字段名称
  70. * @return 属性名称
  71. */
  72. public String convertToBeanNames(String dbNames) {
  73. String[] sr = dbNames.split("[_]");
  74. StringBuilder builder = new StringBuilder();
  75. System.out.println(dbNames);
  76. for (int i = 0; i < sr.length; i++) {
  77. String str2 = sr[i];
  78. if (i != 0) {
  79. String c = str2.charAt(0) + "";
  80. builder.append(c.toUpperCase() + str2.substring(str2.length() > 1 ? 1 : 0).toLowerCase());
  81. } else
  82. builder.append(str2.toLowerCase());
  83. }
  84. return builder.toString();
  85. }
  86. /**
  87. * 转换为数据库字段名称 myOld --&gt; MY_OLD
  88. *
  89. * @param dbNames 属性名称
  90. * @return 数据库字段名称
  91. */
  92. public String convertToDbNames(String dbNames) {
  93. StringBuilder builder = new StringBuilder();
  94. List<String> list = splitByUppercase(dbNames);
  95. for (String string : list) {
  96. builder.append(string.toUpperCase()).append("_");
  97. }
  98. builder.deleteCharAt(builder.length() - 1);
  99. return builder.toString();
  100. }
  101. /**
  102. * 将字符串按大写字母拆分为List元素
  103. * 如: userName -&gt; [user, name]
  104. *
  105. * @param src
  106. * @return
  107. */
  108. public List<String> splitByUppercase(String src) {
  109. LinkedList<String> list = new LinkedList<String>();
  110. if (src == null || src.length() == 0) {
  111. return list;
  112. }
  113. int lastInd = 0;
  114. for (int i = 1; i < src.length(); i++) {
  115. char c = src.charAt(i);
  116. if (Character.isUpperCase(c)) {
  117. list.add(src.substring(lastInd, i));
  118. lastInd = i;
  119. }
  120. }
  121. if (lastInd != src.length()) {
  122. list.add(src.substring(lastInd, src.length()));
  123. }
  124. return list;
  125. }
  126. /**
  127. * 根据数据库类型获取java数据类型
  128. * <p>
  129. * 如 VARCHAR -&gt; String
  130. *
  131. * @param dbType 数据库数据类型
  132. * @return 数据类型
  133. */
  134. public String getDataType(String dbType) {
  135. if (dbType == null) {
  136. dbType = "";
  137. }
  138. String dataType = dataTypeMap.get(dbType.toUpperCase());
  139. if (dataType == null) {
  140. dataType = "String";
  141. }
  142. return dataType;
  143. }
  144. /**
  145. * 根java数据类型获取数据库类型
  146. * <p>
  147. * 如 String -&gt; VARCHAR
  148. *
  149. * @param dataType 数据类型
  150. * @return 数据库类型
  151. */
  152. public String transToColumnType(String dataType) {
  153. if (dataType == null) {
  154. dataType = "String";
  155. }
  156. String cacheKey = "dataType_to_column_" + dataType;
  157. String dataType2ColumnType = (String) cacheMap.get(cacheKey);
  158. if (dataType2ColumnType != null) {
  159. return dataType2ColumnType;
  160. }
  161. if (dataTypeMap == null || dataTypeMap.isEmpty()) {
  162. return "VARCHAR";
  163. }
  164. String columnType = "VARCHAR";
  165. for (Map.Entry<String, String> entry : dataTypeMap.entrySet()) {
  166. String dataTypeName = entry.getValue();
  167. if (dataTypeName.contains(".") && !dataType.contains(".")) {
  168. dataTypeName = StringUtils.substring(dataTypeName, dataTypeName.lastIndexOf(".") + 1);
  169. }
  170. if (Objects.equals(dataTypeName, dataType)) {
  171. columnType = entry.getKey();
  172. break;
  173. }
  174. }
  175. cacheMap.put(cacheKey, columnType);
  176. return columnType;
  177. }
  178. /**
  179. * 根据数据库类型获取java数据类型 z全包名, 如java.lang.Integer
  180. *
  181. * @param dbType 数据库数据类型
  182. * @return 数据类型
  183. */
  184. public String getFullDataType(String dbType) {
  185. String dataType = this.getDataType(dbType);
  186. if (dataType.length() > 0 && dataType.indexOf(".") < 0) {
  187. dataType = "java.lang." + dataType;
  188. }
  189. return dataType;
  190. }
  191. /**
  192. * 根据数据库类型获取Tag
  193. *
  194. * @param dbType 数据库数据类型
  195. * @return 数据类型
  196. */
  197. public String getJspTag(String dbType) {
  198. if (dbType == null) {
  199. dbType = "";
  200. }
  201. String jspTag = jspTagMap.get(dbType.toUpperCase());
  202. if (jspTag == null)
  203. jspTag = "TEXT";
  204. return jspTag;
  205. }
  206. /**
  207. * 获取排序字段
  208. *
  209. * @param tableModel
  210. * @return
  211. */
  212. public String getOrderString(TableModelVo tableModel) {
  213. StringBuilder orderStr = new StringBuilder();
  214. if (tableModel == null)
  215. return "";
  216. List<OrderColumnVo> orderColumns = tableModel.getOrderColumns();
  217. if (orderColumns != null && !orderColumns.isEmpty()) {
  218. orderStr.append(" order by ");
  219. for (OrderColumnVo orderColumn : orderColumns) {
  220. orderStr.append(orderColumn.getColumnName());
  221. if ("asc".equalsIgnoreCase(orderColumn.getOrderType())) {
  222. orderStr.append(" asc,");
  223. } else {
  224. orderStr.append(" desc,");
  225. }
  226. }
  227. orderStr.deleteCharAt(orderStr.length() - 1);
  228. }
  229. return orderStr.toString();
  230. }
  231. /**
  232. * 获取列的测试数据
  233. *
  234. * @param column
  235. * @return
  236. */
  237. public String genTestDataQuote(ColumnVo column, Map<String, DictVo> dictMap) {
  238. if (column == null) {
  239. return "null";
  240. }
  241. String dataType = this.getDataType(column.getColumnType());
  242. if ("String".equals(dataType) || "java.lang.String".equals(dataType)) {
  243. return wrapWithQuote(genTestDataWithDict(column.getColumnName(), column, dictMap));
  244. }
  245. if ("java.util.Date".equals(dataType) || "java.sql.Timestamp".equals(dataType)) {
  246. return String.valueOf(System.currentTimeMillis());
  247. }
  248. if ("Float".equals(dataType) || "Double".equals(dataType) || "Integer".equals(dataType) || "Long".equals(dataType) ||
  249. "java.math.BigDecimal".equals(dataType)) {
  250. String value = genTestDataWithDict("1", column, dictMap);
  251. return value;
  252. }
  253. return "null";
  254. }
  255. /**
  256. * 通过字典项生成数据
  257. *
  258. * @param data
  259. * @param column
  260. * @param dictMap
  261. * @return
  262. */
  263. public static String genTestDataWithDict(String data, ColumnVo column, Map<String, DictVo> dictMap) {
  264. if (dictMap == null || StringUtils.isEmpty(column.getDictName())) {
  265. return data;
  266. }
  267. DictVo dict = dictMap.get(column.getDictName());
  268. if (dict != null && CollectionUtils.isNotEmpty(dict.getOptionList())) {
  269. data = dict.getOptionList().get(0).getValue();
  270. }
  271. return data;
  272. }
  273. public static String wrapWithQuote(String value) {
  274. if (value == null) {
  275. return "null";
  276. }
  277. return "\"" + value + "\"";
  278. }
  279. }

数据类型映射XML

特别说明: dataTypeMap 目前代码只是赋予了默认值,如果需要添加改变映射信息,可以在工具安装目录下:config/molicode/db2javaTypeMap.xml 文件中修改映射信息。
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!--
  3. 数据库类型映射java类型映射配置,如果在本文件中没有匹配上,则默认使用String映射
  4. -->
  5. <db2javaTypeMap>
  6. <keyValue key="VARCHAR" name="字符">String</keyValue>
  7. <keyValue key="VARCHAR2" name="字符">String</keyValue>
  8. <keyValue key="CHAR" name="字符">String</keyValue>
  9. <keyValue key="TEXT" name="字符">String</keyValue>
  10. <keyValue key="BOOLEAN" name="布尔值">Boolean</keyValue>
  11. <keyValue key="FLOAT" name="单精度浮点">Float</keyValue>
  12. <keyValue key="DOUBLE" name="双精度浮点">Double</keyValue>
  13. <keyValue key="DECIMAL" name="定点精度">java.math.BigDecimal</keyValue>
  14. <keyValue key="TINYINT" name="1byte的int">Integer</keyValue>
  15. <keyValue key="TINYINT UNSIGNED" name="1byte的int">Integer</keyValue>
  16. <keyValue key="SMALLINT" name="2byte的int">Integer</keyValue>
  17. <keyValue key="SMALLINT UNSIGNED" name="2byte的int">Integer</keyValue>
  18. <keyValue key="INT" name="4byte的int">Integer</keyValue>
  19. <keyValue key="INT UNSIGNED" name="4byte的int">Integer</keyValue>
  20. <keyValue key="INTEGER" name="4byte的int">Integer</keyValue>
  21. <keyValue key="BIGINT" name="8byte的int">Long</keyValue>
  22. <keyValue key="BIGINT UNSIGNED" name="8byte的int">Long</keyValue>
  23. <keyValue key="DATE" name="日期">java.util.Date</keyValue>
  24. <keyValue key="DATETIME" name="日期+时间">java.util.Date</keyValue>
  25. <keyValue key="TIMESTAMP" name="时间戳">java.sql.Timestamp</keyValue>
  26. </db2javaTypeMap>