mybatis调用mysql存储过程

一.在mysql中新建test表

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test`(`name`) VALUES ('测试');

SELECT * FROM `test`;

二.新建存储过程(根据id查询name值)

DROP PROCEDURE IF EXISTS sp_test_name;   #如果存在先删除
DELIMITER $$                             #定义结束符
#创建语句: CREATE PROCEDURE 名称([IN||OUT||INOUT 参数名 数据类型])
#IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
#OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
#INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
CREATE PROCEDURE sp_test_name(IN tId BIGINT, OUT Tname VARCHAR(255))
BEGIN
    SELECT `name` INTO Tname FROM `test` WHERE id = tId;
END $$
DELIMITER ;

三.定义mapper接口

void selectBySp(Map params);

四.编写mapper.xml





    
    
        
        
    
    
    
        id, `name`
    
      
    

省略service.......

五.controller中调用

    @RequestMapping("/testSp")
    @ResponseBody
    public String sp(Integer id) {
        Map map = new HashMap();
        map.put("id", id);
        //必须有name,值可以随便填入
        map.put("name", "");             
        mapper.selectBySp(map);
        //查询map里面name的值,如果不存在则为错误!
        String userName = MapUtils.getString(map, "name", "错误!");   
        //输出为 根据id查name的值   
        System.out.println(userName+"-----");

PS:一起学习,如有错误!请多多指教!!!谢谢

你可能感兴趣的:(mybatis调用mysql存储过程)