step1:在mysql cmd中新建存储过程:java
drop procedure ifexists queryCountByGrade ;
delimiter//-- 定义存储过程结束符号为//
create procedure queryCountByGrade(IN gradenameinput INT(11),OUT counts int(11)
beginselect count(*) into counts from student where grade = gradenameinput;end //delimiter ;--从新定义存储过程的结束符号是分号
step2:编写StudentMapper.xml文件mysql
CALL queryCountByGrade( #{gradenameinput,mode=IN,jdbcType=VARCHAR}, #{counts,mode=OUT,jdbcType=INTEGER}
//queryCountByGrade:就是mysql存储过程名称
)
step3:编写StudentManager.java 接口文件sql
//使用存储过程实现查询的操做
void queryCountByGradeWithProcedure(Map mapp);
step4:测试函数session
/**
* 使用存储过程实现数量的查询,某个年级的人数
* @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);
Mapmapp = 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()