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

33 篇文章 0 订阅
32 篇文章 0 订阅

一、系统参数表设计

系统参数表及其查询相应其他表并生成参数表的语句(比如查询下边的仓库表,把仓库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);              
                 }
			}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值