您的位置:首页 > 数据库 > Redis

ssm redis 数据字典在J2EE中的多种应用与实现

2017-09-25 10:03 561 查看
数据字典在项目中是不可缺少的“基础设施”,关于数据字典如何设计如何实现,今天抽空讲一下吧

先看一下表设计:





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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: