美文网首页
mybatis调用mysql存储过程

mybatis调用mysql存储过程

作者: 你所热爱的 | 来源:发表于2019-01-02 18:05 被阅读0次

一.在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<String, Object> params);

四.编写mapper.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="mapper全限定名">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="实体类全限定名">
        <id column="id" property="id" />
        <result column="name" property="name" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, `name`
    </sql>
      <!-- 执行存储过程 必须使用  statementType="CALLABLE";  -->
    <select id="selectBySp" statementType="CALLABLE">
          <!-- 关键字 { call 存储过程名称([参数]) }-->
        {call sp_test_name(
        #{id,mode=IN,jdbcType=INTEGER},
        #{name,mode=OUT,jdbcType=VARCHAR}
        )}
    </select>
</mapper>

省略service.......

五.controller中调用

    @RequestMapping("/testSp")
    @ResponseBody
    public String sp(Integer id) {
        Map<String, Object> map = new HashMap<String, Object>();
        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存储过程

      本文链接:https://www.haomeiwen.com/subject/sdsplqtx.html