一,案例

1.1,图片分析

1.2,代码

1.2.1,编写加载系统参数的servlet

 public class SysInitServlet extends HttpServlet {

     public void init() throws ServletException {
         Map<String,Object> sysParam = new HashMap<String,Object>();
         Map<String,String> supType = new HashMap<String,String>();
         supType.put("1", "普通供应商");
         supType.put("2", "一级供应商");
         supType.put("3", "二级供应商");

         Map<String,String> goodsColor = new HashMap<String,String>();
         goodsColor.put("red", "红色");
         goodsColor.put("green", "绿色");
         goodsColor.put("blue", "蓝色");        

         sysParam.put("goodsColor", goodsColor);
         sysParam.put("supType", supType);
         ServletContext application =this.getServletContext();
         application.setAttribute("sysParam",sysParam);
         System.out.println("=======初始化完成,已加载数据字典数据=======");
     }
 }

1.2.2,web.xml配置servlet信息

 <servlet>
         <servlet-name>SysInitServlet</servlet-name>
         <servlet-class>cn.itcast.servlets.SysInitServlet</servlet-class>
         <load-on-startup>2</load-on-startup>
     </servlet>
     <servlet-mapping>
         <servlet-name>SysInitServlet</servlet-name>
         <url-pattern>/servlet/SysInitServlet</url-pattern>
     </servlet-mapping>

1.2.3,页面使用

 <div>
             <label for="supType">供应商类型:</label>
                 <select id="cc" class="easyui-combobox" name="supType" style="width:200px;">
                     <c:forEach items="${applicationScope.sysParam.supType}" var="supType">
                         <option value="${supType.key}">${supType.value}</option>
                     </c:forEach>
                 </select>
         </div>

二,升级用法

说明,现在就要把上面的一套用法放到spring中来用,而且还有就是后续有可能还要加进来其它的参数来。现在还不确定,所以现在就要把一个sql语句写到数据库中来。

见下面的图片的说明。

2.1,图例说明

2.2,代码

2.2.1,action类

 public class SysParamAction extends BaseAction {
     @Resource
     private SysParamService sysParamService;
     //方式一
     //insert方法  --》调用sysParamInit();
     //update方法 -->调用sysParamInit();
     //delete方法 -->调用sysParamInit();

     //方式二
     //insert方法  --》调用updateSysParam();
     //update方法 -->调用updateSysParam();
     //delete方法 -->调用updateSysParam();

     //业务类型规则 添加仓库(as   -- addStoreHouse )----》刷新参数
     //拦截器addStoreHouse--》调用sysParamInit()

     @RequestMapping("/reloadSysParam")
     @ResponseBody
     public Object reload(){
         sysParamInit();
         return null;

     }

     @PostConstruct
     private void sysParamInit(){
         // Put your code here
                 /*Map<String, Object> sysParamMap = new HashMap<String, Object>();
                 Map<String, String> supTypeMap = new HashMap<String, String>();
                 supTypeMap.put("1", "一级供应商");
                 supTypeMap.put("2", "二级供应商");
                 supTypeMap.put("3", "三级供应商");
                 sysParamMap.put("supType", supTypeMap);

                 Map<String, String> goodsColorMap = new HashMap<String, String>();
                 goodsColorMap.put("1", "红色");
                 goodsColorMap.put("2", "绿色");
                 goodsColorMap.put("3", "蓝色");
                 sysParamMap.put("goodsColor", goodsColorMap);*/

                 application.setAttribute("sysParam", sysParamService.sysParamLoad());

         System.out.println("=================系统参数初始化完成222222222====================");
     }

     @RequestMapping("/doAjax")
     @ResponseBody //如果返回json格式,需要这个注解,这里用来测试环境
     public Object doAjax(Supplier supplier){
         System.out.println("---doAjax.supplier:"+supplier);
         supplier.setSupName("supName1");
         return supplier;
     }

 }

2.2.2,SysParamService

 public interface SysParamService extends BaseService<SysParam> {
     //加载系统参数
     public Map<String, Object> sysParamLoad();
 }

