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

Xml转 Java类:JaxbMapper

调用方法:

代码生成配置对象:getConfig()

XML文件转换为对象:fileToObject(String fileName, Class<?> clazz)

根据分类获取模板列表:

getTemplateList(GenConfig config, String category, boolean isChildTable)

获取数据模型:getDataModel(GenScheme genScheme)

调用模板XML:config.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生成代码原理主要是:通过JAXBContext的Marshal(解组) 和 UnMarshal(编组)实现java与xml的相互转换,其中把要生成代码的文件写成一个XML模板,再通过IO流一行一行读取模板,再进行转换成相应的文件!

具体参看代码(config.xml,GenUtils.java,GenSchemeService.java)

时间: 2024-10-12 19:16:28

JeeSite学习笔记~代码生成原理的相关文章

学习笔记7_Java_day11_JSP原理(5)

4. jsp原理(理解) * jsp其实是一种特殊的Servlet > 当jsp页面第一次被访问时,服务器会把jsp编译成java文件(这个java其实是一个servlet类) > 然后再把java编译成.class > 然后创建该类对象 > 最后调用它的service()方法 > 第二次请求同一jsp时,直接调用service()方法. * 在tomcat的work目录下可以找到jsp对应的.java源代码. * 查看jsp对应java文件: > java脚本 >

jeesite学习笔记(一) 项目框架

JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源Java EE快速开发平台. 在github上,对jeesite平台有详细的介绍,这里稍作整理,给出项目的内置功能.开发工具.设计思想.技术选型以及平台的总结图,简单明了,方便查看.

linux学习笔记-rsync原理及使用

rsync的原理及使用 第1章 rsync原理及介绍 1.1什么是rsync Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.Rstync软件适用于unix/linux/windows等多种操作系统平台. Rsync英文全称为Remotesynchronization,即远程同步.从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像.远程备份的功能,这个功能类似ssh带的scp命令,但又优于scp命令的功能,scp

Appium自动化测试学习笔记 —— Appium原理

Appium简介 开源.跨平台.多语言支持的移动应用自动化工具 可测对象 原生应用APP.混合应用APP.移动Web App APP运行环境:真机.模拟器 测试对象App运行平台 IOS.Android(目前这两种是市场主流):Windows.FirefoxOS. 测试程序运行平台支持 Windows.Linux.Mac OS; 注:IOS应用appium server必须运行在Mac OS系统上,如 MacBook.imac: 支持的测试语言 python.Java.ruby.php.js.C

深度学习笔记——PCA原理与数学推倒详解

PCA目的:这里举个例子,如果假设我有m个点,{x(1),...,x(m)},那么我要将它们存在我的内存中,或者要对着m个点进行一次机器学习,但是这m个点的维度太大了,如果要进行机器学习的话参数太多,或者说我要存在内存中会占用我的较大内存,那么我就需要对这些个点想一个办法来降低它们的维度,或者说,如果把这些点的每一个维度看成是一个特征的话,我就要减少一些特征来减少我的内存或者是减少我的训练参数.但是要减少特征或者说是减少维度,那么肯定要损失一些信息量.这就要求我在减少特征或者维度的过程当中呢,尽

OpenCV的学习笔记

整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN 数量:55篇博文 网址:http://blog.csdn.net/column/details/opencv-manual.html 2:部分OpenCV的函数解读和原理解读 作者:梦想腾飞 数量:20篇博文 网址:http://blog.csdn.net/xidianzhimeng/article/category/

马哥学习笔记三十二——计算机及操作系统原理

缓存方式: 直接映射 N路关联 缓存策略: write through:通写 write back:回写 进程类别: 交互式进程(IO密集型) 批处理进程(CPU密集型) 实时进程(Real-time) CPU: 时间片长,优先级低IO:时间片短,优先级高 Linux优先级:priority 实时优先级: 1-99,数字越小,优先级越低 静态优先级:100-139,数据越小,优先级越高 实时优先级比静态优先级高 nice值:调整静态优先级   -20,19:100,139   0:120 ps

编译原理学习笔记 -- 绪论1

1. 语言处理器 语言处理系统 _________ 经过预 _______ 源程序 --> |预处理器| --> 处理的 --> |编译器| --> 目标汇编程序 -------- 源程序 ------- _______ 可重定位的 ______________ --> |汇编器| --> 机器代码 --> |链接器/加载器| --> 目标机器代码 ------- -------------- ↑ 库文件/可重定位对象文件 预处理器:把源程序聚合在一起,并宏

最大熵学习笔记(二)最大熵原理

  生活中我们经常听到人们说"不要把鸡蛋放到一个篮子里",这样可以降低风险.深究一下,这是为什么呢?其实,这里边包含了所谓的最大熵原理(The Maximum Entropy Principle).本文为一则读书笔记,将对最大熵原理以及由此导出的最大熵模型进行介绍,重点给出其中所涉及数学公式的理解和详细推导. 相关链接 最大熵学习笔记(零)目录和引言 最大熵学习笔记(一)预备知识 最大熵学习笔记(二)最大熵原理 最大熵学习笔记(三)最大熵模型 最大熵学习笔记(四)模型求解 最大熵学习笔