一、無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