Mybatis使用小技巧-自定义结果集

2,604 阅读1分钟

mybatis默认结果集封装逻辑是将一行数据封装成一个javabean,多行数据封装成List。如果我们想要自己定义,该咋办呢?

举个没啥用的示例

现数据库有表如下:

userid name
1 liuyu
2 tong
3 jeccy

一般情况下我们会定义javabean:

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

sql语句:

    //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直接获取就成。

改造如下,自定义结果集处理器:

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中方法需要做如下修改:

//返回值必须为void,将ResultHandler作为参数传入。
void getUser(ResultHandler<User> handler);

sql语句和resultmap不需要修改,这样我们就可以直接获取一个map的结果集了。

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

返回目录