SpringMVC封装常用的CRUD操作

Posted by     "麦子" on Tuesday, 2019年04月09日

[TOC]

目标: 主要处理单表的进行列表展示, 和 增加,删除,修改,查询等这样的操作的封装处理。对于我们用的myBiatis来处理数据库, 都是通过插件, 数据库和实体以及DAO都是自动生成的,这样的话, 我们可以发现, DAO层都是相同的方法。 同时再编写service层和controller的时候,很多的功能点都是重复的。 所以进行了封装。

主要思路: 通过泛型来控制DAO层的对应的实体类。 然后对于Service和Controller层的时候, 写成抽象类,因为通过@Autowired注册的时候, 是根据顺序来处理的,如果, 如果直接再基类中注册的话, sprng不知道你要注册的是哪一个DAO。 所以这两个类需要进行抽象话。 然后再子类中进行具体的注册处理。 当然封装的一些方法, 需要进行变动的时候,通过重写就好。 具体代码如下:

Dao

public interface SimplenessDao<K> {
	
	  int deleteByPrimaryKey(BigDecimal medId);
 
    int insert(K k);
 
    int insertSelective(K k);
 
    K selectByPrimaryKey(BigDecimal medId);
 
    int updateByPrimaryKeySelective(K k);
 
    int updateByPrimaryKey(K k);
    
    // 列表数据
    List<K> findList(Map<String,Object> map);
    
    // 列表记录 
    Integer findListCount(Map<String,Object> map);
}

Service

我这边加入了ISimplenessService, 主要是用来规范和习惯, 注入到controller的我直接用了 SimplenessServiceImpl

public interface ISimplenessService<K> {
	
	// 查询列表
	List<K> findList(Map<String,Object> paramsMap);
	
	// 查询记录
	Integer findListCount(Map<String,Object> paramsMap);
	
	// 添加和修改--这个用于ajax处理
	HttpAjaxResult  saveOrUpdate(K k,Integer id);
	
	// 查询id对应对象 
	K  findEntityByParams(Map<String,Integer> paramsMap,Class<K> clazz);
	
	// 根据id删除对象 
	HttpAjaxResult delByPrimKey(int id);
}

@SuppressWarnings("rawtypes")
public abstract class SimplenessServiceImpl<K> implements ISimplenessService<K> {
 
      public abstract SimplenessDao DaoHandler();

      @SuppressWarnings("unchecked")
      public K selectByPrimaryKey(BigDecimal medId) {

        return (K) DaoHandler().selectByPrimaryKey(medId);
      }
 
      @SuppressWarnings("unchecked")
      @Override
      public List findList(Map paramsMap) {

        return DaoHandler().findList(paramsMap);
      }

      @SuppressWarnings("unchecked")
      @Override
      public Integer findListCount(Map paramsMap) {

        return DaoHandler().findListCount(paramsMap);
      }
 
      @SuppressWarnings("unchecked")
      @Override
      public HttpAjaxResult saveOrUpdate(K k, Integer id) {
        int count = 0;
        k = this.dataSupplementHandler(k,id);
        if (id == null || id == 0) {
          count = DaoHandler().insertSelective(k);
        } else {
          count = DaoHandler().updateByPrimaryKeySelective(k);
        }
        return this.ajaxBusiness(count);
      }

      /***
       * 
      * @Title: dataSupplement 
      * @Description: TODO(这里用一句话描述这个方法的作用)  数据补充处理 
      * @param @param k    设定文件 
      * @return void    返回类型 
      * @throws
       */
      public K  dataSupplementHandler(K k,Integer id){

        return k;
      }
	
 
      @Override
      public HttpAjaxResult delByPrimKey(int id) {
        BigDecimal ids = new BigDecimal(id);
        int count = DaoHandler().deleteByPrimaryKey(ids);
        return this.ajaxBusiness(count);
      }

      /**
       * 
       * @Title: ajaxBusiness
       * @Description: TODO(这里用一句话描述这个方法的作用) ajax统一回复处理
       * @param @param count
       * @param @return 设定文件
       * @return HttpAjaxResult 返回类型
       * @throws
       */
      public HttpAjaxResult ajaxBusiness(int count) {
        HttpAjaxResult result = new HttpAjaxResult();
        if (count > 0) {
          result.setResultCode(200);
          result.setResultMsg("success");
        } else {
          result.setResultCode(400);
          result.setResultMsg("fail");
        }
        return result;
      }

      @SuppressWarnings("unchecked")
      public K findEntityByParams(Map paramsMap, Class clazz) {
        try {
          K k = null;
          if (paramsMap != null) {
            boolean flag = paramsMap.containsKey("id");
            if (flag) {
              int id = (int) paramsMap.get("id");
              if (id == 0) {
                // 创建对象。
                k = (K) clazz.newInstance();
              } else {
                BigDecimal decId = new BigDecimal(id);
                k = (K) DaoHandler().selectByPrimaryKey(decId);
              }
              return k;
            }
          }
          return k;
        } catch (Exception e) {
          e.printStackTrace();
        }
        return null;
      }
}

Controller

@SuppressWarnings("rawtypes")
public abstract class SimplenessController<K> extends BaseController{
	  
