数据字典在项目中是不可缺少的“基础设施”,关于数据字典如何设计如何实现,今天抽空讲一下吧

先看一下表设计:

通过自定义标签来实现页面的渲染:

public class DataDictValueTag extends SimpleTagSupport {

    private String typeCode;

    private String ddKey;

    StringWriter sw = new StringWriter();

    public void doTag() throws JspException, IOException {
if (StringUtils.isNotEmpty(typeCode) && StringUtils.isNotEmpty(ddKey)) { DataDictService ddService = (DataDictService)SpringContextUtil.getBean(DataDictService.class);
String ddValue = ddService.queryDataDictValueByCodeKey(typeCode, ddKey); JspWriter out = getJspContext().getOut();
out.println(ddValue);
} else {
getJspBody().invoke(sw);
getJspContext().getOut().println(sw.toString());
}
} public String getTypeCode() {
return typeCode;
} public void setTypeCode(String typeCode) {
this.typeCode = typeCode;
} public String getDdKey() {
return ddKey;
} public void setDdKey(String ddKey) {
this.ddKey = ddKey;
} }

再看一下service,根据字典码和数据字典key来获取具体的值:

需要注意的是数据字典属于静态数据,要放到redis中

@Override
public String queryDataDictValueByCodeKey(String typeCode, String ddKey) {
String redisKey = "redis_datadict:" + typeCode + ":" + ddKey;
// 从缓存中获取数据字典的值,如果没有该值,则从数据库中获取,最后再存入redis中
String redisDdvalue = jedis.get(redisKey);
if (StringUtils.isNotEmpty(redisDdvalue)) {
return redisDdvalue;
} DataDictExample dataDictExample = new DataDictExample();
Criteria dataDictCriteria = dataDictExample.createCriteria();
dataDictCriteria.andTypeCodeEqualTo(typeCode);
dataDictCriteria.andDdkeyEqualTo(ddKey);
dataDictCriteria.andIsShowEqualTo(YesOrNo.YES.value);
List<DataDict> list = dataDictMapper.selectByExample(dataDictExample);
if (list != null && list.size() > 0) {
DataDict dd = (DataDict)list.get(0); String ddvalue = dd.getDdvalue();
// 在Redis中设置数据字典的值
jedis.set(redisKey, ddvalue); return ddvalue;
} return "";
}

再JSP中的使用:

<label>
<input type="radio" name="sex" class="icheck" value="0" /> <dataDict:dataDictValue typeCode="sex" ddKey="0"/>
</label> <label>
<input type="radio" name="sex" class="icheck" value="1" /> <dataDict:dataDictValue typeCode="sex" ddKey="1"/>
</label> <label>
<input type="radio" name="sex" class="icheck" value="2" checked="checked"/> <dataDict:dataDictValue typeCode="sex" ddKey="2"/>
</label>

如果是用jqgrid类似这样的js插件来渲染的话,那么需要再额外自定义api接口供js或者其他应用调用:

{ name: 'sex', index: 'sex', width: 20, sortable: false,
formatter:function(cellvalue, options, rowObject) { var typeCode = "sex";
var ddkey = cellvalue;
var ddvalue = ""; $.ajax({
url: $("#hdnContextPath").val() + "/dataDict/queryDataDictValue.action",
type: "POST",
async: false,
data: {"typeCode": typeCode, "ddkey": ddkey},
success: function(data) {
if(data.status == 200 && data.msg == "OK") {
ddvalue = data.data;
} else {
console.log(JSON.stringify(data));
}
},
error: function (response, ajaxOptions, thrownError) {
Error.displayError(response, ajaxOptions, thrownError);
}
}); return ddvalue}
},

基本上就是这些用法了,具体我录制了一些视频,代码也上传到了github
http://www.itzixi.com/course/detail.shtml?courseId=17092078Y3009WX4

https://github.com/leechenxiang/LeeCX

