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保存数据, ...
随机推荐
- Python语法速查: 13. 操作系统服务
返回目录 本篇索引 (1)sys模块 (2)os模块 (3)与Windows相关模块 (4)subprocess模块 (5)signal模块 (1)sys模块 sys模块用于Python解释器及其环境 ...
- unittest---unittest的几种执行方法
我们在使用unittest单元测试框架做自动化的时候,可能会遇到想要看看这条用例写的是否正确,然后进行执行,但是又还有其他的用例在这里,我们又不能屏蔽,这个怎么办?不要着急unittest的几种执行方 ...
- 使用navicat连接只开放内网ip连接的数据库
无法通过Navicat来连接MySQL,比较常见的两种问题? 服务器上自己安装的MySQL数据库,且未开通外网登录账号 直接购买服务商的MySQL数据库不创建公网访问,只有内网访问 背景: 公司数 ...
- sublime相关操作
装插件 1,安装过Package Control ctrl + shift + p 输入install package 选择 Package Control: Install Package 搜索自己 ...
- Java之Arrays类
Arrays概述 java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等.其所有方法均为静态方法,调用起来非常简单. 常用方法 public static String t ...
- 各种数和各种反演(所谓FFT的前置知识?)
每次问NC做多项式的题需要什么知识点. 各种数. 各种反演. 多项式全家桶. 然后我就一个一个地学知识点.然而还差好多,学到后面的前面的已经忘了(可能是我太菜吧不是谁都是NC啊) 然后发现每个知识点基 ...
- pyhon代码设计格式指南
一 缘由: 经常看到周围人写的代码,在大公司有规范,很多人不乱写代码,但是在很多小公司,很多程序员都是半路出家,也不喜欢读书学习,导致写出来的代码乱七八糟.今天拜读了python编程这本书,作者把py ...
- Java Virtual Machine (JVM), Difference JDK, JRE & JVM – Core Java
By Chaitanya Singh | Filed Under: Learn Java Java is a high level programming language. A program wr ...
- 【UWP】仅在TextBlock文本溢出时显示Tooltip
前言 这是我今天在回答SO问题时偶然遇到的,觉得可能还比较通用,就记录下来以供参考. 通常,我们使用ToolTip最简单的方式是这样: <TextBlock Text="Test&qu ...
- C# 英语纠错 LanguageTool
WPF中,对单词拼写错误,textbox有相应的附加属性可以设置. <TextBox SpellCheck.IsEnabled="True" /> 但是此属性只在WPF ...