2.2.3,SysParamServiceImpl

 package cn.itcast.service.impl;

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

 import javax.annotation.Resource;

 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;

 import cn.itcast.dao.SupplierMapper;
 import cn.itcast.entity.Page;
 import cn.itcast.entity.Supplier;
 import cn.itcast.entity.SysParam;
 import cn.itcast.service.SupplierService;
 import cn.itcast.service.SysParamService;

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

     //加载所有的系统参数
     @Override
     public Map<String, Object> sysParamLoad() {

         //用来存储系统参数
          Map<String, Object> sysParamMap= new HashMap<String, Object>();
          //用来存储字段类型的map
          Map<String, Object> fieldMap= null;
          List<SysParam> sysParamList = sysParamMapper.selectSysParamList(null);
          for (SysParam sysParam : sysParamList) {
              //类型为1,表示需要重新执行sql,查询其它表的数据
              if("1".equals(sysParam.getSysParamType())){
                  //获取需要执行的sql
                  String sql = sysParam.getSysParamValue();
                  System.out.println("sql:"+sql);
                  //执行sql,查询其它表的数据
                  List<SysParam> selectOtherTableList = sysParamMapper.selectOtherTable(sql);
                  //新建字段map,用来存入其它表的数据
                  fieldMap = new HashMap<String, Object>();
                  //把其它数据遍历并存放于 字段的map
                 for (SysParam sysParam2 : selectOtherTableList) {
                     fieldMap.put(sysParam2.getSysParamValue(), sysParam2.getSysParamText());
                 }
                 //把字段的map存入到系统参数的map
                  sysParamMap.put(sysParam.getSysParamField(), fieldMap);

              }else{

                 /* 如果为null,表示该字段没有存在系统参数的Map,需要新建到 字段map,先存放该字段的值对字段的map,
                  * 并把字段的map存放在系统参数map里
                 */
                  if(sysParamMap.get(sysParam.getSysParamField())==null){
                      fieldMap = new HashMap<String, Object>();
                      //先存放该字段的值到字段的map
                      fieldMap.put(sysParam.getSysParamValue(), sysParam.getSysParamText());
                      //再把字段的map存放到系统的参数map
                      sysParamMap.put(sysParam.getSysParamField(), fieldMap);
                  }else{
                      fieldMap = (Map<String, Object>) sysParamMap.get(sysParam.getSysParamField());
                      fieldMap.put(sysParam.getSysParamValue(), sysParam.getSysParamText());
                  }             

              }

         }

         return sysParamMap;
     }

 }

2.2.4,SysParamMapper

 package cn.itcast.dao;

 import cn.itcast.entity.SysParam;
 import java.util.List;
 import org.apache.ibatis.annotations.Param;

 public interface SysParamMapper extends BaseMapper<SysParam>{

     //查询所有的系统参数表的记录,包括了类型为“1”的记录
     public List<SysParam> selectSysParamList(SysParam sysParam);

     //查询其它表的数据
     public List<SysParam> selectOtherTable(String sql);

 }

2.2.5,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.itcast.dao.SysParamMapper" >
   <resultMap id="sysParamBaseResultMap" type="cn.itcast.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="selectSysParamList" parameterType="SysParam" resultMap="sysParamBaseResultMap">
       select * from sys_param
   </select>

   <select id="selectOtherTable" parameterType="string" resultMap="sysParamBaseResultMap">
   <!-- 参数为sql时的使用${value} -->
       <!-- select s.sh_id as sys_param_value,s.sh_name as sys_param_text from store_house s -->
       ${value}
   </select>

 </mapper>

注意上面的那句sql语句是在数据库里面保存的。

PostConstruct注意这个注解就是在启动的加载

在这里要注意了,假如修改了map里的数据一定要重新加载一次。
否则它还是原来启动的时候里面的数据。

