您的位置:首页 > 其它

系统参数的设计,通用方法提取,页面处理map字符串并显示系统参数(增强版)

2016-05-14 16:38 471 查看
一、系统参数表设计

系统参数表及其查询相应其他表并生成参数表的语句(比如查询下边的仓库表,把仓库id和name也对应的系统启动时放到servletApplication中)

/*====================================系统参数表==============================*/
/*==============================================================*/
/* Table: sys_param                                             */
/*==============================================================*/
create table sys_param
(
sys_param_id         bigint  auto_increment,
sys_param_field      varchar(50),
sys_param_value      varchar(500),
sys_param_text       varchar(50),
sys_param_type       varchar(2),
primary key (sys_param_id)
);
insert into sys_param(sys_param_field,sys_param_value,sys_param_type) values('shId','select s.sh_id as sys_param_value,s.sh_name as sys_param_text from store_house s','1');
仓库表(示例第三方表的部分字段怎么加入到系统参数,而不用全部写入字典表)

/*==============================================================*/
/* Table: store_house                                           */
/*
sh_id                仓库编号,
sh_name              仓库名称,
sh_responsible       责任人,
sh_phone             联系电话,
sh_address           联系地址,
sh_type              仓库类型,
sh_remark            备注,
*/
/*==============================================================*/
create table store_house
(
sh_id                varchar(10) not null,
sh_name              varchar(20),
sh_responsible       varchar(20),
sh_phone             varchar(11),
sh_address           varchar(50),
sh_type              varchar(10),
sh_remark            varchar(100),
primary key (sh_id)
);
二、系统参数即字典表实体和Dao及对应的mybatis的xml

SysParam.java

package cn.buaa.scm.entity;

import java.io.Serializable;

public class SysParam implements Serializable {
/**
*
*/
private static final long serialVersionUID = -2768672857058941094L;

@Override
public String toString() {
return "SysParam [sysParamId=" + sysParamId + ", sysParamField=" + sysParamField + ", sysParamValue="
+ sysParamValue + ", sysParamText=" + sysParamText + ", sysParamType=" + sysParamType + "]";
}

private Long sysParamId;

private String sysParamField;

private String sysParamValue;

private String sysParamText;

private String sysParamType;

public Long getSysParamId() {
return sysParamId;
}

public void setSysParamId(Long sysParamId) {
this.sysParamId = sysParamId;
}

public String getSysParamField() {
return sysParamField;
}

public void setSysParamField(String sysParamField) {
this.sysParamField = sysParamField;
}

public String getSysParamValue() {
return sysParamValue;
}

public void setSysParamValue(String sysParamValue) {
this.sysParamValue = sysParamValue;
}

public String getSysParamText() {
return sysParamText;
}

public void setSysParamText(String sysParamText) {
this.sysParamText = sysParamText;
}

public String getSysParamType() {
return sysParamType;
}

public void setSysParamType(String sysParamType) {
this.sysParamType = sysParamType;
}
}


SysParamMapper.java

package cn.buaa.scm.dao;

import java.util.List;

import cn.buaa.scm.entity.SysParam;

public interface SysParamMapper extends BaseMapper<SysParam> {
public List<SysParam> selectList(String type);
public List<SysParam> selectOthreTable(String sql);

}


SysParamMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.buaa.scm.dao.SysParamMapper" >
<resultMap id="sysParamResultMap" type="cn.buaa.scm.entity.SysParam" >
<id column="sys_param_id" property="sysParamId" jdbcType="BIGINT" />
<result column="sys_param_field" property="sysParamField" jdbcType="VARCHAR" />
<result column="sys_param_value" property="sysParamValue" jdbcType="VARCHAR" />
<result column="sys_param_text" property="sysParamText" jdbcType="VARCHAR" />
<result column="sys_param_type" property="sysParamType" jdbcType="VARCHAR" />
</resultMap>
<!-- 获取整个表的数据,用来启动时加载系统参数 -->
<select id="selectList" parameterType="string" resultMap="sysParamResultMap">
select * from sys_param
</select>

<!-- 查询其它表的数据,使用${value}格式,允许使用sql语句作为参数执行 -->
<select id="selectOthreTable" parameterType="string" resultMap="sysParamResultMap">
${value}
</select>

