JeeSite | 保存信息修改记录续
遗留问题
上篇文章中遗留了一个问题,就是为了要关联类属性与注释,注释与字典的地方使用了两个map来逐个添加了相关的信息,如下所示:
Map<String, String> mapField = new HashMap<String, String>() {{
// 类中的属性,属性对应的中文
put("sex","性别");
}};
Map<String, String> mapDict = new HashMap<String, String>() {{
// 属性对应的中文,在JeeSite中字典的描述
put("性别", "SEX");
}};
在例子中,这里只给出了一个字段,其实这里有非常多的字段和字典需要关联,毕竟一个表不可能只有一个字段。当表结构发生改变后,这些“硬编码”的表字段和字典的两个map也需要相应的修改,反复的增加和修改这部分内容费时费力还容易错,那么解决的办法就是使用JeeSite系统中提供的两个表gen_table和gen_table_column。
表介绍
gen_table和gen_table_column是主从表,一个用于记录表,一个用于记录表中的列,然后它们的关联关系如下:
gen_table.id = gen_table_column.gen_table_id
在**gen_table**中保存了表名对应的类名,在**gen_table_column**表中保存了表字段对应的注释和对应的Java类属性,有了这几部分就可以通过**类名**来获取注释和类属性了。
添加获取函数
操作**gen_table**和**gen_table_column**的Java文件分别是**GenTableService.java**、**GenTableDao.java**和**GenTableColumnDao.java**,还包括两个MyBatis用的**GenTableDao.xml**和**GenTableColumnDao.xml**文件。分别修改这几个文件。
在GenTableService.java中增加如下代码:
/**
* 通过类名获取对应的GenTable对象
* @param className 类名
* @return GenTable对象
*/
public GenTable getTableByClass(String className) { GenTable gt = genTableDao.getTableByClass(className);
return gt;
}
/**
* 通过表id获取表中的列
* @param tableId 表id
* @return 表中的列
*/
public List<GenTableColumn> getColumnByTable(String tableId) { List<GenTableColumn> gtcList = genTableColumnDao.getColumnByTable(tableId);
return gtcList;
}
在GenTableDao.java中增加上面第一个方法的定义:
GenTable getTableByClass(String className);
在GenTableColumnDao.java中增加上面第二个方法的定义:
GenTable getTableByClass(String className);
在GenTableDao.xml中增加如下查询代码:
<!-- 通过类名获得表名 -->
<select id="getTableByClass" resultType="GenTable">
SELECT
<include refid="genTableColumns"/>
FROM gen_table a
<include refid="genTableJoins"/>
WHERE a.del_flag = 0
AND a.class_name = #{className}
</select>
在GenTableColumnDao.xml中增加如下的查询代码:
<!-- 通过表id获得表列 -->
<select id="getColumnByTable" resultType="GenTableColumn">
SELECT
<include refid="genTableColumnColumns"/>
FROM gen_table_column a
<include refid="genTableColumnJoins"/>
WHERE a.del_flag = 0
AND a.gen_table_id = #{tableId}
</select>
注:在JeeSite中的分层中,所有的请求都在Controller层中处理,然后然后要进行业务处理的操作,都会再调用对应的Service层,Service层再去调用相应的Dao层,Dao层通过MyBatis中的SQL语句来获取相应的数据后逐层的返回。
获得对象中的属性对应的注释及字典
有了上面的定义就可以在Controller中来获取类属性对应的注释及字典了。代码如下:
// 根据类名获得对应的表信息
GenTable genTable = genTableService.getTableByClass("HousingResource");
if ( genTable == null ) {
return "";
}
// 根据表id获取表相应的字段信息
List<GenTableColumn> columnList = genTableService.getColumnByTable(genTable.getId());
if ( columnList == null ) {
return "";
}
Map<String, String> mapField = new HashMap<String, String>();
Map<String, String> mapDict = new HashMap<String, String>();
// 获得字段对应的Java属性和字段注释
for( GenTableColumn gtc : columnList ) {
mapField.put(gtc.getJavaField(), gtc.getComments());
}
// 获得字段对应的注释和对应的字典
for ( GenTableColumn gtc : columnList ) {
if ( StringUtils.isNotEmpty(gtc.getDictType())
&& StringUtils.isNotBlank(gtc.getDictType()) ) {
mapDict.put(gtc.getComments(), gtc.getDictType());
}
}
到此,对于上篇文章遗留的问题就修改完成了,那么以后只要表结构改变了,只要在JeeSite中的“业务表配置”下,重新将表添加一次,这样就可以免去每次都修改代码的麻烦了。
我的微信公众号:“码农UP2U”
JeeSite | 保存信息修改记录续的更多相关文章
- JeeSite | 保存信息修改记录封装
前面写过两篇关于“保存信息修改记录”的内容,分别如下: JeeSite | 保存信息修改记录 JeeSite | 保存信息修改记录续 回顾 第一篇文章通过类字段的比较返回一个有字段值不 ...
- JeeSite | 保存信息修改记录
需求点 在很多场景中信息是不能轻易被修改的,修改时要么需要具备权限,要么需要审批,但是无论是哪种方式,修改前后的数据都是需要留有“案底”的,也就是说关键的信息被修改后是有修改记录的,一般修改记录会记录 ...
- ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等) ZT
http://www.cnblogs.com/ranran/p/4065619.html http://www.cnblogs.com/jxlsomnus/p/4450911.html 以下是关于AS ...
- [ASP.net教程]ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等)
以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping)在ASP.NET中,有很多种保存信息的对象.例如 ...
- 玩转web之servlet(六)---session介绍及简单使用(登录验证中保存信息)
在浏览器与服务器进行交互时,往往需要把涉及到的一些数据保存下来,这时就需要使用cookie或session进行状态管理. 这篇文章先来说说session怎么用,首先在servlet中创建一个sessi ...
- ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等)
以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping) 在ASP.NET中,有很多种保存信息的对象.例 ...
- C#实现在注册表中保存信息
C#实现在注册表中保存信息 最近做的项目需要在注册表中记录一些用户设置,方便在程序下次启动时读取设置,应用上次用户保存的设置,挺简单的. 写出来,方便记忆,以后要用,可以直接改改就能用. 1 usin ...
- python中利用类创建的对象来保存信息
在类创建的对象中,一般都是以字典的方式来保存信息 class Student: def __init__(self, name, age, score): self.name = name self. ...
- 3.8学习总结——Android保存信息
为了保存软件的设置参数,Android平台为我们提供了一个SharedPreferences接口,它是一个轻量级的存储类,特别适合用于保存软件配置参数.使用SharedPreferences保存数据, ...
随机推荐
- How to Create Transportable Tablespaces Where the Source and Destination are ASM-Based (Doc ID 394798.1)
How to Create Transportable Tablespaces Where the Source and Destination are ASM-Based (Doc ID 39479 ...
- 【测试基础】App测试要点总结
测试工作过程中思维过程:测试人员常被看作Bug寻找者,程序的破坏者. 1.好的测试工程师所具备的能力: 细心的观察能力 有效的提问能力 产品的业务能力 好奇心 2.测试人员需要询问问题:测试人员的核心 ...
- 关于jQuery MiniUI
jQuery MiniUI v3.0 jQuery MiniUI - 专业WebUI控件库.它能缩短开发时间,减少代码量,使开发者更专注于业务和服务端,轻松实现界面开发,带来绝佳的用户体验. http ...
- Eclipse alt+/语法不提示的解决方法
最近公司电脑上的Eclipse没有了自动提示功能,也不是全部不提示,大多数情况下按下“alt+/”键还会产生提示,但是当我在java项目中邪main方法和syso的时候,“alt+/”则会失效,今天在 ...
- Python中的模块引用机制
一.模块引用 Def: 在Python 程序中使用另一个文件定义的类(方法).函数.数据等 被引用模块位置.通常 Python2 : "/Library/Python/2.7/site-pa ...
- 跨域问题,解决方案-Nginx反向代理
跨域问题,解决之道 跨域问题,在日常开发过程中,是一个非常熟悉的名词.今天的话题,结合我之前的项目场景,讨论下<跨域问题,解决之道>. 跨域是什么 跨域问题,是由于JavaScript出于 ...
- Python的生成器和生成器表达式
一,生成器和生成器表达式 什么是生成器,生成器实质就是迭代器,在python中有三种方式来获取生成器: 1. 通过生成器函数 和普通函数没有区别,里面有yield的函数就是生成器函数,生成器函数在执行 ...
- SpringBoot2.0 整合 SpringSecurity 框架,实现用户权限安全管理
本文源码:GitHub·点这里 || GitEE·点这里 一.Security简介 1.基础概念 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方 ...
- apt-get原理
apt-get 而这个步骤全要用户亲力亲为可能又有些麻烦,懒是科技发展的重要推动力.所以软件厂商自己编译好了很多二进制文件,只要系统和环境对应,下载之后就能直接安装. 但是如果下载了很多软件我想要管理 ...
- WPF customize DelegateCommand
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...