Mybatis使用小技巧-自定義結果集

mybatis默認結果集封裝邏輯是將一行數據封裝成一個javabean,多行數據封裝成List。若是咱們想要本身定義,該咋辦呢?java

舉個沒啥用的示例

現數據庫有表以下:sql

userid name
1 liuyu
2 tong
3 jeccy

通常狀況下咱們會定義javabean:數據庫

public class User {
    private Integer user_id;
    private String name;
}

複製代碼

sql語句:bash

//mapper方法
    List<User> getUser();

    <resultMap id="user" type="org.mybatis.***.mapper.User">
        <result column="user_id" property="user_id"/>
        <result column="name" property="name"/>
    </resultMap>
    <select id="getUser" resultMap="user">
        select user_id,name from develop_test
    </select>
複製代碼

這樣的話取出的結果集是一個list,可是像這種只有兩列數據的,map顯然更適合操做,好比我想獲取id爲2的name,list須要遍歷,map直接獲取就成。mybatis

改造以下,自定義結果集處理器:app

public class MapHandle implements ResultHandler<User> {

    private Map<Integer,String> result = new HashMap<>();

    @Override
    public void handleResult(ResultContext<? extends User> resultContext) {
        User user = resultContext.getResultObject();
        result.put(user.getUser_id(),user.getName());
    }

    public Map<Integer, String> getResult() {
        return result;
    }
}
複製代碼

mapper中方法須要作以下修改:ide

//返回值必須爲void,將ResultHandler做爲參數傳入。
void getUser(ResultHandler<User> handler);
複製代碼

sql語句和resultmap不須要修改,這樣咱們就能夠直接獲取一個map的結果集了。post

MapHandle handle = new MapHandle();
mapper.getUser(handle);
Map<Integer, String> result = handle.getResult();
複製代碼

返回目錄

相關文章
相關標籤/搜索