MyBatis 返回 Map,查询字段两列分别作为 key 和 value

版权声明: https://blog.csdn.net/Dongguabai/article/details/90246717

之前写过一篇博客,MyBatis 返回 Map 类型的结果(https://blog.csdn.net/Dongguabai/article/details/79580200),这种直接返回 Map 的结果,返回的结果是这样:

结果是返回一个 Map,Map 的 Entry 为“字段名-字段值,字段名-字段值”。

但是有时候我们需要的是返回的是 key-value,key 和 value 是返回的两列数据的映射关系。这时候可以这么做:

自定义 Handler 实现 ResultHandler:

/**
 * @author dongguabai
 * @Description
 * @Date 创建于 2019-05-15 22:14
 */
public class MapResultHandler implements ResultHandler {
    private final Map mappedResults = new HashMap();

    @Override
    public void handleResult(ResultContext context) {
        @SuppressWarnings("rawtypes")
        Map map = (Map)context.getResultObject();
        mappedResults.put(map.get("key"), map.get("value"));
    }

    public Map getMappedResults() {
        return mappedResults;
    }
}

Mapper(为了特别说明当方法带有参数的时候的情况,这里加了一个查询的 Query):

public interface UserAccountMapper extends BaseMapper<UserAccount> {

    Map<String,String> testType(UserQuery query);
}

xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zj.bda.persistence.mapper.UserAccountMapper">


    <resultMap id="mapResult" type="java.util.HashMap">
        <result property="key" column="username"/>
        <result property="value" column="balance" />
    </resultMap>

    <select id="testType" parameterType="com.zj.bda.persistence.query.UserQuery" resultMap="mapResult">
        select username,balance from user_account where username = #{username} and balance = #{balance}

    </select>

</mapper>

数据库:

测试:

/**
 * @author Dongguabai
 * @date 2018/10/8 10:25
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootSpringTest {

    @Autowired
    private SqlSessionFactory sqlSessionFactory;

    @Test
    public void test2(){
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        MapResultHandler handler = new MapResultHandler();
        UserQuery userQuery = new UserQuery("zhangsan",2000);
        sqlSession.select("com.zj.bda.persistence.mapper.UserAccountMapper.testType",userQuery,handler);
        //获取结果
        handler.getMappedResults().forEach((k,v)-> System.out.println("k:"+k+",v:"+v));
    }}

猜你喜欢

转载自blog.csdn.net/Dongguabai/article/details/90246717
今日推荐