一.在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`
{call sp_test_name(
#{id,mode=IN,jdbcType=INTEGER},
#{name,mode=OUT,jdbcType=VARCHAR}
)}
省略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:一起学习,如有错误!请多多指教!!!谢谢