启动就加载(一)----注解方式实现的。static项目启动的时候就加载进来(一般用于常用参数)的更多相关文章

  1. 启动bash shell的三种方式下,检查的启动文件

    启动bash shell的三种方式 1.登录时当做默认登录shell 2.作为非登录shell的交互式shell 3.作为运行脚本的非交互shell 一.登录shell 登录Linux系统时,bash ...

  2. java web项目启动加载顺序

    转载:https://www.cnblogs.com/writeLessDoMore/p/6935524.html web.xml加载过程(步骤):       1.启动WEB项目的时候,容器(如:T ...

  3. js异步执行 按需加载 三种方式

    js异步执行 按需加载 三种方式 第一种:函数引用 将所需加载方法放在匿名函数中传入 //第一种 函数引用 function loadScript(url,callback){ //创建一个js va ...

  4. (转)Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源

    http://www.ityouknow.com/springboot/2018/05/03/spring-boot-commandLineRunner.html 在我们实际工作中,总会遇到这样需求, ...

  5. Spring Boot 2.0(七):Spring Boot 如何解决项目启动时初始化资源

    在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资 ...

  6. Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源

    Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源 在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spri ...

  7. 详解Java Web项目启动执行顺序

    一. web.xml加载过程(步骤): 启动web项目,容器(如Tomcat.Apache)会去读取它的配置文件web.xml 中的两个节点,context-param和listener. 紧接着,容 ...

  8. JavaWeb项目启动过程与ServletContext

    ServletContext的官方名称叫Servlet上下文,服务器会为每一个工程创建一个对象,这个对象就是ServletContext.一个项目只有一个ServletContext对象,工程内的所有 ...

  9. Spring Boot 如何解决项目启动时初始化资源

    在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资 ...

随机推荐

  1. c语言中的register int

    register int a=1; 明确声明必须要把变量存放在寄存器中,直到变量消失. 一般是默认register,大多数的情况下是不用写register

  2. chrome无法登陆账号,显示操作超时的解决方案

    起因 今天重装了下windows操作系统,准备登陆chrome浏览器,以同步各种插件(你懂的),结果是...无法登陆账号,显示操作超时,真是无语了. 碰到了这个问题第一个直觉是:FQ.突然想到如果修改 ...

  3. 【css3】旋转倒计时

    很多答题的H5界面上有旋转倒计时的效果,一个不断旋转减少的动画,类似于下图的这样. 今天研究了下,可以通过border旋转得到.一般我们可以通过border得到一个四段圆. See the Pen c ...

  4. 在CentOS 7中安装Jetty服务器

    Jetty 是一款纯Java的HTTP (Web) 服务器和Java Servlet容器. 通常在更大的网络框架中,Jetty经常用于设备间的通信,而其他Web服务器通常给"人类" ...

  5. js分页功能实现

    实现一个js的分页并在弹出框中显示 1.分页插件使用:bootstarp-paginator.js,需要先引入bootstarp.js和jquery.js等: !function($){"u ...

  6. esxi 改变虚拟机磁盘格式为精简存储

    最近在部署虚拟机,导入几个之前保存的ovf模板,发现存储已经被耗费的差不多了.检查了下磁盘存储格式 存储类型是 后置备延迟置零 占用空间 简单了解下 三种存储类型 1.厚置备延迟置零: 默认的创建格式 ...

  7. 如何在CentOS 7上部署Google BBR【搬运、机翻】

    如何在CentOS 7上部署Google BBR 本文章搬运自 https://www.vultr.com/docs/how-to-deploy-google-bbr-on-centos-7 [注:文 ...

  8. 第二十二章 Django会话与表单验证

    第二十二章 Django会话与表单验证 第一课 模板回顾 1.基本操作 def func(req): return render(req,'index.html',{'val':[1,2,3...]} ...

  9. qt 字符数组如何转换字符串?

    char 字符数组如何转换成 QString? char source{1024} = {0}; QString des = QString::fromLocal8Bit(source);

  10. NJU 1010 Air

    思路:把那张图打表(吐血...),然后就按照规则输出就行. AC代码 #include <cstdio> #include <cmath> #include <cctyp ...