springMvc+mybatis 存储过程中有mysql inout属性参数,用mybatis 注解如何调用,注意是注解不是xml

waken2300 2016-10-20 09:45:06
springMvc+mybatis 存储过程中有mysql inout属性参数,用mybatis 注解如何调用,注意是注解不是xml,
我自己已经试过 N 多方法了 无论是指定固定参数 ,还是类参数 或者 map 都不行,直接上图

这是我存储过程运行的参数,其中有一项是 inout


这是我在 mysql调用时的结果

查过资料 @a 是在mysql中 定义 变量的 , inout 属性 相当于有 返回值 ,所以 不能是具体的 int 数值 或 char 字符,只能定义一个变量。

除了第一个可以正常调用外其它的 指定了 myCount 也就是 mysql @ 位置 都会报错。
报错如下:
------------------------------------------------------------------------------------------------------------------------------------------------------------------
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: OUT or INOUT argument 1 for routine test.pagination is not a variable or NEW pseudo-variable in BEFORE trigger
### The error may exist in com/bky/dao/UserMapper.java (best guess)
### The error may involve com.bky.dao.UserMapper.getPage_json2-Inline
### The error occurred while setting parameters
### SQL: CALL pagination (?,'user','id','*',?,?,'','')
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: OUT or INOUT argument 1 for routine test.pagination is not a variable or NEW pseudo-variable in BEFORE trigger
; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: OUT or INOUT argument 1 for routine test.pagination is not a variable or NEW pseudo-variable in BEFORE trigger
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:927)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811)
javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
...全文
972 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
萌神小饭 2017-10-24
  • 打赏
  • 举报
回复
语法问题 把CALL 的执行改成 exec 就行了,我的是SQL SERVER ,今天也碰到这个问题 示例: @Select("exec np_CommonSearchMDeal #{dealId}, #{contractId}, #{customer}, #{owner}, #{address}, " + "#{financialAdvisers}, #{creditReview}, #{isEnable}, #{status}, #{userId}, #{page}, #{pageSize},#{recordCount,mode=OUT,jdbcType=INTEGER}") @Options(statementType = StatementType.CALLABLE) public List<CommonSearchMDeal> search(Map<String,Object> a);
qq_25324731 2017-09-14
  • 打赏
  • 举报
回复
请问您是怎么解决的? 我遇到的问题是:存储过程能执行,但是存储过程的返回参数(out变量)在代码中获取不到。
waken2300 2016-10-21
  • 打赏
  • 举报
回复
谢谢~~~不需要了 。我已经结决 mybats 使用注解 直接在接口 上声明 了 不需要再 xml文件 中再书写 , 有点像 jpa的形式。
waken2300 2016-10-21
  • 打赏
  • 举报
回复
第2天了。。看来真的。没人 会。。
  • 打赏
  • 举报
回复
调用存储过程的地方,里面都加上@看看
waken2300 2016-10-20
  • 打赏
  • 举报
回复
没有人会吗?还是没有人用过 注解
waken2300 2016-10-20
  • 打赏
  • 举报
回复
mysql 中 @ 是用来 声明变量的, 我这个存储过程 的问题就 在于 在 java 中调用 时 你不能直接 @+变量去调用 ,这样 通过mysql返回的 变量你 接收不到。 我已经试过 静态属性、类、其它的int 、string 、等等。

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