基于SpringMVC封装常用的CRUD操作
来源:互联网 发布:企查查的数据怎么来的 编辑:程序博客网 时间:2024/06/05 20:06
目标: 主要处理单表的进行列表展示, 和 增加,删除,修改,查询等这样的操作的封装处理。
对于我们用的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")@Overridepublic List findList(Map paramsMap) {return DaoHandler().findList(paramsMap);}@SuppressWarnings("unchecked")@Overridepublic Integer findListCount(Map paramsMap) {return DaoHandler().findListCount(paramsMap);}@SuppressWarnings("unchecked")@Overridepublic 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;}@Overridepublic 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")@ResponseBodypublic 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}")@ResponseBodypublic 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}") @ResponseBodypublic HttpAjaxResult del(@PathVariable("id") Integer id){ HttpAjaxResult ajaxResult = serviceImplHandler().delByPrimKey(id);return ajaxResult; };}
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 这样来进行更好的代码规范处理。
基础代码就如上进行处理。
0 0
- 基于SpringMVC封装常用的CRUD操作
- 封装jdbc的crud操作
- Mybatis的CRUD操作(基于xml)
- Mybatis的CRUD操作(基于注解)
- C#常用的CRUD操作实现原理
- Lucene的常用操作详解,crud
- 基于maven的springmvc+mybatis的web页面的CRUD
- SpringMVC 学习笔记(五) 基于RESTful的CRUD
- SpringMVC 学习笔记(五) 基于RESTful的CRUD
- Android数据库CRUD操作的封装与实现
- spring MongoDB 集成crud操作(简单封装)
- spring MongoDB 集成crud操作(简单封装)
- springmvc Rest 风格的 CRUD
- 学习SpringMVC(十五)之CRUD操作
- dom的crud操作
- mybatis的CRUD操作
- SESSION的CRUD操作
- oracle的crud操作
- 封装继承txt
- 图片抖动的效果(修改后)
- 揭开Socket编程的面纱
- 稀疏编码器(Sparse Encoder)
- 把字符串转换成整数
- 基于SpringMVC封装常用的CRUD操作
- 点赞 数据库设计
- 正则表达式
- react native 使用fetch进行网络请求(https),解决SSLHandshake问题,以及怎样进行二次封装
- Google开发者大会给我们带来了什么?
- otter进行数据同步
- 列表视图(ListView)
- SeekBar+ImageView实现图像动态变化
- 浅谈spring4泛型依赖注入