SpringMVC를 기반으로 일반적인 CRUD 캡슐화 작업
8371 단어 분산 학습
목표: 주요 처리 리스트의 목록 전시, 증가, 삭제, 수정, 조회 등 조작의 봉인 처리.
우리가 사용하는 myBiatis로 데이터베이스를 처리하는 것은 모두 플러그인을 통해 데이터베이스와 실체, 그리고 DAO가 자동으로 생성된 것이다. 그러면 우리는 DAO층이 모두 같은 방법이라는 것을 알 수 있다.
서비스 층과 컨트롤러를 동시에 재편성할 때 많은 기능점이 중복된다.포장을 했습니다.
주요 사고방식: 범주형을 통해DAO층에 대응하는 실체류를 제어한다.그리고 서비스와 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);
}
서비스 클래스, 저는 ISimpleness 서비스에 가입했습니다. 주로 규범과 습관에 사용되고 controller에 주입된 저는 Simpleness 서비스 Impl을 직접 사용했습니다.
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;
}
}
controller 클래스 코드는 다음과 같습니다
@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;
};
}
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를 통해 더 좋은 코드 규범 처리를 할 수 있습니다.
기본 코드는 위에서 처리한다.