经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MyBatis » 查看文章
关于mybatis调用存储过程获取返回值问题
来源:jb51  时间:2022/1/17 12:17:08  对本文有异议

总体思路:map传值

controller:

  1. Map<String,Object> m=new HashMap<String,Object>();
  2. m.put("name", 'zs');
  3. m.put("password", '55555');
  4. cardservice.bindCard(m);
  5. JSONObject json=new JSONObject();
  6. //获得返回值
  7. json.put("msg", m.get("msg"));
  8. json.put("result", m.get("result"));

service:

  1. @Override
  2. public Object bindCard(Map<String,Object> m) {
  3. try {
  4. return cardMapper.bindCard(m);
  5. } catch (Exception e) {
  6. e.printStackTrace();
  7. return new HashMap<String,Object>();
  8. }
  9. }

mapper:

  1. Object bindCard(Map<String, Object> map) throws Exception;
  2.  
  3.  
  4. <select id="bindCard" parameterType="map" statementType="CALLABLE" resultType="java.lang.Object">
  5. <![CDATA[
  6. {call P_CardBindIdCardNo(
  7. #{name,mode=IN,jdbcType=VARCHAR},
  8. #{password,mode=IN,jdbcType=VARCHAR},
  9. #{result,mode=OUT,jdbcType=BIT},
  10. #{msg,mode=OUT,jdbcType=VARCHAR}
  11. )}
  12. ]]>
  13. </select>

20180522另一种方法:

mapper:

  1. List<Map<String, Object>> getAnswerByModulesId(@Param("modulesId")int modulesId,@Param("patientCode")String patientCode) throws Exception;
  2. <select id="getAnswerByModulesId" resultType="map" statementType="CALLABLE" >
  3. EXEC getAnswerByModulesId #{modulesId},#{patientCode}
  4. </select

service

  1. List<Map<String, Object>> getQuestionAnswerByModulesId(int modulesId,String patientCode);
  2.  
  3. @Override
  4. public List<Map<String, Object>> getQuestionAnswerByModulesId(int modulesId,String patientCode) {
  5. try {
  6. return naireMapper.getAnswerByModulesId(modulesId,patientCode);
  7. } catch (Exception e) {
  8. logger.error("getQuestionByModulesId异常!",e);
  9. return new ArrayList<Map<String,Object>>();
  10. }
  11. }

controller

  1. @RequestMapping(value = "/getQuestionAnswerByModulesId", method = RequestMethod.POST)
  2. @ResponseBody
  3. public JSONObject getQuestionAnswerByModulesId(HttpServletRequest req,int modulesId) {
  4. JSONObject json = new JSONObject();
  5. try {
  6. @SuppressWarnings("unchecked")
  7. Map<String,Object> map=(Map<String,Object>)req.getSession().getAttribute("user");
  8. List<Map<String, Object>> list = naireService.getQuestionAnswerByModulesId(modulesId,(String)map.get("PatientCode"));
  9. json.put("questionList", list);
  10. json.put("result", true);
  11. json.put("msg", "获取相应模块成功!");
  12. } catch (Exception e) {
  13. json.put("result", false);
  14. json.put("msg", "获取相应模块失败!");
  15. logger.error("getQuestionByModulesId异常!", e);
  16. }
  17. return json;
  18. }

20180810:

注意,切换数据源时,调用存储过程时不能开启事物,否则不能切换数据源

20181023

今天要获得存储过程的返回值,但不想用call方法感觉太麻烦,网上也没找到资料,研究了一下可如此解决:

  1. <select id="getUpdateHumanDisease" resultType="java.lang.String">
  2. declare @result varchar(50)
  3. exec updateHumanDisease #{0},#{1},#{2},@result output
  4. select @result
  5. </select>

到此这篇关于mybatis调用存储过程获取返回值的文章就介绍到这了,更多相关mybatis获取返回值内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号