遗留问题

上篇文章中遗留了一个问题,就是为了要关联类属性与注释,注释与字典的地方使用了两个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 | 保存信息修改记录续的更多相关文章

  1. JeeSite | 保存信息修改记录封装

    前面写过两篇关于“保存信息修改记录”的内容,分别如下: JeeSite | 保存信息修改记录 JeeSite | 保存信息修改记录续 回顾         第一篇文章通过类字段的比较返回一个有字段值不 ...

  2. JeeSite | 保存信息修改记录

    需求点 在很多场景中信息是不能轻易被修改的,修改时要么需要具备权限,要么需要审批,但是无论是哪种方式,修改前后的数据都是需要留有“案底”的,也就是说关键的信息被修改后是有修改记录的,一般修改记录会记录 ...

  3. 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 ...

  4. [ASP.net教程]ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等)

    以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping)在ASP.NET中,有很多种保存信息的对象.例如 ...

  5. 玩转web之servlet(六)---session介绍及简单使用(登录验证中保存信息)

    在浏览器与服务器进行交互时,往往需要把涉及到的一些数据保存下来,这时就需要使用cookie或session进行状态管理. 这篇文章先来说说session怎么用,首先在servlet中创建一个sessi ...

  6. ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等)

    以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping) 在ASP.NET中,有很多种保存信息的对象.例 ...

  7. C#实现在注册表中保存信息

    C#实现在注册表中保存信息 最近做的项目需要在注册表中记录一些用户设置,方便在程序下次启动时读取设置,应用上次用户保存的设置,挺简单的. 写出来,方便记忆,以后要用,可以直接改改就能用. 1 usin ...

  8. python中利用类创建的对象来保存信息

    在类创建的对象中,一般都是以字典的方式来保存信息 class Student: def __init__(self, name, age, score): self.name = name self. ...

  9. 3.8学习总结——Android保存信息

    为了保存软件的设置参数,Android平台为我们提供了一个SharedPreferences接口,它是一个轻量级的存储类,特别适合用于保存软件配置参数.使用SharedPreferences保存数据, ...

随机推荐

  1. 损失函数———有关L1和L2正则项的理解

    一.损失函: 模型的结构风险函数包括了   经验风险项  和  正则项,如下所示: 二.损失函数中的正则项 1.正则化的概念: 机器学习中都会看到损失函数之后会添加一个额外项,常用的额外项一般有2种, ...

  2. Linux第二章-Linux常用命令

    一.Linux常用快捷键 快捷键 作用 Tab 补全文件名或者路径 Ctrl + L 清除屏幕,然后,在最上面重新显示目前光标所在的这一行的内容. Ctrl + C 终止当前进程 Ctrl + D 注 ...

  3. OS X 下 OpenGL 4.x 环境配置

    配置: OS X 10.10 + CMake 3.2.2 + GLFW 3.1.1 + OpenGL 4.1 + Xcode 6.0 本文主要介绍如何在 OS X 系统下进行环境配置,使得 Xcode ...

  4. windows的两种sshd服务器安装

    关于windows的服务器,后来好像微软发布了专用的windows ssh服务器组件.通过win 10的linux子系统因该是可以安装ssh服务器.这两种都没有使用过. 有一个freesshd的免费软 ...

  5. 必威电竞2019或将赞助SKT,携手Faker再创辉煌

    必威电竞yabo055点康母,这是一家相当优秀的竞技娱乐平台,平台涉及的领域也比较广泛,包括各类电子竞技游戏以及相关资讯,平台内有很多专家,每日为大家分享各类热门赛事等一些游戏攻略.现在的电子竞技发展 ...

  6. lombok深入实践

    官网视频 官网地址:https://projectlombok.org 官网的首页视频演示在eclipse中如何使用Lombok; Project Lombok is a java library t ...

  7. 在eclipse中添加jdk源码

    window->Preferences->java->Installed JREs 点击你的jre然后点右边的Edit 找到以rt.jar结尾的jar,点击右边的Source Att ...

  8. idea实战技巧

    一.背景 为什么想写这个,因为编码一线更多的是实战,实战中,可能一个快捷键,一个小技巧,就能省很多时间. 本文会持续记录,持续更新. 二.技巧 1.全局替换(带正则) 场景是: 多profile的情况 ...

  9. PAT 1011 World Cup Betting 查找元素

    With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...

  10. Python 你见过三行代码的爬虫吗

    ------------恢复内容开始------------ 每次讲爬虫的时候都会从“发送请求” 开始讲,讲到解析页面的时候可能大部分读者都会卡住,因为这部分确实需要一点XPATH或者CSS选择器的前 ...