mybatis调用mysql的存储过程(procedure),实现查询操作(student表中的某个年级中的总人数 select (1) 或者 select (*))

step1:在mysql cmd中新建存储过程:

drop procedure if exists queryCountByGrade ;

delimiter // -- 定义存储过程结束符号为//
create procedure queryCountByGrade(IN gradenameinput INT(11),OUT counts int(11)
begin
select count(*) into counts from student where grade = gradenameinput;end //

delimiter ; --重新定义存储过程的结束符号是分号

step2:编写StudentMapper.xml文件

<!-- 通过mybatis调用存储过程procedure,来实现查询功能  ,statementType="CALLABLE" -->
    <select id="queryCountByGradeWithProcedure" statementType="CALLABLE" parameterType="HashMap">
          CALL queryCountByGrade( #{gradenameinput,mode=IN,jdbcType=VARCHAR}, #{counts,mode=OUT,jdbcType=INTEGER} 
                //queryCountByGrade:就是mysql存储过程名称
) </select>

step3:编写StudentManager.java 接口文件

//使用存储过程实现查询的操作
    void queryCountByGradeWithProcedure(Map<String,Object> mapp);

step4:测试函数

/**
	 * 使用存储过程实现数量的查询,某个年级的人数
	 * @param args
	 * @throws IOException
	 */
	/**
	 * 带转换器
	 * @throws IOException
	 */
	public static void throughProcedureToQueryCountByGradeName() throws IOException
	{
		Reader reader = Resources.getResourceAsReader("conf.xml");

		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);

		SqlSession session  =  sessionFactory.openSession();//就是session名字即可

		StudentManager studentManager = session.getMapper(StudentManager.class);

		Map<String ,Object>mapp = new HashMap();//通过Map给存储过程,指定输入参数gradenameinput         //gradenameinput和counts都是mysql中存储过程定义时候的,名称,跟CALL queryCountByGrade(#{},#{})里的是一致的
		mapp.put("gradenameinput", 5);//指定存储过程的出入参数gradenameinput,是5

		studentManager.queryCountByGradeWithProcedure(mapp);//调用存储过程

		Object obj = mapp.get("counts");//获取存储过程的输出参数:counts

		System.out.println(obj);
		session.close();

	}//queryonestudentwithconverser()

  

原文地址:https://www.cnblogs.com/guofen3399/p/11830305.html

时间: 2024-11-08 02:27:01

mybatis调用mysql的存储过程(procedure),实现查询操作(student表中的某个年级中的总人数 select (1) 或者 select (*))的相关文章

调用MySql 分页存储过程带有输入输出参数

1 Create PROCEDURE getuser 2 ( 3 IN pageIndex INT, 4 IN pageSize INT, 5 OUT count INT 6 ) 7 8 BEGIN 9 declare pindex int DEFAULT (pageIndex-1)*pageSize; 10 11 select * from lc_user order by id LImit pindex,pageSize; 12 13 SELECT COUNT(id) INTO count

微软企业库5.0 调用 MySql 分页存储过程

1.需要完成两个前置条件后才可以使用 微软企业库5.0 调用 MySql 存储过程 微软企业库5.0 支持 MySql MySql 分页存储过程 2.需要添加一个继承 IParameterMapper 接口的类分配查询参数 using System.Data; using System.Data.Common; using Microsoft.Practices.EnterpriseLibrary.Data; using Grass.Extend; namespace Grass.MySqlDa

使用shell脚本调用mysql数据库存储过程,并设置定时任务

本来是要mysql数据库中创建事件任务来,定时执行存储过程,做数据传输的...后来由于种种原因,就使用crontab来定时执行,调用存储过程. 实现这个数据传输分为两步: 第一步:编写shell脚本调用mysql数据库存储过程,如下: #!/bin/bash#0 1 * * * sh /home/drmTrans3/rj_proc.shhost1=127.0.0.1user=systempasswd=linuxport=3306mysql -h${host1} -u${user} -p${pas

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

C语言调用mysql的存储过程

本篇文章讲解C语言调用mysql数据库的存储过程的方法 下面假设有一张sc表,保存学生选课记录,有课程号,学号,平时分,卷面分,总分. 建立数据库表过程: create table class( cno varchar(8) not null, sno varchar(8) not null, ordinary_score int, last_score int, all_score int ); 存储过程 由括号包围的参数列必须总是存在.如果没有参数,也该使用一个空参数列().每个参数 默认都

java 调用mysql的存储过程(简单示例)

首先我在mysql的test数据库里定义了一个student表: create table student4( id   int   primary key, sanme char(5) ); 插入几个数据做测试用: inset into student values(1,'mayi'); inset into student values(2,'mayi'); inset into student values(3,'mayi'); 建立存储过程: in 型: delimiter // cre

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

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