mybatis调用mysql存储过程返回结果集

存储过程中经常需要返回结果集。 Mysql 中直接用 select 即可返回结果集。而 oracle 则需要使用游标来返回结果集。这一点 Mysql 相对比较方便,如下代码即可实现输出结果集:

存储过程定义:

DELIMITER $$
DROP procedure IF EXISTS pro_sql_data1 $$
CREATE procedure pro_sql_data1(in sear_name  varchar(2000))
BEGIN
	if sear_name is not null and sear_name!='' then
		select id,name,date_format(create_time,'%Y-%m-%d') as repDate from ad_place where
		name like concat('%',sear_name,'%');
	ELSE
		select id,name,date_format(create_time,'%Y-%m-%d') as repDate from ad_place;
	end if;

END$$
DELIMITER; 

执行结果:

在mybatis中调用存储过程,然后获取该结果集:

1、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.ifeng.iis.bean.iis.Report" >
	<resultMap type="java.util.HashMap" id="resultMap">
       <result column="id" property="id" javaType="java.lang.Integer" jdbcType="INTEGER"/>
       <result column="name" property="name" javaType="java.lang.String" jdbcType="VARCHAR"/>
       <result column="repDate" property="repDate" javaType="java.lang.String" jdbcType="VARCHAR"/>
       <result column="summ" property="summ" javaType="java.lang.Long" jdbcType="BIGINT"/>
    </resultMap>

	<select id="test123" parameterType="java.util.Map"  resultMap="resultMap" statementType="CALLABLE" >
      {call pro_sql_data(
	      #{obj,jdbcType=VARCHAR,mode=IN}
	   )
      }
    </select>
</mapper>

java代码

public String query(String param) throws Exception {
		logger.info(param);
		Map queryMap = new HashMap();
		queryMap.put("obj", param);
		//List<Map> listIis1 = reportDao.select4MapParam(queryMap, "currentSql");

		List<Map> listIis2 =reportDao.select4MapParam(queryMap,"test123");

		return JSONArray.fromObject(listIis2).toString();
	}

注:有上面可知,mysql存储过程中可以直接使用select语句返回结果集,而且mybatis可以直接使用list接收这个结果集(无需游标)。

参考文章:http://yhjhappy234.blog.163.com/blog/static/316328322012455714892/

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 21:31:52

mybatis调用mysql存储过程返回结果集的相关文章

mybatis调用mysql存储过程返回多结果集(完整)

最近,有个开发提了个需求,希望中间件支持调用mysql存储过程时支持多结果集返回,因为某些原因我们使用了不少的存储过程,很多复杂的逻辑目前来看交互非常的多,所以从当前的现状来说,这个需求还是蛮合理的.中午抽空特地搜了下,整合完整示例如下: 1.创建测试存储过程 delimiter $$ CREATE PROCEDURE sp_multi_resultset(IN p_operator_company_no int, IN p_operator_no int, OUT p_error_code v

python 调用mysql存储过程返回结果集

存储过程: delimiter | create procedure get_product_info(in imid int(10),int iuser varchar(20)) begin select * from tb_test where mid = imid and user = iuser; end; | delimiter ; python调用: import mysql.connector cnx = mysql.connector.connect( user='test',p

springmvc+mybatis 调用oacle 存储过程返回游标!

oracle存储过程如下: HB_SAVE_MSG.P_QUERY_QUESTION_OF_QTA PROCEDURE P_QUERY_QUESTION_OF_QTA ( v_PaperID IN NUMBER, v_myCursor out MYCURSOR, v_optCursor out MYCURSOR ) IS BEGIN OPEN v_myCursor FOR SELECT A.QUESTION_ID,A.CONTENT,A.QTYPE_ID FROM T_QUESTION A IN

mybatis 调用mysql存储过程 带输出输入参数

http://lohasle.iteye.com/blog/1669879 存储过程都是一样的,只是根据自己的喜好,可以用MAP或者JAVABEAN传递参数. Sql代码   -- -------------------------------------------------------------------------------- -- Routine DDL -- Note: comments before and after the routine body will not be

mybatis调用mysql存储过程

返回类似 select *from 的做法过程:create procedure selectAll()BEGINselect * from user;end xml配置:<select id="selectall" resultType="map" statementType="CALLABLE"> {call selectAll()} </select> java配置://service层调用List<Map&l

JFinal调用Oracle存储过程返回结果集

表结构 存储过程 CREATE OR REPLACE PROCEDURE TEST3(TID IN INTEGER,O OUT SYS_REFCURSOR) AS BEGIN IF(TID>0) THEN OPEN O FOR SELECT * FROM XHSCK.T_ADMINISTRATIVE_LEVEL T WHERE T.ADMINISTRATIVE_LEVEL_ID = TID; ELSE OPEN O FOR SELECT * FROM XHSCK.T_ADMINISTRATIVE

mybatics 中调用mysql存储过程。

说起mybatics 框架,身边的java开发工程师们基本上都是耳熟能详. mybatics是apache的一个开源项目,前身为ibatics,2010年此项目由apache软件基金会迁移到了google code,mybatics的确是一款十分优秀的开源持久层框架,sql代码隔离封装.自动POJO映射.jdbc 动态sql---- mybatics的好处可以说出一箩筐,然而mybatics还有一个十分优秀的特性却往往被人忽略 ----那就是mybatics还支持存储过程的调用. 不熟悉存储过程

Golang 用go-sql-driver 调用MySQL存储过程时的问题排查

今天在用go-sql-driver做MySQL driver调用MySQL的存储过程时遇到一个罕见的报错.本文对这个错误及其解做一个简单的总结. 1 问题描述 按照go中sql包提供的接口,应用层代码调用MySQL存储过程的代码一般如下所示: result, err := dbh.Exec("call some_procedure(?, ?)", param1, param2) if err != nil { // error handler } // using result...

Mybatis调用PostgreSQL存储过程实现数组入参传递

注:本文来源于 < Mybatis调用PostgreSQL存储过程实现数组入参传递  > 前言 项目中用到了Mybatis调用PostgreSQL存储过程(自定义函数)相关操作,由于PostgreSQL自带数组类型,所以有一个自定义函数的入参就是一个int数组,形如: CREATE OR REPLACE FUNCTION "public"."func_arr_update"(ids _int4)... 1 如上所示,参数是一个int数组,Mybatis提