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

在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");
        }
      }
    });
  }

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索spring
, mybatis
, 事务
springmvc整合mybatis
springmvcmybatis实例、spring mybatis 事务、spring mybatis 实例、spring4 mybatis 事务、spring3 mybatis 事务,以便于您获取更多的相关知识。

时间: 2024-10-27 19:28:45

SpringMVC与Mybatis集合实现调用存储过程、事务控制实例_java的相关文章

Java 反射调用静态方法的简单实例_java

以往都是使用反射调用实例方法,那么反射如何调用静态方法呢?看下面的例子 Class<?> threadClazz = Class.forName("java.lang.Math"); Method method = threadClazz.getMethod("abs", long.class); System.out.println(method.invoke(null, -10000l)); 只需要将invoke方法的第一个参数设为null即可! 以

java调用Oracle存储过程的方法实例_java

 1.测试添加数据的procedure 复制代码 代码如下: public void testProcedure() {        Connection con = getConnction();         // **1.测试添加数据的procedure          String procedure = "{call users_insert_proc(?,?,?,?) }";         CallableStatement cs = null;        tr

JAVA实现 springMVC方式的微信接入、实现消息自动回复实例_java

前段时间小忙了一阵,微信公众号的开发,从零开始看文档,踩了不少坑,也算是熬过来了,最近考虑做一些总结,方便以后再开发的时候回顾,也给正在做相关项目的同学做个参考. 1.思路 微信接入:用户消息和开发者需要的事件推送都会通过微信方服务器发起一个请求,转发到你在公众平台配置的服务器url地址,微信方将带上signature,timestamp,nonce,echostr四个参数,我们自己服务器通过拼接公众平台配置的token,以及传上来的timestamp,nonce进行SHA1加密后匹配signa

Java:DocumentBuilderFactory调用XML的方法实例_java

首先得到:得到 DOM 解析器的工厂实例      DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance(); 然后从 DOM 工厂获得 DOM 解析器  DocumentBuilder dombuilder=domfac.newDocumentBuilder();   )把要解析的 XML 文档转化为输入流,以便 DOM 解析器解析它 InputStream is= new  FileInputStream("test

JDBC调用存储过程,以及存储过程 事务的使用.....

在JDBC中调用存储过程 首先就要在数据库中存在 要调用的过程  ,存储过程是一组SQL语句的集合,我们吧实现某一功能的 SQL语句集合在一起来使用,方便了用户,不光是这样,存储过程可以预编译,也就是说只要调用了一次存储过程,那么下次在调用存储过程的时候 就不需要进行再次编译了  .提高了 数据库访问的效率 .. 在 SQL  SERVER20008  中创建存储过程    语法如下        Create   Procedure   过程名字(@parameter1  int ,@para

请教怎么配置springmvc+spring+mybatis的事务,手动控制的

问题描述 请教怎么配置springmvc+spring+mybatis的事务,手动控制的 请教怎么配置springmvc+spring+mybatis的事务,手动控制的 解决方案 mybatis spring事务配置spring整合mybatis之事务配置 解决方案二: 呵呵 事务如果不配置 默认 就是需要手动使用的吧 既然你要手动的 那就不配置就行了, 如果已经配置了 事务一般都是 xml配置 或者注解,取消注解,或者xml中取消匹配方法的配置不就行了

Spring中如何实现插入数据后调用存储过程,且在同一事务里,如何证明。

问题描述 Spring中如何实现插入数据后调用存储过程,且在同一事务里,如何证明.Spring是如何管理事务的,我在插入后如何自动提交的. 解决方案 解决方案二:<propertyname="sqlMapClientTemplate"ref="sqlMapClientTemplate"></property>DAO中使用的这个对应的beanxml是<beanid="sqlMapClientTemplate"class

捕获-springMVC+spring+mybatis事务问题

问题描述 springMVC+spring+mybatis事务问题 有什么办法能正常处理捕获异常并进行回滚,并且将具体的错误信息return. 而一旦出现异常后,就不会执行return了! 请问有什么办法吗? 解决方案 参考:http://bbs.csdn.net/topics/390785374

SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置

一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不能用,log也不知道能不能用,`(*∩_∩*)′哈哈,有点不负责任...... 2014-08-12 23:45补: =================开始================= 1.增加quartz :http://www.cnblogs.com/acehalo/p/3902731.h