SpringMVC与Mybatis集合实现调用存储过程、事务控制实例
在SSM框架中经常会用到调用数据库中的存储过程、以及事务控制,下面以保存某单据为例,介绍一下:
1、Oracle中存储过程代码如下(主要逻辑将单据编码自动加1,并将该单据编码返回):
CREATEORREPLACEPROCEDURE"UPDATE_DJBHZT"(p_GSIDinvarchar2,p_TBLNAMEinvarchar2, NewRecNooutNumber)as begin updateBHDJsetBHDJ02=BHDJ02+1whereGSXX01=p_GSIDandBHDJ01=p_TBLNAME; ifsql%rowcount=0then insertintoBHDJ(GSXX01,BHDJ01,BHDJ02)values(p_GSID,p_TBLNAME,1); endif; selectBHDJ02intoNewRecNofromBHDJwhereGSXX01=p_GSIDandBHDJ01=p_TBLNAME; end;
2、Mybatis中代码如下:
<selectid="update_djbhzt"parameterType="java.util.Map"statementType="CALLABLE">
<![CDATA[
{callUPDATE_DJBHZT(#{p_GSID,mode=IN,jdbcType=VARCHAR},#{p_TBLNAME,mode=IN,jdbcType=VARCHAR},#{NewRecNo,mode=OUT,jdbcType=BIGINT})}
]]>
</select>
3、Dao层代码如下:
packagecom.pcmall.dao.sale.stock;
importjava.util.List;
importjava.util.Map;
importcom.github.miemiedev.mybatis.paginator.domain.PageBounds;
importcom.pcmall.dao.common.BaseMapper;
importcom.pcmall.domain.sale.stock.Zcd;
publicinterfaceZcdMapperextendsBaseMapper<Zcd>{
voidupdate_djbhzt(Map<String,Object>map);
}
4、Service层代码如下:
接口:
packagecom.pcmall.service.sale.stock;
importjava.util.List;
importcom.github.miemiedev.mybatis.paginator.domain.PageBounds;
importcom.pcmall.domain.sale.order.HssnCmmx;
importcom.pcmall.domain.sale.stock.Zcd;
importcom.pcmall.domain.sale.stock.Zcditem;
importcom.pcmall.domain.sale.user.User;
importcom.pcmall.domain.vo.ResponseVO;
importcom.pcmall.service.common.IBaseService;
publicinterfaceIZcdServiceextendsIBaseService<Zcd>{
LonggetZcdNo(Stringgsxx01,Stringtablename);
ResponseVOsaveZcd(Zcdzcd,Useruser)throwsException;
}
实现类:
packagecom.pcmall.service.sale.stock.impl;
importjava.text.SimpleDateFormat;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importjavax.annotation.Resource;
importorg.apache.axis.holders.SchemaHolder;
importorg.apache.commons.collections.CollectionUtils;
importorg.springframework.stereotype.Service;
importorg.springframework.transaction.annotation.Transactional;
importcom.github.miemiedev.mybatis.paginator.domain.PageBounds;
importcom.google.common.collect.Collections2;
importcom.pcmall.common.utils.DateUtils;
importcom.pcmall.dao.sale.stock.ZcdMapper;
importcom.pcmall.dao.sale.stock.ZcditemMapper;
importcom.pcmall.domain.sale.order.HssnCmmx;
importcom.pcmall.domain.sale.promotion.HsCxlx;
importcom.pcmall.domain.sale.stock.Zcd;
importcom.pcmall.domain.sale.stock.Zcditem;
importcom.pcmall.domain.sale.stock.bo.CkspBO;
importcom.pcmall.domain.sale.user.User;
importcom.pcmall.domain.vo.ResponseVO;
importcom.pcmall.service.common.AbstractServiceImpl;
importcom.pcmall.service.sale.order.IOrderService;
importcom.pcmall.service.sale.stock.IStockService;
importcom.pcmall.service.sale.stock.IZcdService;
@Service
publicclassZcdServiceImplextendsAbstractServiceImpl<Zcd>implementsIZcdService{
@Resource
privateZcdMapperzcdMapper;
@Resource
privateZcditemMapperzcditemMapper;
@Resource
privateIStockServicestockServiceImpl;
@Transactional(rollbackFor=Exception.class)
@Override
publicResponseVOsaveZcd(Zcdzcd,Useruser)throwsException{
ResponseVOresponseVO=newResponseVO();
Longzcd01=getZcdNo(zcd.getGsxx01(),"ZCD");
zcd.setZcd01(zcd01);
zcd.setZcd05(user.getRyxx().getRyxx02());
zcd.setZcd06(newDate());
DatenowTime=newDate();
SimpleDateFormatsdf=newSimpleDateFormat("hhmmssms");
zcd.setTime01(sdf.format(nowTime));
for(Zcditemzcditem:zcd.getZcditem()){
zcditem.setZcd01(zcd01);
zcditemMapper.insertSelective(zcditem);
}
zcdMapper.insertSelective(zcd);
responseVO.setData(zcd);
returnresponseVO;
}
@Override
publicLonggetZcdNo(Stringgsxx01,Stringtablename){
Map<String,Object>map=newHashMap<String,Object>();
map.put("p_GSID",gsxx01);
map.put("p_TBLNAME",tablename);
zcdMapper.update_djbhzt(map);
LongNewRecNo=(Long)map.get("NewRecNo");
returnNewRecNo;
}
}
5、Control层代码如下:
packagecom.pcmall.controller.stock.zcd;
importjava.util.List;
importjavax.annotation.Resource;
importjavax.servlet.http.HttpServletRequest;
importorg.apache.commons.collections.CollectionUtils;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestBody;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestParam;
importorg.springframework.web.bind.annotation.ResponseBody;
importcom.github.miemiedev.mybatis.paginator.domain.PageBounds;
importcom.pcmall.common.base.BaseController;
importcom.pcmall.domain.sale.stock.Zcd;
importcom.pcmall.domain.sale.stock.Zcditem;
importcom.pcmall.domain.sale.stock.bo.CkspDetailBO;
importcom.pcmall.domain.sale.stock.bo.ZcdBO;
importcom.pcmall.domain.sale.system.Gzzqx;
importcom.pcmall.domain.sale.system.GzzqxKey;
importcom.pcmall.domain.sale.system.Ryxx;
importcom.pcmall.domain.sale.user.Czy;
importcom.pcmall.domain.sale.user.User;
importcom.pcmall.domain.vo.ResponseVO;
importcom.pcmall.service.sale.stock.IStockService;
importcom.pcmall.service.sale.stock.IZcdService;
importcom.pcmall.service.sale.system.IGzzqxService;
@Controller
@RequestMapping("/stock/zcd")
publicclassZCDControllerextendsBaseController{
privatestaticLoggerlogger=LoggerFactory.getLogger(ZCDController.class);
@Resource
privateIZcdServicezcdServiceImpl;
@Resource
privateIStockServicestockServiceImpl;
@Resource
privateIGzzqxServicegzzqxServiceImpl;
@RequestMapping("/saveZcd")
@ResponseBody
publicResponseVOsaveZcd(HttpServletRequestrequest,@RequestBodyZcdzcd){
ResponseVOresponseVO=newResponseVO();
try{
responseVO=zcdServiceImpl.saveZcd(zcd,getLoginUser());
responseVO.setSuccess(true);
}
catch(Exceptione){
logger.error("",e);
responseVO.setSuccess(false);
responseVO.setErrorMsg(!"".equals(e.getMessage())?e
.getMessage():"后台异常");
}
returnresponseVO;
}
}
6、前端js层代码如下:
functionsave(){
$("#save").addClass("disabled");
if($("#selSHCK").val()==""){
layer.msg('请填写收货仓库',{
icon:5
});
$("#save").removeClass("disabled");
return;
}
if($("#selSHCK").val()==$("#selFHCK").val()){
layer.msg('发货仓库与收货仓库不能一样',{
icon:5
});
$("#save").removeClass("disabled");
return;
}
varparam={};
param.bm01=$("#selBm").attr("valuea");
param.zcd02=$("#selFHCK").attr("valuea");
param.zcd03=$("#selSHCK").attr("valuea");
param.zcd04=$("#zcd04").val();
param.gsxx01=$("#gsxx01").val();
varzcditemAry=[];
varflag=0;
$("#tbody1").find("tr").each(function(){
varzcditem={};
vararrtd=$(this).children();
zcditem.spxx01=$.trim(arrtd.eq(0).text());
zcditem.wldw01=$.trim(arrtd.eq(6).text());
zcditem.zcdi01=$.trim(arrtd.eq(7).text());
if($.trim(arrtd.eq(2).children(".zcdi03").val())==""){
/*layer.msg('请输入转仓数量',{
icon:5
});
$("#save").removeClass("disabled");*/
flag=1;
return;
}
zcditem.zcdi02=$.trim(arrtd.eq(2).children(".zcdi03").val());
zcditem.zcdi03=$.trim(arrtd.eq(2).children(".zcdi03").val());
zcditem.zcdi05=$.trim(arrtd.eq(8).text());
zcditem.zcdi06=$.trim(arrtd.eq(4).children(".zcdi06").val());
zcditem.gsxx01=$("#gsxx01").val();
zcditem.zcdi07=$.trim(arrtd.eq(9).text());
zcditemAry.push(zcditem);
})
param.zcditem=zcditemAry;
if(flag==1){
layer.msg('请输入转仓数量',{
icon:5
});
$("#save").removeClass("disabled");
return;
}
if(zcditemAry.length==0){
layer.msg('请输入转仓商品信息',{
icon:5
});
$("#save").removeClass("disabled");
return;
}
/*else{
for(vari=0;i<zcditemAry;i++){
if(zcditemAry[i].zcdi03==""){
layer.msg('请输入转仓数量',{
icon:5
});
$("#save").removeClass("disabled");
return;
}
}
}*/
$.ajax({
url:"${ctx}/stock/zcd/saveZcd",
data:$.json.decode(param),
contentType:"application/json",
type:"POST",
dataType:"json",
success:function(data){
if(data.success){
$("#zcd01").val(data.data.zcd01);
$("#zcd05").val(data.data.zcd05);
$("#zcd06").val(data.data.zcd06);
layer.msg('制定转仓单成功',{
icon:6
});
}else{
layer.msg('制定转仓单失败'+data.errorMsg,{
icon:5
});
$("#save").removeClass("disabled");
}
}
});
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。