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