之前没有用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存储过程 返回多行 引用的包: 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存储过程的基本方法。在实际开发中,这将极大地提升你的数据库操作效率,使你能够更好地管理和处理复杂的业务逻辑。在后续的实践中,你可以尝试结合具体业务场景...
本文将详细讲解如何在Spring MVC和MyBatis集成的项目中调用MySQL存储过程。 首先,让我们理解存储过程的概念。存储过程是在数据库中预编译的一组SQL语句,可以包含输入、输出和内部参数,能够执行复杂的业务逻辑。...
这个文档合集应该详细讲解了这些步骤和最佳实践,帮助开发者熟练掌握在Java中利用MyBatis调用MySQL存储过程和函数的技巧,从而更高效地进行数据库操作。通过深入学习和实践,开发者可以更好地理解这两者之间的交互,...
在IT行业中,数据库管理和...总之,MyBatis调用MySQL存储过程提供了灵活的数据处理能力,允许开发者在数据库层面执行复杂操作。理解存储过程的概念、优缺点及基本语法,对于高效地使用MyBatis进行数据库交互至关重要。
Mybatis应用mysql存储过程查询数据实例 Mybatis是一款流行的持久层框架,mysql是一个广泛使用的关系数据库管理系统。在实际开发中,经常需要使用Mybatis来调用mysql存储过程来查询数据。下面我们将详细介绍Mybatis...
总结起来,这个项目涵盖了Web开发中的后端基础,通过Spring MVC处理请求,MyBatis进行数据操作,MySQL存储数据。对于初学者来说,理解并实践这个项目有助于掌握Java Web开发的基本流程和技术栈,为进一步深入学习...
4. **调用存储过程**:MyBatis也支持调用MySQL的存储过程。在XML映射文件中,你可以使用`<select id="callProcedure" parameterType="map" resultType="map">`标签来调用存储过程,参数和结果可以通过Map对象传递。 ...
**Mybatis** 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...
标题 "springmvc+mybatis+mysql" 描述的是一个经典的Java Web开发技术栈,它将Spring MVC作为前端控制器,MyBatis作为持久层框架,MySQL作为数据库存储。这个组合广泛应用于许多企业级应用中,提供了高效、灵活且可...
总结,MySQL存储过程提供了数据库级别的代码复用和事务管理,而MyBatis3作为Java持久层框架,简化了数据库操作,两者结合可以实现高效、安全的数据处理。学习和掌握这两者,对于提升数据库应用开发的效率和质量至关...
在本项目中,我们主要探讨的是如何利用SpringBoot框架与MyBatis相结合,再辅以MySQL数据库和Thymeleaf模板引擎,构建一个基础的数据库操作示例。这个"springboot+mybatis+mysql+thymeleaf 实现最基本数据库操作demo...
在本项目中,MySQL将存储和管理数据,SpringBoot通过JPA(Java Persistence API)和MyBatis与之交互。你需要在`application.properties`中配置MySQL的连接信息,如数据库URL、用户名、密码等。 在项目结构方面,...
MyBatis是一个轻量级的持久层框架,它简化了SQL操作,将SQL语句直接嵌入到Java代码中。在用户登录功能中,MyBatis负责与MySQL数据库进行通信,执行查询用户凭据的SQL语句。通过MyBatis的映射文件,我们可以定义一个...
MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...
MyBatis 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis 可以使你更好地控制SQL编写过程,同时提供了强大的动态SQL支持...
MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。它通过注解或XML配置文件,将SQL语句与Java代码关联起来,提供了更为灵活...
本篇文章将深入探讨如何在MyBatis框架中结合MySQL存储过程来生成流水号。 首先,存储过程`GetSerialNo`接受一个输入参数`tsCode`,类型为VARCHAR(50),并返回一个VARCHAR(200)类型的`result`。该过程的主要目的是为...
在Spring+Mybatis的项目中,Mysql作为数据存储的载体,存储业务数据,通过Mybatis的SQL映射文件与Java对象进行交互。 4. **项目结构**:一个典型的Spring+Mybatis+Mysql项目通常会包含以下主要模块: - **src/main...