SSM框架中mybatis采用动态传入表名的方法
最近公司项目用到了SSM框架中mybatis部分需要动态传入表名进行查询,本人也刚接触不久,如有错误,还望指出。
表名字段前半部分是一样的,后面跟上年月来区分,例如 t_yhdr_xn_jcsk_data201801
前端部分采用jQuery datatables插件,通过ajax传入当前的年月,参数用datetime表示:
$.ajax({ type : "post", async : false, url : "jczd/getRealTimePollute.do", data : "datetime=201801", dataType : "json", success : function (result) { var returnData = {}; returnData.data = result.params.jcskDataEntityList; callback(returnData); }, error : function (errorMsg) { idata = null; } });Controller:
@RequestMapping(value = "/getRealTimePollute", method = RequestMethod.POST) @ResponseBody public JsonResult getRealTimePollute(String datetime) { JsonResult jsonResult = JsonResult.getInstance(); List<JcskDataEntity> jcskDataEntityList = null; logger.debug("getRealTimePollute------------------------------"); try { jcskDataEntityList = jczdService.getRealTimePollute(datetime); jsonResult.setSuccess(true); jsonResult.addParam("jcskDataEntityList", jcskDataEntityList); } catch (Exception e) { jsonResult.setSuccess(false); } return jsonResult; }Service:
将表名拼接好之后通过 Map的方式传入
/** * 根据当前时间查询实时污染分布 * @param datetime * @return * @throws Exception */ public List<JcskDataEntity> getRealTimePollute(String datetime) throws Exception { logger.debug("getRealTimePollute:" + datetime); Map<String, String> map = new HashMap<>(); map.put("tableName", "t_yhdr_xn_bu_jcsk_data".concat(datetime)); return (List<JcskDataEntity>) dao.findForList("com.yhdr.xn.JczdEntityMapper.selectRealTimePollute", map); }Mybatis:
需要加上 statementType="STATEMENT"
<select id="selectRealTimePollute" parameterType="java.util.Map" statementType="STATEMENT" resultMap="realTimePolluteResultMap"> SELECT t2.ZD_NAME, t1.DATETIME, t1.AQI, t1.SO2, t1.NO2, t1.CO, t1.O3, t1.PM25, t1.PM10 FROM ${tableName} t1 JOIN t_yhdr_xn_bu_jczd t2 ON t1.ZD_ID = t2.ZD_ID ORDER BY DATETIME DESC </select>动态表名传入通过 ${ 表名 }来实现:
${tableName}
最终实现查询结果: