最近在捣鼓SSM使用注解方式调用有输入输出参数的存储过程,趟了不少坑,网上一堆没用抄袭的,废话不多说,直接上代码。

Controller层:

/*** 注册用户** @param userName* @param userPwd* @param userSex* @param userPhone* @return* @throws Exception*/@RequestMapping("/regist")@ResponseBodypublic ExecuteResult regist(String userName, String userPwd, String userSex, String userPhone) throws Exception {ExecuteResult result = new ExecuteResult();ProcRegistParam para = new ProcRegistParam(false, null, userName, userPwd, userSex, userPhone);iUserService.regist(para);result.setResult(para.getResult());result.setMsg(para.getMsg());return result;}

DAO层:

Repository("iUser")
public interface IUser {/*** 注册用户** @return* @throws Exception*/@Select({"call Proc_Regist(#{para.userName,mode=IN,jdbcType=VARCHAR},","#{para.userPwd,mode=IN,jdbcType=VARCHAR},","#{para.userSex,mode=IN,jdbcType=VARCHAR},","#{para.userPhone,mode=IN,jdbcType=VARCHAR},","#{para.result,mode=OUT,jdbcType=BOOLEAN},","#{para.msg,mode=OUT,jdbcType=VARCHAR});"})@Options(statementType = StatementType.CALLABLE)void regist(@Param("para") ProcRegistParam procRegistParam) throws Exception;
}

参数实体类:

package com.study.daomain;import com.study.util.ExecuteResult;import java.io.Serializable;public class ProcRegistParam implements Serializable {public  ProcRegistParam(){}public ProcRegistParam(Boolean result, String msg, String userName, String userPwd, String userSex, String userPhone) {this.result = result;this.msg = msg;this.userName = userName;this.userPwd = userPwd;this.userSex = userSex;this.userPhone = userPhone;}private Boolean result;private String msg;private String userName; //用户名private String userPwd;//用户密码private String userSex;//用户性别private String userPhone;//用户手机号public Boolean getResult() {return result;}public void setResult(Boolean result) {this.result = result;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserPwd() {return userPwd;}public void setUserPwd(String userPwd) {this.userPwd = userPwd;}public String getUserSex() {return userSex;}public void setUserSex(String userSex) {this.userSex = userSex;}public String getUserPhone() {return userPhone;}public void setUserPhone(String userPhone) {this.userPhone = userPhone;}
}

存储过程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `Proc_Regist`(IN userName VARCHAR ( 50 ),-- 用户名IN userPwd VARCHAR ( 50 ),-- 用户密码IN userSex VARCHAR ( 50 ),-- 用户性别IN userPhone VARCHAR ( 20 ),-- 用户手机号OUT result TINYINT(2),OUT msg VARCHAR ( 4000 ) )
begin_label : BEGIN-- return标签-- 定义参数DECLARE newUserId int DEFAULT 0; -- 新添加的用户id-- 定义异常DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN-- 异常信息get diagnostics CONDITION 1 msg=message_text;-- 异常标识SET result=0;END;-- 开始事务START TRANSACTION;-- 初始化状态SET result=1;SET msg='操作成功!';-- 添加用户INSERT INTO s_user(su_name,su_pwd,su_sex,su_phone,create_user,create_time)VALUES(userName,userPwd,userSex,userPhone,userName,NOW());SET newUserId=(SELECT LAST_INSERT_ID());-- 添加用户权限INSERT INTO s_user_power(su_id,sp_id,create_user,create_time) VALUES(newUserId,1,userName,NOW());INSERT INTO s_user_power(su_id,sp_id,create_user,create_time) VALUES(newUserId,2,userName,NOW());INSERT INTO s_user_power(su_id,sp_id,create_user,create_time) VALUES(newUserId,3,userName,NOW());if(result=0)THENROLLBACK;ELSECOMMIT;END IF;END

db.properties文件:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false
jdbc.username=root
jdbc.password=admin123

注意:

1.数据库中存储过程返回的TINYINT(2)时,要对应上JavaBean的Boolean类型的result属性,

(1)db.properties文件的url后面加上 tinyInt1isBit=false 

(2)DAO层中的jdbcType为Boolean类型

(3)参数实体类-ProcRegistParam中必须要存在一个无参数的构造函数(默认隐藏存在),如果有参数的构造函数,会报错,这个其实在整个SSM项目都要注意!

(4)mode=IN 中的IN或者OUT必需都为大写,小写会报错

 