ssm redis 数据字典在J2EE中的多种应用与实现的更多相关文章

  1. SSM(七)在JavaWeb应用中使用Redis

    前言 先来看一张效果图: 作用就是在每次查询接口的时候首先判断Redis中是否有缓存,有的话就读取,没有就查询数据库并保存到Redis中,下次再查询的话就会直接从缓存中读取了.Redis中的结果:之后 ...

  2. Redis在WEB开发中的应用与实践

    Redis在WEB开发中的应用与实践 一.Redis概述: Redis是一个功能强大.性能高效的开源数据结构服务器,Redis最典型的应用是NoSQL.但事实上Redis除了作为NoSQL数据库使用之 ...

  3. 单点登录与消息队列以及在J2EE中的实现方案

    前言 这次为大家简单介绍两个在WEB开发中经常使用的概念——单点登录和消息队列以及具体到J2EE中的一些实现方案.本文原创性的工作比较少,主要是一些总结概括和自己的理解. 单点登录SSO SSO的业务 ...

  4. 从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建

    从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建 废话不说,直接撸步骤!!! 1.创建主项目:ncc-parent 选择maven创建项目,注意在创建项目中,packing选择 ...

  5. ssm+redis整合(通过cache方式)

    这几天的研究ssm redis 终于进入主题了,今天参考了网上一些文章搭建了一下ssm+redis整合,特别记录下来以便以后可以查询使用,有什么不足请大牛们提点 项目架构 1.pom.xml < ...

  6. JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(2):SSM+Redis概念理解

    一.SSM+Redis的结构图 在Java互联网中,以Spring+SpringMVC+MyBatis(SSM)作为主流框架,SSM+Redis的结构图如下: 二.下面介绍它们各自承担的功能: 1.S ...

  7. redis入门指南书中概要

    一.简介 1.redis是一个开源的.高性能的.基于键值对的缓存和存储系统,通过提供多种键值数据类型适应不同场景下的缓存和存储需求,同时redis高级功能能胜任消息队列.任务队列等不同角色. 2.内存 ...

  8. redis在asp.net 中的应用

    1.redis介绍 Nosql数据库作为关系型数据库的补充,在互联网公司已经得到广泛的运用.redis便是其中的代表之一,redis是一种(key,value)基于内存的数据库,并支持多种数据结构,如 ...

  9. Redis(十四)Redis 在Java Web 中的应用

    在传统的 Java Web 项目中,使用数据库进行存储数据,但是有一些致命的弊端,这些弊端主要来自于性能方面. 由于数据库持久化数据主要是面向磁盘,而磁盘的读/写比较慢,在一般管理系统中,由于不存在高 ...

随机推荐

  1. 写带有清晰图片的博客:如何将word中的图片复制到windows live writer保持大小不变--清晰度不变

    写blog的习惯,先在word写了,复制到windows live writer,再发布到博客园.word中的文章,图片有缩放比例,复制到windows live writer后图片变得不清晰.除了一 ...

  2. log4j的详细配置(最省心完美配置)

    先说下我的需求 1,可以记录日记在我们的java开发项目周期中: 2,很简单即可输出日志: 3,每天按照时间将不同的日志输出到不同的文件中,每天输出日志到一个带有当前时间戳的文件中: 4,可以修改当前 ...

  3. excel 妙用选择性粘贴

    需要注意的是转置功能,是经常会用到的功能.

  4. SG 函数初步 HDU 1536 &amp;&amp; HDU 1944

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=1944 pid=1536"> http://acm.hdu.edu.cn/showpr ...

  5. Map的深浅拷贝的探究

    1. 复制map示例 首先看一个例子,当我使用不同方法将一个源map拷贝到另一个map后,改变源map,复制后的map理应不受影响 import java.math.BigDecimal; impor ...

  6. ubuntu 终端中文显示乱码问题!

    1 Alt+Ctrl+F1 进入第一个终端,发现中文乱码. 2 安装zhcon. sudo apt-get install zhcon 3 输入下面命令,启动zhcon,中文显示正常. zhcon - ...

  7. ThinkPHP学习(二)

    书接前文. 我想前台填写内容,然后在后台保存一下,规划了一下前台要录入的内容,主要包括title.content两大内容.然后简单设计了一个前台页面(复杂的我得会啊),就在上篇文章的基础上直接加了: ...

  8. 【LeetCode】206. Reverse Linked List (2 solutions)

    Reverse Linked List Reverse a singly linked list. click to show more hints. Hint: A linked list can ...

  9. easymock快速入门

    easymock是众多mock之中的很容易用的mock,今天刚开始学习,来个简单的教程.以购物车结算为例子,比如首先是每一个商品项的pojo. public class Item { private ...

  10. YAML中重复的KEY的判断

    package com.test.util; import java.io.BufferedReader; import java.io.FileInputStream; import java.io ...