当前位置: 代码迷 >> Java Web开发 >> 大家的web项目里这种情况都是怎么办的
  详细解决方案

大家的web项目里这种情况都是怎么办的

热度:213   发布时间:2016-04-17 10:46:32.0
大家的web项目里这种情况都是怎么处理的
有时候仅仅为了得到外键所在表的名称字段而进行级联查询,这么做好像不是很妥当。
我不知道你们的项目中是怎么处理的,我现在的项目里是在服务器启动的时候集中访问数据库,建立好各种key为ID,value为NAME的static Map变量。
然后在这种查询的时候只管查询主表就好了,返回页面的时候用自定义的EL表达式(传ID作为参数)从Map中取得NAME输出。

大概如下:
Java code
//组织类型ID:组织类型名称    public static Map<Long, String> ORGTYPEID_ORGTYPENAME_MAP = new HashMap<Long, String>();    /**     * 服务器启动5秒后执行     * @author ztx 2010-08-04     */    public void runBySeverStart(){                log.info("--------------Start:runByServerStart()-----------------");        commonService.initOrgType();        ...        log.info("--------------End  :runByServerStart()-------------------");            }    public static String getOrgTypeNameByID(Long orgTypeID) {        if (EcardParameters.ORGTYPEID_ORGTYPENAME_MAP.containsKey(orgTypeID)) {            return EcardParameters.ORGTYPEID_ORGTYPENAME_MAP.get(orgTypeID);        } else {            return "";        }    }            <function>        <description>根据组织类型ID获取组织类型名称</description>        <name>getOrgTypeNameByID</name>        <function-class>com.htdz.eCard.common.util.ParameterUtil</function-class>        <function-signature>java.lang.String getOrgTypeNameByID(java.lang.Long)</function-signature>    </function>    ${fun:getOrgTypeNameByID(orgTypeID)}


对于数据量上限不会太大的表,这种形式还可以。但如果碰到消费表等大数据量的表的情况,如果也用这方式,似乎这些Map就很耗费堆的空间了,甚至导致内存溢出。那用什么形式来处理呢?

------解决方案--------------------
看lz是想做缓存吧,大表一般不在应用层做缓存,原因是很多数据没及时用上的,反而占了内存空间,大表用临时表,分区,索引来解决
  相关解决方案