目标: 主要处理单表的进行列表展示, 和 增加,删除,修改,查询等这样的操作的封装处理。
对于我们用的myBiatis来处理数据库, 都是通过插件, 数据库和实体以及DAO都是自动生成的,这样的话, 我们可以发现, DAO层都是相同的方法。
同时再编写service层和controller的时候,很多的功能点都是重复的。 所以进行了封装。
主要思路: 通过泛型来控制DAO层的对应的实体类。 然后对于Service和Controller层的时候, 写成抽象类,因为通过@Autowired注册的时候, 是根据顺序来处理的,
如果, 如果直接再基类中注册的话, sprng不知道你要注册的是哪一个DAO。 所以这两个类需要进行抽象话。 然后再子类中进行具体的注册处理。 当然
封装的一些方法, 需要进行变动的时候,通过重写就好。 具体代码如下:
常用DAO形式如下:(我这边是工具生成模式)
public interface SimplenessDao {
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 findList(Map map);
// 列表记录
Integer findListCount(Map map);
}
Service类, 我这边加入了ISimplenessService, 主要是用来规范和习惯, 注入到controller的我直接用了 SimplenessServiceImpl
public interface ISimplenessService {
// 查询列表
List findList(Map paramsMap);
// 查询记录
Integer findListCount(Map paramsMap);
// 添加和修改--这个用于ajax处理
HttpAjaxResult saveOrUpdate(K k,Integer id);
// 查询id对应对象
K findEntityByParams(Map paramsMap,Class clazz);
// 根据id删除对象
HttpAjaxResult delByPrimKey(int id);
}
@SuppressWarnings("rawtypes")
public abstract class SimplenessServiceImpl implements ISimplenessService {
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;
}
}
@SuppressWarnings("rawtypes")
public abstract class SimplenessController 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 map = new HashMap();
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 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 返回类型
* @throws
*/
public Map addParamsBusiness(K k,Map map){
return map;
}
// 设置这个Class类型, 用来实现增加操作问题。 (添加的时候需要创建对象用)
public abstract Class 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 map = new HashMap();
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;
};
}
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;
}
}
基础代码就如上进行处理。