JeeSite學習筆記~代碼生成原理


1.建立數據模型【單表,一對多表,樹狀結構表】

ERMaster建立數據模型,並設定對應表,建立關聯關系

2.系統獲取對應表原理

1.怎樣獲取數據庫的表

genTableForm.jsp

<label class="control-label">表名:</label>

<div class="controls">

<form:select path="name" class="input-xxlarge">

<form:options items="${tableList}" itemLabel="nameAndComments" itemValue="name" htmlEscape="false"/>

</form:select>

</div>

GenTableController:

// 獲取物理表列表

List<GenTable> tableList = genTableService.findTableListFormDb(new GenTable());

model.addAttribute("tableList", tableList);

 

GenDataBaseDictDao.xml

//根據name查詢數據庫對應的表

<select id="findTableList" resultType="GenTable">

<if test="dbName == 'oracle'">

SELECT

t.TABLE_NAME AS name,

c.COMMENTS AS comments

FROM user_tables t, user_tab_comments c

WHERE t.table_name = c.table_name

<if test="name != null and name != ''">

AND t.TABLE_NAME = upper(#{name})

</if>

ORDER BY t.TABLE_NAME

</if>

</select>

 

注:user_tables:當前用戶擁有的表 

user_tab_comments:獲取表的注釋

 

//判斷是否已生成表

SELECT

t.COLUMN_NAME AS name,<!--

t.DATA_TYPE,

t.DATA_LENGTH,

t.DATA_PRECISION,

t.DATA_SCALE, -->

(CASE WHEN t.NULLABLE = 'Y' THEN '1' ELSE '0' END) AS isNull,

(t.COLUMN_ID * 10) AS sort,

c.COMMENTS AS comments,

decode(t.DATA_TYPE,'DATE',t.DATA_TYPE || '(' || t.DATA_LENGTH || ')',

'VARCHAR2', t.DATA_TYPE || '(' || t.DATA_LENGTH || ')',

'VARCHAR', t.DATA_TYPE || '(' || t.DATA_LENGTH || ')',

'NVARCHAR2', t.DATA_TYPE || '(' || t.DATA_LENGTH/2 || ')',

'CHAR', t.DATA_TYPE || '(' || t.DATA_LENGTH || ')',

'NUMBER',t.DATA_TYPE || (nvl2(t.DATA_PRECISION,nvl2(decode(t.DATA_SCALE,0,null,t.DATA_SCALE),

'(' || t.DATA_PRECISION || ',' || t.DATA_SCALE || ')',

'(' || t.DATA_PRECISION || ')'),'(18)')),t.DATA_TYPE) AS jdbcType

FROM user_tab_columns t, user_col_comments c

WHERE t.TABLE_NAME = c.table_name

AND t.COLUMN_NAME = c.column_name

<if test="name != null and name != ''">

AND t.TABLE_NAME = upper(#{name})

</if>

ORDER BY t.COLUMN_ID

 

2.業務表配置,代碼生成

代碼生成工具類:GenUtils

XmlJava類:JaxbMapper

 

調用方法:

代碼生成配置對象getConfig()

XML文件轉換為對象fileToObject(String fileName, Class<?> clazz)

根據分類獲取模板列表:

getTemplateList(GenConfig config, String category, boolean isChildTable)

獲取數據模型:getDataModel(GenScheme genScheme)

調用模板XMLconfig.xml

對應映射:GenConfig.java---config.xml

 

 

 

2.代碼生成的路徑設置

默認生成路徑:D:\src\main

    Java代碼:D:\src\main\java\com\thinkgem\jeesite\modules

Dao.xml:D:\src\main\resources\mappings\modules

Web代碼:D:\src\main\webapp\WEB-INF\views\modules

 

調用代碼生成工具類:GenUtils,

路徑生成類:Global,

調用方法:generateToFile(),getProjectPath()

String fileName = Global.getProjectPath() + File.separator 

+ StringUtils.replaceEach(FreeMarkers.renderString(tpl.getFilePath() + "/", model),

new String[]{"//", "/", "."}, new String[]{File.separator, File.separator, File.separator})

+ FreeMarkers.renderString(tpl.getFileName(), model);

 

路徑配置設置:jeesite.properties:144

       projectPath=D\:\\workspace\\jeesite

3.菜單配置,權限設置

 樹狀圖結構

權限:

訪問路徑:

@Controller

@RequestMapping(value = "${adminPath}/workers/hlTest")

查看權限:

@RequiresPermissions("workers:hlTest:view")

編輯權限:

@RequiresPermissions("workers:hlTest:edit")

 

生成代碼原理總結:

JeeSite生成代碼原理主要是:通過JAXBContextMarshal(解組) 和 UnMarshal(編組)實現javaxml的相互轉換,其中把要生成代碼的文件寫成一個XML模板,再通過IO流一行一行讀取模板,再進行轉換成相應的文件!

具體參看代碼(config.xml,GenUtils.java,GenSchemeService.java

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM