关于mybatis调用存储过程获取返回值问题

总体思路:map传值

controller:

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

service:

@Override
    public Object bindCard(Map<String,Object> m) {
        try {
            return cardMapper.bindCard(m);
        } catch (Exception e) {
            e.printStackTrace();
            return new HashMap<String,Object>();
        }
    }

mapper:

Object bindCard(Map<String, Object> map) throws Exception;

<select id="bindCard" parameterType="map" statementType="CALLABLE" resultType="java.lang.Object">
    <![CDATA[
    {call P_CardBindIdCardNo(
    #{name,mode=IN,jdbcType=VARCHAR},
    #{password,mode=IN,jdbcType=VARCHAR},
    #{result,mode=OUT,jdbcType=BIT},
    #{msg,mode=OUT,jdbcType=VARCHAR}
    )}
  ]]>
</select>

20180522另一种方法:

mapper:

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

service

List<Map<String, Object>> getQuestionAnswerByModulesId(int modulesId,String patientCode);

@Override
    public List<Map<String, Object>> getQuestionAnswerByModulesId(int modulesId,String patientCode) {
        try {
            return naireMapper.getAnswerByModulesId(modulesId,patientCode);
        } catch (Exception e) {
            logger.error("getQuestionByModulesId异常!",e);
            return new ArrayList<Map<String,Object>>();
        }
    }

controller

@RequestMapping(value = "/getQuestionAnswerByModulesId", method = RequestMethod.POST)
    @ResponseBody
    public JSONObject getQuestionAnswerByModulesId(HttpServletRequest req,int modulesId) {
        JSONObject json = new JSONObject();
        try {
            @SuppressWarnings("unchecked")
            Map<String,Object> map=(Map<String,Object>)req.getSession().getAttribute("user");
            List<Map<String, Object>> list = naireService.getQuestionAnswerByModulesId(modulesId,(String)map.get("PatientCode"));
            json.put("questionList", list);
            json.put("result", true);
            json.put("msg", "获取相应模块成功!");
        } catch (Exception e) {
            json.put("result", false);
            json.put("msg", "获取相应模块失败!");
            logger.error("getQuestionByModulesId异常!", e);
        }
        return json;
    }

20180810:

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

20181023

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

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

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

(0)

