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"); } } }); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。