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

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

先看一下表设计:

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

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

时间: 2024-11-07 04:34:43

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

redis在asp.net 中的应用

1.redis介绍 Nosql数据库作为关系型数据库的补充,在互联网公司已经得到广泛的运用.redis便是其中的代表之一,redis是一种(key,value)基于内存的数据库,并支持多种数据结构,如List,HashSet,string等,并能够支持的数据的持久化存储,redis如何做内存数据到磁盘的同步将分单独的章节讲解.既然redis是基于内存的数据库,那么它将应用在对性能要求高的场合,如做数据缓存,可以减少数据库访问的压力.同时redis可以应用在统计分析类的Web应用,统计分析类Web

redis入门指南书中概要

一.简介 1.redis是一个开源的.高性能的.基于键值对的缓存和存储系统,通过提供多种键值数据类型适应不同场景下的缓存和存储需求,同时redis高级功能能胜任消息队列.任务队列等不同角色. 2.内存存储与持久化:redis中所有数据都存储在内存中.但有问题,程序退出的时候内存中的数据会丢失,不过redis提供对持久化的支持,即将内存中的数据异步写入到硬盘中,不影响提供服务. 3.redis可以为每个键设置生存时间,到期后会自动删除,这一功能让redis成为了出色的缓存系统.作为缓存系统,red

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

一.Redis概述: Redis是一个功能强大.性能高效的开源数据结构服务器,Redis最典型的应用是NoSQL.但事实上Redis除了作为NoSQL数据库使用之外,还能广泛应用消息队列,数据堆栈以及数据缓存等众多场合.Redis与Memcached相类似,都是以键值对(key-value)存放数据的,但是Redis支持的数据类型及特性远比Memcached丰富. 在缓存应用方面,Redis同样也是一个内存数据库,拥有Memcached的快速.稳定等特性,并且支持数据快照功能,开发人员可以通过配

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

前言 这次为大家简单介绍两个在WEB开发中经常使用的概念——单点登录和消息队列以及具体到J2EE中的一些实现方案.本文原创性的工作比较少,主要是一些总结概括和自己的理解. 单点登录SSO SSO的业务场景 所谓单点登录就是在一个站点登录之后可以授信给其他站点,这样就可以做到一次登录,到处操作.单点登录的实质就是安全上下文(Security Context)或凭证(Credential)在多个应用系统之间的传递或共享. 大部分的网站采用Cookie作为登录的一种简单实现方案,在同一个一级域名下面,

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

这几天的研究ssm redis 终于进入主题了,今天参考了网上一些文章搭建了一下ssm+redis整合,特别记录下来以便以后可以查询使用,有什么不足请大牛们提点 项目架构 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:/

Winform开发框架中实现多种数据库类型切换以及分拆数据库的支持 - 伍华聪

在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很方便支持多种数据库的切换,那可以为我们减少很多烦恼,同时提高系统的适应性和强壮型.还有一种情况,由于业务数据库的不断膨胀或者方便数据库的切割隔离,有时候也会把不同的业务数据库进行分拆,如权限提供数据库,客户关系管理数据库,工作流程数据库,企业营运数据库等等,因此在一个系统里面,同时使用2个或者以上的数据库的情况也是有的.针对这两种情况,本文介绍在我的Winform开

【转贴】J2EE中的13种技术规范

J2EE平台由一整套服务(Services).应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,下面对J2EE中的13种技术规范进行简单的描述(限于篇幅,这里只能进行简单的描述): 1.JDBC(Java Database Connectivity):    JDBC API为访问不同的数据库提供了一种统一的途径,象ODBC一样,JDBC对开发者屏蔽了一些细节问题,另外,JDCB对数据库的访问也具有平台无关性. 2.JNDI(Java Name and Direct

J2EE中的HttpSession

J2EE中的HttpSession总结: ①什么是session? session是服务器端技术,利用这个技术,服务器在运行时可以为每一个浏览器创建一个共享的session对象,由于 session为用户浏览器独享,所以当浏览器访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户 再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务.                    ②session是如何创建的呢? 当用户打开浏览器,访

C#中获取多种时间格式的方法

//获取日期+时间DateTime.Now.ToString();            // 2008-9-4 20:02:10DateTime.Now.ToLocalTime().ToString();        // 2008-9-4 20:12:12 //获取日期DateTime.Now.ToLongDateString().ToString();    // 2008年9月4日DateTime.Now.ToShortDateString().ToString();    // 20