SpringMVC与Mybatis集合实现调用存储过程、事务控制实例

 更新时间:2016年11月05日 14:34:46   作者:Jay_1989  
这篇文章主要介绍了SpringMVC与Mybatis集合实现调用存储过程、事务控制实例,有需要的可以了解一下。

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

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

CREATE OR REPLACE PROCEDURE "UPDATE_DJBHZT" (p_GSID in varchar2, p_TBLNAME in varchar2, 
                  NewRecNo out Number) as 
begin 
  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; 
 
@Service 
public class ZcdServiceImpl extends AbstractServiceImpl<Zcd> implements IZcdService { 
   
  @Resource 
  private ZcdMapper zcdMapper; 
   
  @Resource 
  private ZcditemMapper zcditemMapper; 
   
  @Resource 
  private IStockService stockServiceImpl; 
   
   
  @Transactional(rollbackFor = Exception.class) 
  @Override 
  public 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; 
  } 
 
 
  @Override 
  public 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); 
   
  @Resource 
  private IZcdService zcdServiceImpl; 
   
   
  @Resource  
  private IStockService stockServiceImpl; 
   
  @Resource 
  private IGzzqxService gzzqxServiceImpl; 
   
   
   
  @RequestMapping("/saveZcd") 
  @ResponseBody 
  public 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"); 
        } 
      } 
    }); 
  } 

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 利用Jmeter发送Java请求的实战记录

    利用Jmeter发送Java请求的实战记录

    JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现,下面这篇文章主要给大家介绍了关于如何利用Jmeter发送Java请求的相关资料,需要的朋友可以参考下
    2021-09-09
  • 浅谈Spring Cloud中的API网关服务Zuul

    浅谈Spring Cloud中的API网关服务Zuul

    这篇文章主要介绍了浅谈Spring Cloud中的API网关服务Zuul,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • IDEA 自定义方法注解模板的实现方法

    IDEA 自定义方法注解模板的实现方法

    这篇文章主要介绍了IDEA 自定义方法注解模板的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Java中FileWriter类的简介说明

    Java中FileWriter类的简介说明

    这篇文章主要介绍了Java中FileWriter类的简介说明,FileWriter类提供了多种写入字符的方法,包括写入单个字符、写入字符数组和写入字符串等,它还提供了一些其他的方法,如刷新缓冲区、关闭文件等,需要的朋友可以参考下
    2023-10-10
  • Compare And Swap底层原理及代码示例详解

    Compare And Swap底层原理及代码示例详解

    这篇文章主要介绍了Compare And Swap底层原理及代码示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 关于同一个service调用service本身的方法

    关于同一个service调用service本身的方法

    这篇文章主要介绍了关于同一个service调用service本身的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 浅谈Java几种文件读取方式耗时

    浅谈Java几种文件读取方式耗时

    本文主要介绍了浅谈Java几种文件读取方式耗时,主要介绍了4种,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 一分钟入门Java Spring Boot彻底解决SSM配置问题

    一分钟入门Java Spring Boot彻底解决SSM配置问题

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域成为领导者
    2021-10-10
  • Java中的CurrentHashMap源码详解

    Java中的CurrentHashMap源码详解

    这篇文章主要介绍了Java中的CurrentHashMap源码详解,HashMap是数组+链表构成的,JDK1.8之后,加入了红黑树,HashMap默认数组初始化大小为16,如果瞎设置数字,它会自动调整成2的倍数,需要的朋友可以参考下
    2023-12-12
  • 解决springboot整合cxf-jaxrs中json转换的问题

    解决springboot整合cxf-jaxrs中json转换的问题

    这篇文章主要介绍了解决springboot整合cxf-jaxrs中json转换的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论