开发工具与关键技术:Eclipse 10、java
作者:梁添荣
撰写时间:2020-05-28
在ssm项目中,多个controller会有很多相同的代码或使用相同的功能,例如增删查改,这时我们就可以编写一个BaseController了,然后就继承该类,需要时再使用里面的方法。BaseController代码如下:
package com.gx.commom; import java.util.List;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSON;
import com.gx.exception.MessageException; import com.gx.util.JsonUtil;
import com.gx.vo.Message;
/** * * @author TIAN * * @param 该类型决定该类的方法形参Model类型,但不决定方法里的List类型,为什么?? */
public abstract class BaseController{
//==========ProjectUtil拓展功能↓
/**==说明:
*
* 1.该功能是基于实现类BaseServiceImpl完成,
*
* 2.用到的自己的工具类JsonUtil;
* 和JSON.toJSONString,是import com.alibaba.fastjson.JSON;请配置在Maven的pom.xml配置
*
* 3.继承该类后,要使用某一功能时,在子类里按:shift+alt+s键,
* 选择Override..开头的选项,再选择对应的方法提取出来,提取出来后,
* 请在方法里的super.某功能前写:bean.set("service的bean");
*/
//==用ThreadLocal,防止全局变量引起的并发问题(https://blog.csdn.net/rugaxm/article/details/8551905)
protected ThreadLocal bean = new ThreadLocal();
protected final String AJSON_UTF8="application/json;charset=UTF-8";
//==获取bean private ThreadLocal> threadLocalBaseService = new ThreadLocal>(); private BaseService base; private void getBean() { if(bean.get()==null) { throw new MessageException(403, "非法访问"); } WebApplicationContext act = ContextLoader.getCurrentWebApplicationContext(); base =(BaseService) act.getBean(bean.get()); threadLocalBaseService.set(base); }
/**单表分页查询/模糊查询,like不为空或不是null,则是模糊查询,若数据有date类型,则yyyy-MM-dd格式*/
@ResponseBody
@RequestMapping(value = "/selectSingleTableOrLike",produces=AJSON_UTF8)
protected Object selectSingleTableOrLike(Integer curPage,Integer pageSize,String like) { getBean();
List list=threadLocalBaseService.get().selectSingleTableOrLike((curPage-1)*pageSize, pageSize, like); int count=threadLocalBaseService.get().totalRowsSingleTable(like); return JsonUtil.toJsonYmd(curPage, count, list, true);
}
/**单表分页查询/模糊查询,like不为空或不是null,则是模糊查询,若数据有date类型,则yyyy-MM-dd HH:mm:ss格式*/
@ResponseBody
@RequestMapping(value = "/selectSingleTableOrLikeByHms",produces=AJSON_UTF8)
protected Object selectSingleTableOrLikeByHms(Integer curPage,Integer pageSize,String like) { getBean();
List list=threadLocalBaseService.get().selectSingleTableOrLike((curPage-1)*pageSize, pageSize, like); int count=threadLocalBaseService.get().totalRowsSingleTable(like); return JsonUtil.toJsonHms(curPage, count, list, true);
}
/**连表分页查询/模糊查询,,当like不为空或不是null,则是模糊查询,若数据有date类型,则yyyy-MM-dd格式*/
@ResponseBody
@RequestMapping(value = "/selectMultilistOrLike",produces=AJSON_UTF8)
protected Object selectMultilistOrLike(Integer curPage,Integer pageSize,String like) { getBean();
List list=threadLocalBaseService.get().selectMultilistOrLike((curPage-1)*pageSize, pageSize, like);
int count=threadLocalBaseService.get().totalRowsMultilist(like); return JsonUtil.toJsonYmd(curPage, count, list, true);
}
/**连表分页查询/模糊查询,,当like不为空或不是null,则是模糊查询,若数据有date类型,则yyyy-MM-dd HH:mm:ss格式*/
@ResponseBody
@RequestMapping(value = "/selectMultilistOrLikeByHms",produces=AJSON_UTF8)
protected Object selectMultilistOrLikeByHms(Integer curPage,Integer pageSize,String like) { getBean();
List list=threadLocalBaseService.get().selectMultilistOrLike((curPage-1)*pageSize, pageSize, like);
int count=threadLocalBaseService.get().totalRowsMultilist(like); return JsonUtil.toJsonHms(curPage, count, list, true);
}
/**新增,若实体类record中属性的值null,则该属性会插入数据库*/
@ResponseBody
@RequestMapping(value = "/insert",produces=AJSON_UTF8)
protected Object insert(Model record){ getBean();
int rs=threadLocalBaseService.get().insert(record);
Message message=rs>0?new Message(200, "成功"):new Message(500,"服务器异常,请稍后重试");
return JSON.toJSONString(message);
}
/**新增,若实体类record中属性的值null,则该属性不会插入数据库*/
@ResponseBody
@RequestMapping(value = "/insertSelective",produces=AJSON_UTF8)
protected Object insertSelective(Model record){ getBean();
int rs=threadLocalBaseService.get().insertSelective(record);
Message message=rs>0?new Message(200, "成功"):new Message(500,"服务器异常,请稍后重试");
return JSON.toJSONString(message);
}
/**新增兼文件上传,若实体类record中属性的值null,则该属性会插入数据库*/
//required:默认true,设为true时且mFile为null时会抛出异常:The current request is not a multipart request] with root cause;
//并且,如果controller重写该方法,形参上也要添加@RequestParam(value="upFile",required=false),否则无法获取照片
@ResponseBody
@RequestMapping(value = "/insertAndFile",produces=AJSON_UTF8)
protected Object insertAndFile(Model record,@RequestParam(value="upFile",required=false)MultipartFile mFile){ getBean();
int rs=threadLocalBaseService.get().insert(record);
Message message=rs>0?new Message(200, "成功"):new Message(500,"服务器异常,请稍后重试");
return JSON.toJSONString(message);
}
/**新增兼文件上传,若实体类record中属性的值null,则该属性不会插入数据库*/
//required:默认true,设为true时且mFile为null时会抛出异常:The current request is not a multipart request] with root cause;
//并且,如果controller重写该方法,形参上也要添加@RequestParam(value="upFile",required=false),否则无法获取照片
@ResponseBody
@RequestMapping(value = "/insertSelectiveAndFile",produces=AJSON_UTF8)
protected Object insertSelectiveAndFile(Model record,@RequestParam(value="upFile",required=false)MultipartFile mFile){ getBean();
int rs=threadLocalBaseService.get().insertSelective(record);
Message message=rs>0?new Message(200, "成功"):new Message(500,"服务器异常,请稍后重试");
return JSON.toJSONString(message);
}
/**修改,若实体类record中属性的值null,则该属性会插入数据库*/
@ResponseBody
@RequestMapping(value = "/update",produces=AJSON_UTF8)
protected Object update(Model record,@RequestParam(value="upFile",required=false)MultipartFile mFile){ getBean();
int rs=threadLocalBaseService.get().updateByPrimaryKey(record);
Message message=rs>0?new Message(200, "成功"):new Message(500,"服务器异常,请稍后重试");
return JSON.toJSONString(message);
}
/**修改,若实体类record中属性的值null,则该属性不会插入数据库*/
@ResponseBody
@RequestMapping(value = "/updateSelective",produces=AJSON_UTF8)
protected Object updateSelective(Model record,@RequestParam(value="upFile",required=false)MultipartFile mFile){ getBean();
int rs=threadLocalBaseService.get().updateByPrimaryKeySelective(record);
Message message=rs>0?new Message(200, "成功"):new Message(500,"服务器异常,请稍后重试");
return JSON.toJSONString(message);
}
/**根据id删除*/
@ResponseBody
@RequestMapping(value = "/delete",produces=AJSON_UTF8)
protected Object delete(Integer id){ getBean();
int rs=threadLocalBaseService.get().deleteByKey(id);
Message message=rs>0?new Message(200, "成功"):new Message(500,"服务器异常,请稍后重试");
return JSON.toJSONString(message);
}
/**根据id查询*/
@ResponseBody
@RequestMapping(value = "/selectByKey",produces=AJSON_UTF8)
protected Object selectByKey(Integer id) { getBean();
return JSON.toJSONString(threadLocalBaseService.get().selectByKey(id));
}
/**绑定下拉框*/
@ResponseBody
@RequestMapping(value = "/selectOption",produces=AJSON_UTF8)
protected Object selectOption() { getBean();
return JSON.toJSONString(threadLocalBaseService.get().selectOption());
}
/**条件查找用户*/
@ResponseBody
@RequestMapping(value = "/selectByName",produces=AJSON_UTF8)
protected Object selectByName(String name) { getBean();
return JSON.toJSONString(threadLocalBaseService.get().selectByName(name));
}
/**单表查询所有*/
@ResponseBody
@RequestMapping(value = "/selectSingleTable",produces=AJSON_UTF8)
protected Object selectSingleTable(String name) { getBean();
return JSON.toJSONString(threadLocalBaseService.get().selectSingleTable());
}
//==========ProjectUtil拓展功能↑
}