`
wenxin2009
  • 浏览: 320530 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mybatis操作mysql存储过程

 
阅读更多

之前没有用mybatis操作mysql存储过程,一般都是用ibatis操作oracle存储过程,两者的差距还是蛮大的,mysql的存储过程语法和oracle都不一样。以下为代码片断(spring MVC+mybatis+MySQL):

package com.letu.dao;

import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Repository;

import com.letu.domain.Payments;

/**
 * 支付 - DAO层
 * 
 * @author Dwen
 * @version v 0.1 2013-9-12 下午10:08:15
 */
@Repository
public interface IPaymentsDao {

	/**
	 * 商品支付
	 * @param payments
	 * @return
	 */
	void pay(Map payMap);
	
	
}

 

   payments-mapper.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.letu.dao.IPaymentsDao">
	<parameterMap type="java.util.Map" id="payMap">
        <parameter property="userId" jdbcType="INTEGER" mode="IN"/>
        <parameter property="payPassword" jdbcType="VARCHAR" mode="IN"/>
        <parameter property="goodsId" jdbcType="INTEGER" mode="IN"/>
        <parameter property="payMoney" jdbcType="DOUBLE" mode="IN"/>
        <parameter property="resultStatus" jdbcType="INTEGER" mode="INOUT"/>
    </parameterMap>
    <resultMap type="java.util.Map" id="payResultMap">  
    		<result column="RESULT_STATUS" property="resultStatus"  jdbcType="INTEGER" javaType="java.lang.Integer" />   
  	</resultMap>
    <!-- 商品支付 -->
    <update id="pay" parameterMap="payMap" statementType="CALLABLE">
        {CALL P_PAY(?,?,?,?,?)}
    </update>
    
</mapper> 

 

    P_PAY存储过程:

/** 支付存储过程 */
CREATE  PROCEDURE P_PAY(IN p_user_id INTEGER,IN p_pay_password  VARCHAR(100),IN p_goods_id INTEGER,IN p_goods_price  DOUBLE,INOUT RESULT_STATUS INT) 
label_a:BEGIN
	declare v_account DOUBLE;
	declare v_total_account DOUBLE;
  	declare v_pay_password  VARCHAR(1000);
  	declare v_user_name     VARCHAR(1000);
  	declare v_goods_no      INTEGER;
	declare v_goods_name    VARCHAR(1000);
	declare v_market_price  DOUBLE;
	declare v_goods_price   DOUBLE;
  	declare v_goods_num     INT;
  	declare v_payments_id   INTEGER;
  	/*declare exit HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND*/
	/* 判断用户账户金额*/
  	SELECT ACCOUNT,TOTAL_ACCOUNT,USER_NAME,PAY_PASSWORD INTO v_account,v_total_account,v_user_name,v_pay_password 
  	FROM USER WHERE ID=p_user_id;
  	
  	/* 检查用户支付密码 ,INOUT RESULT_STATUS INT*/
  	BEGIN
  	IF (v_pay_password != p_pay_password) THEN
      /*SET RESULT_STATUS = 1;*/
      /*SELECT 1 INTO RESULT_STATUS;*/
      leave label_a;
  	END IF;
  	END;
  	
  	 /* 检查用户余额是否足够 */
  	 BEGIN
  	IF (v_account < p_goods_price) THEN
    		/*SET RESULT_STATUS = 2;*/
    		/*SELECT 2 INTO RESULT_STATUS;*/
    		leave label_a;
  	END IF;
  	END;
  	
  	/* 用户余额支付商品 */
  	BEGIN
  	IF (v_account >= p_goods_price) THEN
    		UPDATE USER SET ACCOUNT=ACCOUNT-p_goods_price,TOTAL_ACCOUNT=TOTAL_ACCOUNT-p_goods_price 
    		WHERE ID=p_user_id;
    	END IF;
    	END;
    	
    	/* 查询购物车*/
	BEGIN
	  SELECT GOODS_NO,GOODS_NAME,MARKET_PRICE,GOODS_PRICE,GOODS_NUM 
	  INTO v_goods_no,v_goods_name,v_market_price,v_goods_price,v_goods_num 
	  FROM GOODS_CART WHERE USER_ID=p_user_id AND GOODS_ID=p_goods_id;
	  /* 修改购物车商品状为已支付*/
	  UPDATE GOODS_CART SET STATUS='1',UPDATE_AT=now() WHERE  USER_ID=p_user_id AND GOODS_ID=p_goods_id;
	END;
	
	/* 修改商品库存*/
    	BEGIN
    		UPDATE GOODS SET STORAGE_NUM=STORAGE_NUM-v_goods_num,UPDATE_AT=now() WHERE ID=p_goods_id;
    	END;
	
    /* 支付单*/
  	BEGIN
    		INSERT INTO PAYMENTS(USER_ID,USER_NAME,PAY_MONEY,GOODS_ID,GOODS_NO,GOODS_NUM,PAY_TYPE,PAY_DATE,PAY_STATUS,CREATE_AT) 
    		VALUES(p_user_id,v_user_name,p_goods_price,p_goods_id,v_goods_no,v_goods_num,'1',now(),'1',now());
  		/* 获得支付单id*/
  		SET v_payments_id = LAST_INSERT_ID();
  		/* 用户账户流水*/
    		INSERT INTO USER_ACCOUNT(USER_ID,SOURCE_ID,SOURCE_NAME,DIRECTION,MONEY,ACCOUNT_OLD,ACCOUNT_NEW,STATUS,PAY_TYPE,CREATE_AT) 
    		VALUES(p_user_id,v_payments_id,'PAYMENTS','1',p_goods_price,v_account-p_goods_price,v_account,'1','1',now());
  	END;
  
  	/* 生成订单*/
  	BEGIN
    		INSERT INTO ORDER_GOODS(GOODS_NAME,GOODS_ID,GOODS_NO,MARKET_PRICE,ORDER_PRICE,SHIPPING_NUM,USER_ID,USER_NAME,PAYMENT_ID,ORDER_STATUS,CREATE_AT) 
    		VALUES(v_goods_name,p_goods_id,v_goods_no,v_market_price,v_goods_price,v_goods_num,p_user_id,v_user_name,v_payments_id,'1',now());
  	END;
  	
  	/*SELECT RESULT_STATUS; */
  
END;

 

 

分享到:
评论

相关推荐

    MyBatis调用MYSQL存储过程

    MyBatis调用MYSQL存储过程 返回多行 引用的包: asm-3.1.jar cglib-2.2.jar commons-logging-1.1.1.jar log4j-1.2.13.jar mybatis-3.0.4.jar mysql-connector-java-5.1.13.jar slf4j-api-1.5.8.jar slf4j-log4j12-...

    mybatis调用mysql存储过程

    通过以上步骤,你已经掌握了如何在MyBatis中调用MySQL存储过程的基本方法。在实际开发中,这将极大地提升你的数据库操作效率,使你能够更好地管理和处理复杂的业务逻辑。在后续的实践中,你可以尝试结合具体业务场景...

    spring mvc + mybatis 调用mysql 存储过程

    本文将详细讲解如何在Spring MVC和MyBatis集成的项目中调用MySQL存储过程。 首先,让我们理解存储过程的概念。存储过程是在数据库中预编译的一组SQL语句,可以包含输入、输出和内部参数,能够执行复杂的业务逻辑。...

    JAVA通过MyBatis调用MySql存储过程和函数doc文档合集整理.zip

    这个文档合集应该详细讲解了这些步骤和最佳实践,帮助开发者熟练掌握在Java中利用MyBatis调用MySQL存储过程和函数的技巧,从而更高效地进行数据库操作。通过深入学习和实践,开发者可以更好地理解这两者之间的交互,...

    Mybatis调用MySQL存储过程的简单实现

    在IT行业中,数据库管理和...总之,MyBatis调用MySQL存储过程提供了灵活的数据处理能力,允许开发者在数据库层面执行复杂操作。理解存储过程的概念、优缺点及基本语法,对于高效地使用MyBatis进行数据库交互至关重要。

    Mybatis应用mysql存储过程查询数据实例

    Mybatis应用mysql存储过程查询数据实例 Mybatis是一款流行的持久层框架,mysql是一个广泛使用的关系数据库管理系统。在实际开发中,经常需要使用Mybatis来调用mysql存储过程来查询数据。下面我们将详细介绍Mybatis...

    Spring+Mybatis+mysql简单的Student增删改查

    总结起来,这个项目涵盖了Web开发中的后端基础,通过Spring MVC处理请求,MyBatis进行数据操作,MySQL存储数据。对于初学者来说,理解并实践这个项目有助于掌握Java Web开发的基本流程和技术栈,为进一步深入学习...

    mybatis,mybatis+mysql

    4. **调用存储过程**:MyBatis也支持调用MySQL的存储过程。在XML映射文件中,你可以使用`&lt;select id="callProcedure" parameterType="map" resultType="map"&gt;`标签来调用存储过程,参数和结果可以通过Map对象传递。 ...

    SpringBoot+Mybatis+mysql

    **Mybatis** 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    mybatis+mysql驱动.rar

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    springmvc+mybatis+mysql

    标题 "springmvc+mybatis+mysql" 描述的是一个经典的Java Web开发技术栈,它将Spring MVC作为前端控制器,MyBatis作为持久层框架,MySQL作为数据库存储。这个组合广泛应用于许多企业级应用中,提供了高效、灵活且可...

    MySql存储过程以及MyBatis3

    总结,MySQL存储过程提供了数据库级别的代码复用和事务管理,而MyBatis3作为Java持久层框架,简化了数据库操作,两者结合可以实现高效、安全的数据处理。学习和掌握这两者,对于提升数据库应用开发的效率和质量至关...

    springboot+mybatis+mysql+thymeleaf 实现最基本数据库操作demo

    在本项目中,我们主要探讨的是如何利用SpringBoot框架与MyBatis相结合,再辅以MySQL数据库和Thymeleaf模板引擎,构建一个基础的数据库操作示例。这个"springboot+mybatis+mysql+thymeleaf 实现最基本数据库操作demo...

    Maven+SpringBoot+MyBatis+MySQL实现增删改查源码

    在本项目中,MySQL将存储和管理数据,SpringBoot通过JPA(Java Persistence API)和MyBatis与之交互。你需要在`application.properties`中配置MySQL的连接信息,如数据库URL、用户名、密码等。 在项目结构方面,...

    spring+mybatis+mysql实现的用户登录功能

    MyBatis是一个轻量级的持久层框架,它简化了SQL操作,将SQL语句直接嵌入到Java代码中。在用户登录功能中,MyBatis负责与MySQL数据库进行通信,执行查询用户凭据的SQL语句。通过MyBatis的映射文件,我们可以定义一个...

    spring-boot-mybatis-mysql.zip

    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    Spring Boot + MyBatis + MySQL

    MyBatis 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis 可以使你更好地控制SQL编写过程,同时提供了强大的动态SQL支持...

    SpringMVC+MyBatis+MySql注解示例

    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。它通过注解或XML配置文件,将SQL语句与Java代码关联起来,提供了更为灵活...

    mybatis+mysql 使用存储过程生成流水号的实现代码

    本篇文章将深入探讨如何在MyBatis框架中结合MySQL存储过程来生成流水号。 首先,存储过程`GetSerialNo`接受一个输入参数`tsCode`,类型为VARCHAR(50),并返回一个VARCHAR(200)类型的`result`。该过程的主要目的是为...

    Spring+Mybatis+Mysql项目框架

    在Spring+Mybatis的项目中,Mysql作为数据存储的载体,存储业务数据,通过Mybatis的SQL映射文件与Java对象进行交互。 4. **项目结构**:一个典型的Spring+Mybatis+Mysql项目通常会包含以下主要模块: - **src/main...

Global site tag (gtag.js) - Google Analytics