SSM中使用注解方式调用输入输出参数存储过程,输入参数为javabean方式,Boolean类型对应TINYINT类型相关推荐

  1. SSM中进行注解式和XML配置式事务管理

    场景 前面实现SSM简单整合以及CRUD参照: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/85161018 SSM中配置事务管 ...

  2. MySQL的存储过程——输入参数(in)、输出参数(out)、输入输出参数(inout)

    目录 什么是存储过程? 特点 语法格式 局部变量 用户变量 系统变量 查看修改全局变量 查看修改会话变量 传入参数 输出参数 修改传入参数值 每文一语 什么是存储过程? MySQL 5.0 版本开始支 ...

  3. php mssql 存储过程 输入参数,MSSQL_SQL Server存储过程中使用表值作为输入参数示例,在2008之前如果我们想要将表作 - phpStudy...

    SQL Server存储过程中使用表值作为输入参数示例 在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML ...

  4. html输入参数,传递输入参数,通过Html.ActionLink

    控制器的方法当用户点击Html.ActionLink,我需要调用一个控制器的方法,将下载该用户的csv报告.我还需要将这个控制器的值从两个输入框中传递出来,它们表示他们正在查找的开始日期和结束日期范围 ...

  5. SQL Server存储过程输入参数使用表值

    在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入. 在2008中提供了表值参数.使用表值参数,可以不 ...

  6. mysql存储过程输入参数拆分_一文看懂mysql数据库存储过程、函数、视图、触发器、表...

    概述 抽空总结一下mysql的一些概念性内容,涉及存储过程.函数.视图.触发器等. 一.查看存储过程.函数.视图.触发器.表 1.存储过程 select * from mysql.proc where ...

  7. mysql存储过程输入参数拆分_mysql 存储过程字符分割

    s_str varchar(2000), s_split varchar(2) begin /*split分割字符串并放入临时表*/ declare lenstr int ; declare resu ...

  8. ASP调用带参数存储过程的几种方式

    最近有很多的朋友问到调用存储过程的问题,这里简单介绍几种ASP调用带参数存储过程的方法. 1. 这也是最简单的方法,两个输入参数,无返回值: set connection = server.creat ...

  9. ASP调用带参数存储过程的几种方式 (转)

    最近有很多的朋友问到调用存储过程的问题,这里简单介绍几种ASP调用带参数存储过程的方法. 1. 这也是最简单的方法,两个输入参数,无返回值: set connection = server.creat ...

最新文章

  1. oracle 函数 disk,Oracle能够识别asm diskgroup,但却不能够访问disk
  2. ICML新研究提出泛化能力评估新指标:直接上向量余弦距离就OK,还开源了相关代码...
  3. java jfreechart下载_jfreechart下载-JFreeChart下载安装[java图表插件]-PC下载网
  4. 线程池的原理和连接池的原理
  5. 关于有多个Fragment中的textview跑马灯问题
  6. ImportError: No module named six
  7. js中的onscroll的用法
  8. 微软服务器补丁每月几号发布,微软补丁日安全通告 |9 月份
  9. web项目 压力测试
  10. Unity之A星算法
  11. 智慧交通:数字孪生三维可视化大屏管控运维平台
  12. 目前全网最详细的树莓派 Pico入门指南!
  13. C语言中file文件指针概念及其操作 (转载)
  14. css滤镜、混合模式、hls颜色值
  15. Spring AOP报错Set ‘exposeProxy‘ property on Advised to ‘true‘ to make it available问题
  16. 淘宝API item_search_jupage - 天天特价
  17. android逆向开发工程师需要掌握的技能
  18. Python:警告 的11种情况
  19. vivo手机支持html,vivo手机也能刷门禁了,只有这三款手机支持,教你如何开通使用...
  20. 代理游戏平台怎么挣钱?

热门文章

  1. C语言-库文件与头文件
  2. iphone登录不了媒体服务_ios快捷指令一键登录校园网(桂航为例,哆点认证)
  3. 学python之前要学c语言吗_学Python之前需要学c语言吗
  4. 和 远程文件夹同步_云同步实操(2)安卓端同步文件夹2
  5. hdfs用fileutil读取文件内容_MoviePy - 用Python玩转视频剪辑!(MoviePy安装及视频文件读取)
  6. Drools只执行一个规则或者执行完当前规则之后不再执行其他规则(转)
  7. POJ 1191 棋盘分割(区间DP)题解
  8. xxx is not in the sudoers file. This incident will be reported
  9. Binary Tree Zigzag Level Order Traversal
  10. 虚拟机VMware Workstation与主机间共享文件(利用虚拟光驱)