在SSM框架中经常会用到调用数据库中的存储过程、以及事务控制,下面以保存某单据为例,介绍一下:

1、Oracle中存储过程代码如下(主要逻辑将单据编码自动加1,并将该单据编码返回):

CREATE OR REPLACE PROCEDURE "UPDATE_DJBHZT" (p_GSID in varchar2, p_TBLNAME in varchar2,NewRecNo out Number) as
beginupdate BHDJ set BHDJ02 = BHDJ02+1 where GSXX01 = p_GSID and BHDJ01 = p_TBLNAME;if sql%rowcount = 0 theninsert 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;@Service
public 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");}}});}

SpringMVC与Mybatis集合实现调用存储过程、事务控制相关推荐

  1. mybatis注解方式调用存储过程

    1.建立存储过程: CREATE DEFINER=`root`@`%` PROCEDURE `p_dmk_fsyx`(v_month VARCHAR(6),v_type VARCHAR(2),OUT ...

  2. mybatis mysql 关于调用存储过程获取查询结果

    背景:  由于使用了存储过程进行坚转横的动态查询,查询出来的列是不固定的,也就无法使用实体对象自动转换:但关于查询结果返回困扰了很久,网上很多都是将查询结果做为游标 out 输出,但本人试了很多方法, ...

  3. MogDB存储过程事务控制与异常块

    点击蓝字 关注我们 本文将分别在openGauss/MogDB和PostgreSQL数据库中测试存储过程commit与exception的使用. 实验一 1.PostgreSQL 先创建测试表: cr ...

  4. 存储过程和函数——概述||创建存储过程||调用存储过程||查看存储过程||删除存储过程

    存储过程和函数概述 存储过程和函数是事先经过编译并存储在数据库中的一段 SQL 语句的集合, 调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理 ...

  5. Mybatis调用存储过程和函数

    1.现在PL/SQL Developer中定义存储过程和函数 存储过程 create or replace procedure prg_add(p1 in number,p2 in number,p3 ...

  6. MyBatis中调用存储过程和函数

    一.调用存储过程 1.首先在数据库中定义存储过程,定义的存储过程的代码如下: //定义存储过程create or replace procedure pag_add(p1 varchar2,p2 va ...

  7. dapper 调用 存储过程返回值_数据库事务、存储过程、函数以及触发器之间的区别和联系...

    一.[事务概念] 事务(Transaction)是指构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行. 1,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前 ...

  8. MyBatis如何调用存储过程

    本文按自底向上的顺序分享MyBatis如何调用存储过程 1. xxxMapper.xml <select id="storeProcedure" statementType= ...

  9. MyBatis入门学习教程-调用存储过程

    一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 1 create table p_user( 2 id int primary key auto_ ...

最新文章

  1. logging日志配置,day95下午
  2. 计算机组成原理——I/O设备(外部设备)、I/O接口
  3. wuhan2020开源项目协作流程发布 征集专家人士
  4. Java计算一个字符串的HashCode
  5. [BUUCTF-pwn]——gyctf_2020_borrowstack
  6. LQ训练营(C++)学习笔记_背包问题
  7. double小数点后最多几位_基金理财买入后,不断亏损,是最多本金亏光,还是会出现负值...
  8. select下拉框option的样式修改
  9. 新建3台linux7.5部署k8s,之后的软件安装全部都在k8s
  10. 数据-第18课-栈与递归
  11. [照片]51cto众生相
  12. java计算-5%3_JAVA基础教程day03--运算符
  13. 【转】支持向量机回归模型SVR
  14. 如果局域网当中两台电脑互相ping不通
  15. 若依管理系统漏洞利用
  16. 方程中变量不可分离的偏微分方程的求解
  17. matlab 三分之一倍频程,三分之一倍频程谱
  18. 【2014最新】iOS App 提交上架store 详细流程
  19. 【Python】具有异常处理功能的计算BMI值的python程序
  20. 什么是瘦AP、胖AP、AP+AC、Mesh?

热门文章

  1. 上海ICPC Mine Sweeper II
  2. AspNet控件开发(1)---入门介绍
  3. 。。。。。。。。。。。。。。。。。。。。
  4. MySQL数据查询(一)
  5. 集成学习和随机森林方法
  6. 第四章 分支机构程序设计
  7. 小勇rust_大规模分布式环境下动态信任模型研究
  8. css揭秘第二章:背景与边框,自己的学习笔记,如有错误请多指正
  9. JSF 2.0(基于Primefaces 3.4.2) 中文乱码的处理方案
  10. 【硬件】问题:WD Elements硬盘显示无法格式化——处理过程