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();
复制代码

返回目录