SpringMVC与Mybatis集合实现调用存储过程、事务控制
来源:互联网 发布:数据库完整性约束条件 编辑:程序博客网 时间:2024/06/09 17:59
在SSM框架中经常会用到调用数据库中的存储过程、以及事务控制,下面以保存某单据为例,介绍一下:
1、Oracle中存储过程代码如下(主要逻辑将单据编码自动加1,并将该单据编码返回):
CREATE OR REPLACE PROCEDURE "UPDATE_DJBHZT" (p_GSID in varchar2, p_TBLNAME in varchar2, NewRecNo out Number) asbegin update BHDJ set BHDJ02 = BHDJ02+1 where GSXX01 = p_GSID and BHDJ01 = p_TBLNAME; if sql%rowcount = 0 then insert into BHDJ (GSXX01, BHDJ01,BHDJ02) values(p_GSID, p_TBLNAME,1); end if; select BHDJ02 into NewRecNo from BHDJ where GSXX01 = p_GSID and BHDJ01 = p_TBLNAME;end;2、Mybatis中代码如下:
<select id="update_djbhzt" parameterType="java.util.Map" statementType="CALLABLE"><![CDATA[ {call UPDATE_DJBHZT(#{p_GSID,mode=IN,jdbcType=VARCHAR},#{p_TBLNAME,mode=IN,jdbcType=VARCHAR},#{NewRecNo,mode=OUT,jdbcType=BIGINT})} ]]></select>3、Dao层代码如下:
package com.pcmall.dao.sale.stock;import java.util.List;import java.util.Map;import com.github.miemiedev.mybatis.paginator.domain.PageBounds;import com.pcmall.dao.common.BaseMapper;import com.pcmall.domain.sale.stock.Zcd;public interface ZcdMapper extends BaseMapper<Zcd> { void update_djbhzt(Map<String,Object> map); }
4、Service层代码如下:
接口:
package com.pcmall.service.sale.stock;import java.util.List;import com.github.miemiedev.mybatis.paginator.domain.PageBounds;import com.pcmall.domain.sale.order.HssnCmmx;import com.pcmall.domain.sale.stock.Zcd;import com.pcmall.domain.sale.stock.Zcditem;import com.pcmall.domain.sale.user.User;import com.pcmall.domain.vo.ResponseVO;import com.pcmall.service.common.IBaseService;public interface IZcdService extends IBaseService<Zcd> {Long getZcdNo(String gsxx01, String tablename);ResponseVO saveZcd(Zcd zcd, User user) throws Exception;}
实现类:
package com.pcmall.service.sale.stock.impl;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.annotation.Resource;import org.apache.axis.holders.SchemaHolder;import org.apache.commons.collections.CollectionUtils;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import com.github.miemiedev.mybatis.paginator.domain.PageBounds;import com.google.common.collect.Collections2;import com.pcmall.common.utils.DateUtils;import com.pcmall.dao.sale.stock.ZcdMapper;import com.pcmall.dao.sale.stock.ZcditemMapper;import com.pcmall.domain.sale.order.HssnCmmx;import com.pcmall.domain.sale.promotion.HsCxlx;import com.pcmall.domain.sale.stock.Zcd;import com.pcmall.domain.sale.stock.Zcditem;import com.pcmall.domain.sale.stock.bo.CkspBO;import com.pcmall.domain.sale.user.User;import com.pcmall.domain.vo.ResponseVO;import com.pcmall.service.common.AbstractServiceImpl;import com.pcmall.service.sale.order.IOrderService;import com.pcmall.service.sale.stock.IStockService;import com.pcmall.service.sale.stock.IZcdService;@Servicepublic class ZcdServiceImpl extends AbstractServiceImpl<Zcd> implements IZcdService {@Resourceprivate ZcdMapper zcdMapper;@Resourceprivate ZcditemMapper zcditemMapper;@Resourceprivate IStockService stockServiceImpl;@Transactional(rollbackFor = Exception.class)@Overridepublic ResponseVO saveZcd(Zcd zcd, User user) throws Exception {ResponseVO responseVO = new ResponseVO();Long zcd01 = getZcdNo(zcd.getGsxx01(), "ZCD");zcd.setZcd01(zcd01);zcd.setZcd05(user.getRyxx().getRyxx02());zcd.setZcd06(new Date());Date nowTime = new Date();SimpleDateFormat sdf = new SimpleDateFormat("hhmmssms");zcd.setTime01(sdf.format(nowTime));for(Zcditem zcditem : zcd.getZcditem()){zcditem.setZcd01(zcd01);zcditemMapper.insertSelective(zcditem);}zcdMapper.insertSelective(zcd);responseVO.setData(zcd);return responseVO;}@Overridepublic Long getZcdNo(String gsxx01, String tablename) {Map<String, Object> map = new HashMap<String, Object>();map.put("p_GSID", gsxx01);map.put("p_TBLNAME", tablename);zcdMapper.update_djbhzt(map);Long NewRecNo = (Long) map.get("NewRecNo");return NewRecNo;}}
5、Control层代码如下:
package com.pcmall.controller.stock.zcd;import java.util.List;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import org.apache.commons.collections.CollectionUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.github.miemiedev.mybatis.paginator.domain.PageBounds;import com.pcmall.common.base.BaseController;import com.pcmall.domain.sale.stock.Zcd;import com.pcmall.domain.sale.stock.Zcditem;import com.pcmall.domain.sale.stock.bo.CkspDetailBO;import com.pcmall.domain.sale.stock.bo.ZcdBO;import com.pcmall.domain.sale.system.Gzzqx;import com.pcmall.domain.sale.system.GzzqxKey;import com.pcmall.domain.sale.system.Ryxx;import com.pcmall.domain.sale.user.Czy;import com.pcmall.domain.sale.user.User;import com.pcmall.domain.vo.ResponseVO;import com.pcmall.service.sale.stock.IStockService;import com.pcmall.service.sale.stock.IZcdService;import com.pcmall.service.sale.system.IGzzqxService;@Controller@RequestMapping("/stock/zcd")public class ZCDController extends BaseController {private static Logger logger=LoggerFactory.getLogger(ZCDController.class);@Resourceprivate IZcdService zcdServiceImpl;@Resource private IStockService stockServiceImpl;@Resourceprivate IGzzqxService gzzqxServiceImpl;@RequestMapping("/saveZcd")@ResponseBodypublic ResponseVO saveZcd(HttpServletRequest request, @RequestBody Zcd zcd){ResponseVO responseVO = new ResponseVO();try{responseVO = zcdServiceImpl.saveZcd(zcd, getLoginUser());responseVO.setSuccess(true);}catch (Exception e) {logger.error("",e);responseVO.setSuccess(false);responseVO.setErrorMsg(!"".equals(e.getMessage()) ? e.getMessage() : "后台异常");}return responseVO;}}
6、前端js层代码如下:
function save() {$("#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;}var param = {};param.bm01 = $("#selBm").attr("valuea");param.zcd02 = $("#selFHCK").attr("valuea");param.zcd03 = $("#selSHCK").attr("valuea");param.zcd04 = $("#zcd04").val();param.gsxx01 = $("#gsxx01").val();var zcditemAry = [];var flag = 0;$("#tbody1").find("tr").each(function() {var zcditem = {};var arrtd = $(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(var i=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");}}});}
0 0
- SpringMVC与Mybatis集合实现调用存储过程、事务控制
- springmvc MyBatis 调用Oracle存储过程,使用Map传递参数
- JDBC与Mybatis调用存储过程实例(分页存储过程)
- MyBatis调用存储过程
- mybatis调用存储过程
- mybatis调用存储过程
- mybatis调用存储过程
- mybatis调用存储过程
- Mybatis调用存储过程
- mybatis调用存储过程
- mybatis调用存储过程
- mybatis调用存储过程
- mybatis调用存储过程
- MyBatis调用存储过程
- mybatis 调用存储过程
- Mybatis调用存储过程
- MyBatis调用存储过程
- mybatis调用存储过程
- CTP源码分析5 CTP链路质量估计层结构及源码分析(四)----源码实现解读(一)
- Java网络编程Demo(一)多线程的TCP网络程序
- docker环境搭建
- caffe源码中的common_layers
- Android 自定义View——BarrageView实现弹幕功能
- SpringMVC与Mybatis集合实现调用存储过程、事务控制
- Js中去除数组中重复元素的4种方法
- Nand Flash寄存器中TACLS、TWRPH0、TWRPH1参数的配置
- jzoj 2541. 【NOIP2011模拟9.1】方格取数
- ajax无刷新上传
- Java中的this、super关键字
- Android 中 getApplicationContext()、this、getApplication()之间的区别
- 累赘-----解决eclipse中无法导入项目的问题
- 下一个最大数(数组法)