1. 程式人生 > >jeesite 代碼生成原理1

jeesite 代碼生成原理1

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(new
GenTableColumn(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