</mapper>


三、service及action层

SysParamServiceImpl.java (这一层主要抽取了系统参数的处理方法,以后直接用即可)

package cn.buaa.scm.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;

import cn.buaa.scm.entity.SysParam;
import cn.buaa.scm.service.SysParamService;

@Service("sysParamService")
public class SysParamServiceImpl extends BaseServiceImpl<SysParam> implements SysParamService {

@Override
public Map<String, Object> selectList() {
// TODO Auto-generated method stub
List<SysParam> sysParams=sysParamMapper.selectList("");
//系统参数Map,用来存放所有字段的相关参数信息
Map<String, Object> sysParamMap =new HashMap<String, Object>();

Map<String, Object> fieldMap=null;

for (SysParam sysParam : sysParams) {
if("1".equals(sysParam.getSysParamType())){
//获取需要执行SQL,用来查询其它表
String sql = sysParam.getSysParamValue();
System.out.println("========="+sql);
//执行查询,并把结果存在List中,元素为系统参数类型的实体
List<SysParam> otherList= sysParamMapper.selectOthreTable(sql);
fieldMap = new HashMap<String, Object>();
//遍历,并把数据存到字段MAP
for (SysParam otherSysParam : otherList) {
fieldMap.put(otherSysParam.getSysParamValue(), otherSysParam.getSysParamText());
}
//把字段相关Map存放在系统参数Map,用原系统参数表查询的sysParam对象的sysParamField作为kdy
sysParamMap.put(sysParam.getSysParamField(), fieldMap);

}else{
//从存放系统参数的map获取字段的map
if(sysParamMap.get(sysParam.getSysParamField())==null){
fieldMap = new HashMap<String, Object>();
fieldMap.put(sysParam.getSysParamValue(), sysParam.getSysParamText());
sysParamMap.put(sysParam.getSysParamField(), fieldMap);
}else{
fieldMap = (Map<String, Object>) sysParamMap.get(sysParam.getSysParamField());
fieldMap.put(sysParam.getSysParamValue(), sysParam.getSysParamText());
}
}

}
//System.out.println(sys);
return sysParamMap;
}

}


SysParamAction.java

package cn.buaa.scm.action;

import java.util.Map;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import cn.buaa.scm.entity.SysParam;
import cn.buaa.scm.service.SysParamService;

@Controller
@RequestMapping("/sysParam")
public class SysParamAction extends BaseAction {
@Resource
private SysParamService sysParamService;

@RequestMapping(value="/insert")
@ResponseBody //如果返回json格式,需要这个注解,这里用来测试环境
public Object insert(SysParam sysParam){
//添加到数据库的系统参数表

reloadSysParam();

return null;
}

//后边可以用来重新加载参数
@RequestMapping(value="/reload")
@ResponseBody
public void reloadSysParam() {
loadSysParam();
}

//系统启动时加载参数
@PostConstruct
public void initSysParam(){
loadSysParam();
}

//用来加载系统参数
public void loadSysParam(){
Map<String, Object> sysParamMap = sysParamService.selectList();
application.setAttribute("sysParam", sysParamMap);
System.out.println("===================系统参数加载成功2=====================");
}

}


四、页面粗处理传过去的在application里的map值,并根据key值取出来显示在界面

抽取的返回系统参数的方法

common.js

function valueToText(str, value) {
//类似下面的这种,从application中拿出系统参数的map{}
// var str = "${applicationScope.sysParam.supType}";
//alert(str);
str = str.substring(1, str.length - 1);
//alert(str);
var array = str.split(",");
for ( var i = 0; i < array.length; i++) {
//alert(array[i]);
var array2 = array[i].split("=");
//alert("array2[0]" + array2[0]);
//alert("value" + value);
if ($.trim(array2[0]) == $.trim(value)) {
return array2[1];
}
}
return "类型没有定义";
}


easyUI中这样用
{
field : 'goodsColor',
title : '颜色',
width : 100,
formatter: function(value,row,index){
var str = "${applicationScope.sysParam.goodsColor}";
return valueToText(str,value);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: