在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. WEEX 报错 TypeError: Converting circular structor to JSON 的解决方法
  2. 三维重建学习(1):基础知识:旋转矩阵与旋转向量
  3. 【HDOJ】1196 Lowest Bit
  4. vue中mixins的使用方法和注意地方
  5. php抑制错误,PHP 行内错误抑制
  6. 计算机软件水平考试调整,全国计算机等级考试调整方案
  7. 首个诞生于长期支持计划的版本Node.js 4.2 “Argon”正式发布
  8. html高德地图的使用方法,高德地图的使用方法
  9. 三极管的使用方法,放大,截止,饱和
  10. 在线生成 html 页面,细说在线版H5页面生成器
  11. 玩游戏计算机缺失msvcp140,绝地求生计算机丢失MSVCP140.dll解决办法
  12. 永远不会被杀毒软件查杀的木马捆绑机
  13. 不同时区时间换算_时区换算-如何计算时区? 爱问知识人
  14. mysql查询性能测试工具_性能测试之数据库监控分析工具PMM
  15. 如何在网页中添加 GitHub Corners
  16. HFSS和CST电磁仿真的硬件选型指南(纯个人经验)
  17. java 线框图_十个完全免费的网页原型(线框图)工具
  18. Bentley版隧道
  19. 华为已在欧洲为鸿蒙os提交商标申请,华为已经在欧洲提交鸿蒙OS商标申请:Harmony...
  20. 在Linux中实现文本文件的复制_莫韵乐的小脚印笔记

热门文章

  1. 实现Word转Pdf文件
  2. win10插入外设自动播放关闭
  3. Android状态栏介绍
  4. outlook 脱机通讯录_使用Outlook 2003中的通讯组列表节省时间
  5. 新房装修怎么搭配软装,方法技巧有哪些?-好佳居软装十大品牌
  6. java联调生成测试数据工具类
  7. eclipse 更改配色方案
  8. <力扣第292场周赛第一题>6056. 字符串中最大的 3 位相同数字
  9. jQuery Validate验证使用记录
  10. jquery validate初上手