mybatis入門篇(七):存儲過程的操做

一、無ResultType/ResultMap查詢java

先定義一個查詢的存儲過程:sql

DELIMITER //
CREATE PROCEDURE `select_user_by_id`( IN userId BIGINT, OUT userName VARCHAR(50), OUT headImg BLOB, OUT createTime DATETIME )
BEGIN
SELECT user_name, head_img, create_time
INTO userName, headImg, createTime
FROM user
WHERE id=userId;
END
//
DELIMITER ;

編寫mapper接口和xml:緩存

public interface UserMapper {
    void selectUsersById(User user);
}

注:存儲過程不支持緩存,爲了不緩存配置出錯,此處加上useCache=「false」。另外,OUT的參數須要悉數加上jdbcType,由於IN模式下,mybatis指定了jdbcType;同時,對於BLOB格式的參數,須要加上javaType,在mybatis映射的java類中,不建議使用基本類型。blob一般用byte[]表示,故寫成_byte[]。(_byte對應byte類型;byte對應Byte類型。)mybatis

<select id="selectUsersById" statementType="CALLABLE" useCache="false">
    {call select_user_by_id(
        #{id, mode=IN},
        #{userName, mode=OUT, jdbcType=VARCHAR},
        #{headImg, mode=OUT, jdbcType=BLOB, javaType=_byte[]},
        #{createTime, mode=OUT, jdbcType=TIMESTAMP}
    )}
</select>

調用測試:app

@Test
public void UserMapperTest(){
    SqlSession sqlSession = getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    User user = new User();
    user.setId(2L);
    System.out.println(user.getUserName());
    System.out.println(user.getHeadImg());
    System.out.println(user.getCreateTime());
    userMapper.selectUsersById(user);
    System.out.println("----------------------------------");
    System.out.println(user.getUserName());
    System.out.println(user.getHeadImg());
    System.out.println(user.getCreateTime());
}

調試結果:測試

二、含ResultType/ResultMap查詢調試

DELIMITER $$
CREATE PROCEDURE `select _user_page`(IN _offset BIGINT, IN _limit BIGINT, OUT total BIGINT)
BEGIN
    #查詢數據總數
    SELECT COUNT(*)  INTO total FROM user;
        #分頁查詢數據
        SELECT * FROM user LIMIT _offset, _limit;
END
$$
DELIMITER $$

編寫mapper接口和xmlrest

public interface UserMapper {
    List<User> selectUsersPage(Map<String,Integer> map);
}
<select id="selectUsersPage" statementType="CALLABLE" useCache="false"
          resultType="com.forest.owl.entity.User">
    {call select_user_page(
        #{offset, mode=IN},
        #{limit, mode=IN},
        #{totalCount, mode=OUT, jdbcType=BIGINT, javaType=Integer}
    )}
</select>
@Test
public void UserMapperTest(){
    SqlSession sqlSession = getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("offset", 0);
    map.put("limit",2);
    List<User> userList = userMapper.selectUsersPage(map);
    System.out.println(userList.size());
    System.out.println(map.get("totalCount"));
}

運行結果:code

相關文章
相關標籤/搜索