针对大家可能不知道模板开发中数据怎么取值,我在这里给大家详细的介绍一下。顺便把一些我们在写模板的时候会用到的代码片段粘贴一部分。因为目前主要用的是数据库表模型,所以也主要介绍一下tableModel的数据结构。
这个工程是空的,没有示例代码,请查看readme文档信息即可。
tableModel 包含tableDefine属性,同时存储业务字段信息,字段信息,排序等信息;
tableDefine 用于存储和数据库一致的信息;
tableDefine.columns 为数据库所有的列 list;
{
"tableDefine": {
"dbTableName": "ac_project",
"id": "AcProject",
"cnname": "项目",
"varDomainName": "acProject",
"columns": [
{
"canBeNull": false,
"cnname": "id",
"columnName": "id",
"columnType": "INT",
"comment": "id",
"dataName": "id",
"isPK": true,
"jspTag": "TEXT",
"length": 10,
"readonly": false
},
{
"canBeNull": true,
"cnname": "名称",
"columnName": "name",
"columnType": "VARCHAR",
"comment": "名称",
"dataName": "name",
"isPK": false,
"jspTag": "TEXT",
"length": 50,
"readonly": false
},
{
"canBeNull": true,
"cnname": "类型",
"columnName": "type",
"columnType": "INT",
"comment": "类型:1.本地,2.仓库",
"dataName": "type",
"dictName": "acProject_type_DICT",
"isPK": false,
"jspTag": "SELECT",
"length": 10,
"readonly": false
}
],
"pkColumn": {
"canBeNull": false,
"cnname": "id",
"columnName": "id",
"columnType": "INT",
"comment": "id",
"dataName": "id",
"isPK": true,
"jspTag": "TEXT",
"length": 10,
"readonly": false
}
},
"bizFieldsMap": {
"allColumn": "id,name,type,created,modified",
"addList": "id,name,type",
"updateList": "id,name,type,created,modified",
"queryList": "id,name,type,created,modified",
"viewList": "id,name,type,created,modified",
"searchKey": "id,name,type",
"createTime": "created",
"updateTime": "modified"
},
"dictMap": {
"acProject_type_DICT": {
"id": "acProject_type_DICT",
"name": "type字段的字典项",
"optionList": [
{
"name": "本地",
"value": "1"
},
{
"name": "仓库",
"value": "2"
}
]
}
}
}
tableModel(表模型)
|
|___tableDefine(表信息)
| |
| |____id(类名), cnname(中文名称), varDomainName(变量名称), dbTableName(表名)
| |
| |____columns 列列表信息;
| |
| |__columnName(数据库列名),dataName(字段名称), columnType(数据库字段类型)
| |__length(长度),comment(备注), isPK(是否主键), jspTag(展示类型)
| |__canBeNull(是否可为空),dictName(字典项名称),readonly(是否只读)
|
|___ bizFieldMap(业务字段map)
| |
| |__allColumn(全部列名称列表,逗号分隔)
| |__addList(新增列名称列表,逗号分隔)
| |__updateList (修改列名称列表,逗号分隔)
| |__queryList (查询列名称列表,逗号分隔)
| |__viewList (查看列名称列表,逗号分隔)
| |__createTime (创建时间列名称)
| |__updateTime (修改时间列名称)
|
|__dictMap(字典项map,略)
Key: PubUtils, 指向: com.shareyi.molicode.common.utils.PubUtils
方法列表及说明
/**
* 获取随机的Long
*
* @return 随机Long
*/
public static Long getRandomLong();
/**
* 生成UUID
*
* @return 无-的,且大写32位的UUID
*/
public static String getUUID();
/**
* 获取当前年月日
*
* @return yyyy-MM-dd
*/
public static String getDate();
/**
* 获取年月日和时间
*
* @return yyyy-MM-dd HH:mm:ss
*/
public static String getDateTime();
/**
* 获取当前的时间戳
*
* @return 时间戳
*/
public static long getTime();
/**
* List转换为String,用逗号间隔
* 如: col1,col2,col3
*
* @param list 字符串list
* @return 逗号分隔的字符串
*/
public static String listToStr(List<String> list);
/**
* String转换为List,用逗号间隔
* 将 col1,col2,col3 以逗号分隔为list的元素
*
* @param str 原始字符串
* @return 拆分后的List
*/
public static List<String> stringToList(String str);
/**
* 包名转路径
* 如:com.jd.xxx 转换为: com/jd/xxx
*
* @param str 包名
* @return 路径地址
*/
public static String packageToPath(String str);
/**
* 路径转换为包名
* 如: com/jd/xxx 转换为:com.jd.xxx
*
* @param str 路径地址
* @return 包名路径
*/
public static String pathToPackage(String str) ;
/**
* 如果字符串不为空,将字符串拼接到分隔符后面
* 否则返回空串
* 如:("path","/") --> /path
*
* @param str 原始串
* @param sep 分隔符
* @return 转换后的字符串
*/
public static String addStrBeforeSeparator(String str, String sep);
/**
* 如果字符串不为空,将字符串拼接到分隔符后面
* 否则返回空串
* 如:("path","/") --> /path
*
* @param str 原始串
* @param sep 分隔符
* @return 转换后的字符串
*/
public static String addStrAfterSeparator(String str, String sep);
/**
* 将列名,按id,name,total_money格式拼接在一起,主要用户SQL拼接
*
* @param columns 列List
* @return 类似 id,name,total_money
*/
public static String joinColumnNames(List<ColumnVo> columns);
Key: tableNameUtil, 指向: com.shareyi.molicode.common.utils.TableNameUtil
方法列表及说明
/**
* 首字符大写,为空返回空
* 示例: userName->UserName 常用于获取类名
*
* @param str 要转换的字符串
* @return 首字符大写
*/
public String upperFirst(String str);
/**
* 首字符小写,为空返回空
* 示例: UserName -> userName 常用于类名转实例名
*
* @param str 要转换的字符串
* @return 首字符小写
*/
public static String lowerCaseFirst(String str);
/**
* 数据库字段名称转换为属性名称 MY_OLD-> myOld
*
* @param dbNames 数据库字段名称
* @return 属性名称
*/
public String convertToBeanNames(String dbNames);
/**
* 转换为数据库字段名称 myOld --> MY_OLD
*
* @param dbNames 属性名称
* @return 数据库字段名称
*/
public String convertToDbNames(String dbNames);
/**
* 将字符串按大写字母拆分为List元素
* 如: userName -> [user, name]
*
* @param src
* @return
*/
public List<String> splitByUppercase(String src) ;
/**
* 根据数据库类型获取java数据类型
* <p>
* 如 VARCHAR -> String
*
* @param dbType 数据库数据类型
* @return 数据类型
*/
public String getDataType(String dbType);
/**
* 根java数据类型获取数据库类型
* <p>
* 如 String -> VARCHAR
*
* @param dataType 数据类型
* @return 数据库类型
*/
public String transToColumnType(String dataType);
/**
* 根据数据库类型获取java数据类型 z全包名, 如java.lang.Integer
*
* @param dbType 数据库数据类型
* @return 数据类型
*/
public String getFullDataType(String dbType);
/**
* 根据数据库类型获取Tag
*
* @param dbType 数据库数据类型
* @return 数据类型
*/
public String getJspTag(String dbType) ;
/**
* 获取排序字段
*
* @param tableModel
* @return 排序string
*/
public String getOrderString(TableModelVo tableModel);
/**
* 获取列的测试数据
*
* @param column
* @return
*/
public String genTestDataQuote(ColumnVo column, Map<String, DictVo> dictMap) ;
/**
* 通过字典项生成数据
*
* @param data
* @param column
* @param dictMap
* @return 字典项数据
*/
public static String genTestDataWithDict(String data, ColumnVo column, Map<String, DictVo> dictMap);
/**
* 将输入值用双引号包裹起来
*
* @param value
* @return "value"
*/
public static String wrapWithQuote(String value) ;
参考chapter02子文件夹里面的, templates/goodScript.gsp 的内容;
<%
/**
* 表相关信息
*/
%>
-----------表信息: start --------------
表名:${tableDefine.dbTableName} class名称:${tableDefine.id}
中文名称:${tableDefine.cnname} 变量名称:${tableDefine.varDomainName}
-----------表信息: end --------------
<%
/**
* 第一个脚本示例:遍历column列表, 并打印列信息
*/
println """数据库表: ${tableDefine.dbTableName}"""
tableDefine.columns.each { column ->
println """---------- 列信息打印 start -------"""
print """dataName: ${column.dataName} \t , columnName: ${column.columnName} """
println """\tcolumnType: ${column.columnType} \t , length: ${column.length} """
// 获取Java类型
def dataType = tableNameUtil.getDataType(column.columnType)
print """java类型: ${dataType} """
/**
* 字段是否在 addList里面
*/
def isColumnInAddList = tableModel.isInList('addList', column.columnName);
/**
* 字段是否在 searchKey里面
*/
def isColumnInSearchKey = tableModel.isInList('searchKey', column.columnName);
print """isColumnInAddList: ${isColumnInAddList} \t isColumnInSearchKey: ${isColumnInSearchKey}"""
println """---------- 列信息打印 end -------"""
}
/**
* 获取新增列表名称,并遍历获取columnVo
*
* addList,updateList,queryList ,viewList ,createTime,updateTime 等列表也类似;
* 打印列信息
*/
//新增字段列表
List<String> addList = tableModel.getColumnNameList('addList');
//遍历新增字段名称列表
addList.each { addColumnName ->
// 通过列名称 获取columnVo对象
def column = tableDefine.getColumnByColumnName(addColumnName);
println """dataName: ${column.dataName} \t , columnName: ${column.columnName} """
}
/**
* 获取单个的主键
*/
def pkColumn = tableDefine.getPkColumn();
println """pkInfo dataName: ${pkColumn.dataName} \t , columnName: ${pkColumn.columnName} """
/**
* 如果为复合主键,可以获取列表
*/
def pkColumnList = tableDefine.getPkColumns();
pkColumnList.each { pkColumnVo ->
println """pkList dataName: ${pkColumn.dataName} \t , columnName: ${pkColumn.columnName} """
}
%>