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)

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

  1. AlloyTouch.js 源码 学习笔记及原理说明

    alloyTouch这个库其实可以做很多事的, 比较抽象, 需要我们用户好好的思考作者提供的实例属性和一些回调方法(touchStart, change, touchMove, pressMove, ...

  2. AlloyFinger.js 源码 学习笔记及原理说明

    此手势库利用了手机端touchstart, touchmove, touchend, touchcancel原生事件模拟出了 rotate  touchStart  multipointStart   ...

  3. BiLSTM-CRF学习笔记(原理和理解) 维特比

    BiLSTM-CRF 被提出用于NER或者词性标注,效果比单纯的CRF或者lstm或者bilstm效果都要好. 根据pytorch官方指南(https://pytorch.org/tutorials/ ...

  4. 学习笔记7_Java_day11_JSP原理(5)

    4. jsp原理(理解) * jsp其实是一种特殊的Servlet > 当jsp页面第一次被访问时,服务器会把jsp编译成java文件(这个java其实是一个servlet类) > 然后再 ...

  5. Git学习笔记1--Git原理简单介绍

    Git是一个分布式的版本号控制工具,假设想用github等版本号控制系统,核心就是git,以下简介一些git的基础原理,原文:http://git-scm.com/book/en/Getting-St ...

  6. lazy-load-img.js 源码 学习笔记及原理说明

    lazy-load-img.js? 1. 什么鬼? 一个轻量级的图片懒加载,我个人很是喜欢. 2. 有什么优势? 1.原生js开发,不依赖任何框架或库 2.支持将各种宽高不一致的图片,自动剪切成默认图 ...

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

    JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源Java EE快速开发平台. 在github上,对jeesite平台有详细的介绍,这里稍作整理,给出项目的内置功能 ...

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

    PCA目的:这里举个例子,如果假设我有m个点,{x(1),...,x(m)},那么我要将它们存在我的内存中,或者要对着m个点进行一次机器学习,但是这m个点的维度太大了,如果要进行机器学习的话参数太多, ...

  9. mysql学习笔记-底层原理详解

    前言 我相信每一个程序员都避免不了和数据库打交道,其中Mysql以其轻量.开源成为当下最流行的关系型数据库.Mysql5.0以前以MyISAM作为默认存储引擎,在5.5版本以后,以InnoDB作为默认 ...

随机推荐

  1. sh2.sed脚本练习

    1,删除/etc/grub.conf文件中行首的空白字符: sed -r 's@^[[ :spapce: ]] +@@g' /etc/grub.conf 2.替换/etc/inittab 文件中&qu ...

  2. Java_太阳系_行星模型_小游戏练习_详细注释

    //实现MyFrame--实现绘制窗口,和实现重写 重画窗口线程类 package cn.xiaocangtian.Test; import java.awt.Frame; import java.a ...

  3. vue.js 请求数据

    VUE.JS var vm = new Vue({ el:"#list", data:{ gridData: "", }, mounted: function( ...

  4. python import cv2 出错:cv2.x86_64-linux-gnu.so: undefined symbol

    之前写过一个python使用opencv处理图片的脚本,当时是可以使用的,现在突然发现执行时出错: ImportError: /usr/lib/python2.7/dist-packages/cv2. ...

  5. Windows中遇到的些问题及解决办法

    1.win7 无法将程序锁定到任务栏 由于不正确的使用去掉桌面快捷键小箭头等,导致无法将程序固定到任务栏 如:http://jingyan.baidu.com/article/ac6a9a5e41bd ...

  6. 【Java EE 学习 74 上】【数据采集系统第六天】【使用Jfreechart的统计图实现】【Jfreechart的基本使用方法】

    之前已经实现了数据的采集,现在已经有了基本的数据,下一步就需要使用这些数据实现统计图的绘制了.这里使用Jfreechart实现这些统计图的绘制.首先看一下Jfreechart的基本用法,只有知道了它的 ...

  7. Js实现string.format

    经常需要动态拼接html字符串,想到用类似于.net的string.format函数比较好,于是找了下,stackoverflow的代码: if (!String.prototype.format) ...

  8. Linux内核:kthread_create(线程)、SLEEP_MILLI_SEC

    转自:http://blog.csdn.net/guowenyan001/article/details/39230181 一.代码 #include <linux/module.h> # ...

  9. 没有了SA密码,无法Windows集成身份登录,DBA怎么办?

    一同事反馈SQL无法正常登录了,以前都是通过windows集成身份验证登录进去的(sa密码早忘记了),今天就改了服务器的机器名,现在无论如何都登录不进去. SQL登录时如果采用windows集成身份验 ...

  10. JAVA 虚拟机钩子

    Shutdown Hook Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.JAVA中的ShutdownHook提供了比较好的 ...