      // 外面填充
      public abstract SimplenessServiceImpl  serviceImplHandler();
      /***
       * 
      * @Title: setUpUrlPrefix 
      * @Description: TODO(这里用一句话描述这个方法的作用)  统一访问请求URL
      * @param @return    设定文件 
      * @return String    返回类型 
      * @throws
       */
      public abstract String  setUpUrlPrefix();

	
      /***
       * 
      * @Title: listView 
      * @Description: TODO(这里用一句话描述这个方法的作用)  列表展示页面 
      * @param @return    设定文件 
      * @return ModelAndView    返回类型 
      * @throws
       */
      @RequestMapping(value = "/listView")
      public  ModelAndView listView(){
        ModelAndView  modelView = this.pageForward(this.setUpUrlPrefix()+"/list"); 
        return  modelView;
      };


      /***
       * 
      * @Title: listData 
      * @Description: TODO(这里用一句话描述这个方法的作用)  ajax  list数据返回 
      * @param @param pageBean
      * @param @throws Exception    设定文件 
      * @return void    返回类型 
      * @throws
       */
      @RequestMapping(value = "/listData")
      @ResponseBody
      public void listData(PageBean pageBean,K k) throws Exception{
        Map<String, Object> map = new HashMap<String, Object>();
        map = this.addParamsBusiness(k,map);
        List dataList = serviceImplHandler().findList(map);
          int  pageCount = serviceImplHandler().findListCount(map);
          listDataResorce(map,pageBean,dataList,pageCount);
      };


      @SuppressWarnings("unchecked")
      public void  listDataResorce(Map<String, Object> map,PageBean pageBean,List dataList,int pageCount) throws Exception{
        map.put("pageBean", pageBean);
          ResPageBean resPageBean = new ResPageBean(pageBean.getsEcho(), pageCount,pageCount);
        resPageBean.setAaData(dataList);
        this.outputStr("yyyy-MM-dd HH:mm:ss", resPageBean);
      }


      /**
       * 
      * @Title: addParamsBusiness 
      * @Description: TODO(这里用一句话描述这个方法的作用)  添加查询条件处理。  
      * @param @param map
      * @param @return    设定文件 
      * @return Map<String,Object>    返回类型 
      * @throws
       */
        public Map<String, Object> addParamsBusiness(K k,Map<String, Object> map){


        return map;
      }


         // 设置这个Class类型, 用来实现增加操作问题。 (添加的时候需要创建对象用)
         public abstract Class<K> setUpClass();

        /***
         * 
        * @Title: addView 
        * @Description: TODO(这里用一句话描述这个方法的作用)      编辑和新增页面返回
        * @param @param id
        * @param @return    设定文件 
        * @return ModelAndView    返回类型 
        * @throws
         */
        @RequestMapping(value="/addOrUpdate/{id}")
      public ModelAndView addOrUpdate(@PathVariable("id") Integer id){
          Map<String, Object> map = new HashMap<String, Object>();
          map.put("id", id);
          K k = (K) serviceImplHandler().findEntityByParams(map,this.setUpClass());
        ModelAndView  modelView = this.pageForward(this.setUpUrlPrefix()+"/addOrUpdate","baseObject",k); 
        return  modelView;
        }
      /**
       * 
      * @Title: saveOrUpdate 
      * @Description: TODO(这里用一句话描述这个方法的作用)   ajax 新增和更新 
      * @param @param k
      * @param @return    设定文件 
      * @return HttpAjaxResult    返回类型 
      * @throws
       */
      @RequestMapping(value="/saveOrUpdateAjax/{id}")
      @ResponseBody
      public HttpAjaxResult saveOrUpdateAjax(K k,@PathVariable("id") Integer id){
          HttpAjaxResult ajaxResult = serviceImplHandler().saveOrUpdate(k,id);
        return  ajaxResult;
        }

        /***
         * 
        * @Title: del 
        * @Description: TODO(这里用一句话描述这个方法的作用)   ajax 删除处理 
        * @param @param id
        * @param @return    设定文件 
        * @return HttpAjaxResult    返回类型 
        * @throws
         */

        @RequestMapping(value="/del/{id}")
        @ResponseBody
      public  HttpAjaxResult del(@PathVariable("id") Integer id){
          HttpAjaxResult ajaxResult = serviceImplHandler().delByPrimKey(id);
        return  ajaxResult;
        };
}

Tools

HttpAjaxResult这个类主要用来控制AJax的返回类的处理

public class HttpAjaxResult {
      private int resultCode;
      private String resultMsg;
      public int getResultCode() {
        return resultCode;
      }
      public void setResultCode(int resultCode) {
        this.resultCode = resultCode;
      }
      public String getResultMsg() {
        return resultMsg;
      }
      public void setResultMsg(String resultMsg) {
        this.resultMsg = resultMsg;
      }
}

同时,我们再定义处理泛型的类的时候, 有时候如果为了控制对象的范围处理, 我们可以直接通过 T extends BaseObject 这样来进行更好的代码规范处理。

基础代码就如上进行处理。

「真诚赞赏,手留余香」

真诚赞赏,手留余香

使用微信扫描二维码完成支付