jeesite 代碼生成原理1
阿新 • • 發佈:2018-08-16
ora 設置 保存 led blog https ref tro req
jeeSite生成代碼原理主要是:通過JAXBContext的Marshal(解組) 和 UnMarshal(編組)實現java與xml的相互轉換,其中把要生成代碼的文件寫成一個XML模板,再通過IO流一行一行讀取模板,再進行轉換成相應的文件!
在進入這個頁面會使用GenUtils.getConfig()方法加載config.xml 並在genTableForm中讀取javaType,queryType,showType。
config.xml
<?xml version="1.0" encoding="utf-8"?> <config> <!-- 生成分類 --> <category> <category value="curd" label="增刪改查(單表)"> <template>curd/controller.xml</template> <template>curd/service.xml</template> <template>category-ref:dao</template> <template>curd/viewForm.xml</template> <template>curd/viewList.xml</template> </category> <category value="curd_many" label="增刪改查(一對多)"> <template>curd/controller.xml</template> <template>curd/serviceMany.xml</template> <template>category-ref:dao</template> <template>curd/viewFormMany.xml</template> <template>curd/viewList.xml</template> <childTable> <template>category-ref:dao</template> </childTable> </category> <category value="dao" label="僅持久層(dao/entity/mapper)"> <template>dao/dao.xml</template> <template>dao/entity.xml</template> <template>dao/mapper.xml</template> </category> <category value="treeTable" label="樹結構表(一體)"> <template>treetable/controller.xml</template> <template>treetable/service.xml</template> <template>treetable/dao.xml</template> <template>treetable/entity.xml</template> <template>treetable/mapper.xml</template> <template>treetable/viewForm.xml</template> <template>treetable/viewList.xml</template> </category> <category value="treeTableAndList" label="樹結構表(左樹右表)"> <template>category-ref:dao</template> </category> </category> <!-- java類型 --> <javaType> <dict value="String" label="String"/> <dict value="Long" label="Long"/> <dict value="Integer" label="Integer"/> <dict value="Double" label="Double"/> <dict value="java.util.Date" label="Date"/> <dict value="com.thinkgem.jeesite.modules.sys.entity.User" label="User"/> <dict value="com.thinkgem.jeesite.modules.sys.entity.Office" label="Office"/> <dict value="com.thinkgem.jeesite.modules.sys.entity.Area" label="Area"/> <dict value="com.thinkgem.jeesite.modules.idorp.entity.project.IdorpProject" label="IdorpProject"/> <dict value="com.thinkgem.jeesite.modules.idorp.entity.money.IdorpProjectPayment" label="IdorpProjectPayment"/> <dict value="com.thinkgem.jeesite.modules.idorp.entity.money.IdorpContact" label="IdorpContact"/> <dict value="com.thinkgem.jeesite.modules.idorp.entity.labor.IdorpLaborCost" label="IdorpLaborCost"/> <dict value="This" label="ThisObj" description="生成當前對象"/> <dict value="Custom" label="Custom" description="自定義對象,生成後手動設置"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.base.JhOaProductType" label="JhOaProductType"/> <dict value="com.thinkgem.jeesite.one.modules.jhoa.entity.base.JhOaSupplier" label="JhOaSupplier"/> <dict value="com.thinkgem.jeesite.one.modules.jhoa.entity.base.JhOaStore" label="JhOaStore"/> <dict value="com.thinkgem.jeesite.one.modules.jhoa.entity.base.JhOaPost" label="JhOaPost"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.base.JhOaProduct" label="JhOaProduct"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.purchase.JhOaPurchaseReq" label="JhOaPurchaseReq"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.base.JhOaProductPrice" label="JhOaProductPrice"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.purchase.JhOaPurchaseReqDetail" label="JhOaPurchaseReqDetail"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.purchase.JhOaPurchase" label="JhOaPurchase"/> <dict value="com.thinkgem.jeesite.one.modules.jhoa.entity.purchase.JhOaPayment" label="JhOaPayment"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.purchase.JhOaPurchaseDetail" label="JhOaPurchaseDetail"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.purchase.JhOaInStorage" label="JhOaInStorage"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.purchase.JhOaBackBill" label="JhOaBackBill"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.base.JhOaStoreStock" label="JhOaStoreStock"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.base.JhOaLossApply" label="JhOaLossApply"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.base.JhOaStoreStaff" label="JhOaStoreStaff"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.store.JhOaSale" label="JhOaSale"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.base.JhOaStoreStockPrice" label="JhOaStoreStockPrice"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.store.JhOaSaleDetail" label="JhOaSaleDetail"/> <dict value="com.thinkgem.jeesite.two.modules.jhoa.entity.base.JhOaAllocate" label="JhOaAllocate"/> </javaType> <!-- 查詢類型 --> <queryType> <dict value="=" label="="/> <dict value="!=" label="!="/> <dict value=">" label=">"/> <dict value=">=" label=">="/> <dict value="<" label="<"/> <dict value="<=" label="<="/> <dict value="between" label="Between"/> <dict value="like" label="Like"/> <dict value="left_like" label="Left Like"/> <dict value="right_like" label="Right Like"/> </queryType> <!-- 字段顯示類型 --> <showType> <dict value="input" label="單行文本"/> <dict value="textarea" label="多行文本"/> <dict value="select" label="下拉選項"/> <dict value="radiobox" label="單選按鈕"/> <dict value="checkbox" label="復選框"/> <dict value="dateselect" label="日期選擇"/> <dict value="userselect" label="人員選擇"/> <dict value="officeselect" label="部門選擇"/> <dict value="areaselect" label="區域選擇"/> <dict value="treeselect" label="樹選擇控件"/> <dict value="fileselect" label="文件上傳選擇"/> </showType> </config>
genTableForm.jsp
<td>
<select name="columnList[${vs.index}].javaType" class="required input-mini" style="width:185px;*width:175px">
<c:forEach items="${config.javaTypeList}" var="dict">
<option value="${dict.value}" ${dict.value==column.javaType?‘selected‘:‘‘} title="${dict.description}">${dict.label}</option>
</c:forEach>
</select>
</td>
各行數據保存在GenTableColumn中;
點擊保存進入GenUtils.generateCode方法
1 private String generateCode(GenScheme genScheme){ 2 3 StringBuilder result = new StringBuilder(); 4 5 // 查詢主表及字段列 6 GenTable genTable = genTableDao.get(genScheme.getGenTable().getId()); 7 genTable.setColumnList(genTableColumnDao.findList(newGenTableColumn(new GenTable(genTable.getId())))); 8 9 // 獲取所有代碼模板 10 GenConfig config = GenUtils.getConfig(); 11 12 // 獲取模板列表 13 List<GenTemplate> templateList = GenUtils.getTemplateList(config, genScheme.getCategory(), false); 14 List<GenTemplate> childTableTemplateList = GenUtils.getTemplateList(config, genScheme.getCategory(), true); 15 16 // 如果有子表模板,則需要獲取子表列表 17 if (childTableTemplateList.size() > 0){ 18 GenTable parentTable = new GenTable(); 19 parentTable.setParentTable(genTable.getName()); 20 genTable.setChildList(genTableDao.findList(parentTable)); 21 } 22 23 // 生成子表模板代碼 24 for (GenTable childTable : genTable.getChildList()){ 25 childTable.setParent(genTable); 26 childTable.setColumnList(genTableColumnDao.findList(new GenTableColumn(new GenTable(childTable.getId())))); 27 genScheme.setGenTable(childTable); 28 Map<String, Object> childTableModel = GenUtils.getDataModel(genScheme); 29 for (GenTemplate tpl : childTableTemplateList){ 30 result.append(GenUtils.generateToFile(tpl, childTableModel, genScheme.getReplaceFile())); 31 } 32 } 33 34 // 生成主表模板代碼 35 genScheme.setGenTable(genTable); 36 Map<String, Object> model = GenUtils.getDataModel(genScheme); 37 for (GenTemplate tpl : templateList){ 38 result.append(GenUtils.generateToFile(tpl, model, genScheme.getReplaceFile())); 39 } 40 return result.toString(); 41 }
參考鏈接:
https://blog.csdn.net/u011781521/article/details/79322942
https://www.cnblogs.com/26JRS/p/6084082.html
jeesite 代碼生成原理1