相关推荐

  • 关于Mybatis 中使用Mysql存储过程的方法

    1.存储过程的简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的存储过程可以看做是对编程中

  • Mybatis Select Count(*)的返回值类型介绍

    目录 Select Count(*)的返回值类型 返回Count(*)的整数值 Select Count(*)的返回值类型 <select id="queryAlarmStatisticalAnalysis4System" parameterType="AlarmMailSendLog" resultType="java.lang.Integer"> select count(*) from mon_alarm_mail_send_l

  • mybatis调用sqlserver存储过程返回结果集的方法

    第一种:返回值通过out输出 sqlserver存储 testMapper.xml 两种都能接收到数据的, 因为我的实体类字段与数据库的不一致,上面图片是按照数据库字段定义的,下图是按照实体类定义的,接收输出参数是按照你定义的名称返回 serviceImpl Map<String,String> objectsMap = new HashMap<>(); objectsMap.put("sno","123"); objectsMap.put(

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

    使用存储过程,在操作数据库时开启事务,避免并发时同时操作造成数据重复 CREATE DEFINER=`root`@`localhost` PROCEDURE `GetSerialNo`(IN tsCode VARCHAR(50),OUT result VARCHAR(200) ) BEGIN DECLARE tsValue VARCHAR(50); DECLARE tdToday VARCHAR(20); DECLARE nowdate VARCHAR(20); DECLARE tsQZ VAR

  • 关于mybatis resulttype 返回值异常的问题

    mybatis resulttype 返回值异常 在使用mybatis时.resulttype返回自定义的类时,可能返回的类中字段数据存在缺失. 例如:resulttype = "student" 但是当中有些字段为空 原因是因为数据库字段和实体类字段不对应导致的. mybatis底层 查询数据返回会更据数据库的字段和实体类的字段进行匹配,不区分大小写.但是字段不一样就无法传递值 例如:数据库字段为:s_name 实体类字段为 name 处理方式1: 在查询时添加别名 select s

  • 关于mybatis调用存储过程获取返回值问题

    总体思路:map传值 controller: Map<String,Object> m=new HashMap<String,Object>(); m.put("name", 'zs'); m.put("password", '55555'); cardservice.bindCard(m); JSONObject json=new JSONObject(); //获得返回值 json.put("msg", m.get(&

  • mybatis调用mysql存储过程并获取返回值方式

    目录 mybatis调用mysql存储过程并获取返回值 1.mysql创建存储过程 2.mybatis调用 mybatis调存储过程遇到返回值null的坑 mybatis调存储过程时返回值null mybatis调用mysql存储过程并获取返回值 1.mysql创建存储过程 #结束符号默认;, delimiter $$语句表示结束符号变更为$$ delimiter $$ CREATE PROCEDURE `demo`(IN inStr VARCHAR(100), out ourStr VARCH

  • 前端传参数进行Mybatis调用mysql存储过程执行返回值详解

    目录 查询数据库中的存储过程: 方法一: select `name` from mysql.proc where db = 'your_db_name' and `type`; = 'PROCEDURE' 方法二:  show procedure status; 你要先在数据库中建一个表,然后创建存储过程 我建的表a_tmp,存储过程名称bill_a_forbusiness 执行语句:  CALL bill_a_forbusiness(44,44,52,47,44,46,52,52,349171

  • android webview中使用Java调用JavaScript方法并获取返回值

    在android平板上用webview打开一个网页,调用里面的javascript方法,同时相互传参. 网上例子很少啊,基本都不能获取返回值,贴一个自己最后调试完的代码如下: Java: 复制代码 代码如下: protected void onCreate(Bundle savedInstanceState) { ........ x = (WebView)this.findViewById(R.id.webView_viewTable); x.setScrollBarStyle(View.SC

  • mybatis调用存储过程的实例代码

    一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 create table p_user( id int primary key auto_increment, name varchar(10), sex char(2) ); insert into p_user(name,sex) values('A',"男"); insert into p_user(name,sex) values('B',"女"); ins

  • python在回调函数中获取返回值的方法

    python中有用到回调函数的时候,而回调函数又需要返回数值的时候,就需要先将所被传为回调函数的函数先赋值给一个变量,然后等回调结束之后,将这个变量取值回来就可以了. 如我用到到的调用xmlreader时,传入的一个函数需要取回返回值的代码: # 创建一个 XMLReader parser = xml.sax.make_parser() # turn off namepsaces parser.setFeature(xml.sax.handler.feature_namespaces, 0) #

  • Python多线程获取返回值代码实例

    这篇文章主要介绍了Python多线程获取返回值代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在使用多线程的时候难免想要获取其操作完的返回值进行其他操作,下面的方法以作参考: 一,首先重写threading类,使其满足调用特定的方法获取其返回值 import threading class MyThread(threading.Thread): """重写多线程,使其能够返回值""" d

  • mybatis中实现让返回值与bean中字段相匹配

    1. 编写目的 这个介绍的与那些修改mybatis.xml文件的方法不一样,目的也不一样. 当我们需要查询的数据跟entity的bean完全不匹配的时候(比如说需要统计的时候),我们不可能写多个dao层的查询接口,然后一个一个map到xml中去. 我们可以专门写一个类,根据自己的需要把统计的属性都写到里面去,然后一次性查询,就可以获得所有需要统计的数据. 2. 重要方法 专门编写一个实体类.实体类中包含的都是自己需要统计的属性. 编写dao层的接口方法的返回值就是这个实体类. 在映射的map.x

  • 解决python 执行shell命令无法获取返回值的问题

    问题背景:利用python获取服务器中supervisor状态信息时发现未能获取到返回值. python获取执行shell命令后返回值得几种方式: # 1.os模块 ret = os.popen("supervisorctl status") ret_data = ret.read() # 2.subprocess模块 ret = subprocess.Popen('supervisorctl status',shell=True,stdout=subprocess.PIPE) out

  • 解决feignClient调用时获取返回对象类型匹配的问题

    feignClient调用时获取返回对象类型匹配 feignClient是springCloud体系中重要的一个组件,用于微服务之间的相互调用,底层为httpClient,在之前的应用中,我一直以为A服务提供的方法返回类型为对象的话,那么调用A服务的B服务必须也用字段类型以及命名完全相同的对象来接收,为此我验证了一下,发现不是必须用完全相同的对象来接收,比如,可以用map<String,Object>或者Object来接收,然后解析. 当然,复杂对象我还是推荐用一个完全相同的对象来接收. 下面

随机推荐