内容简介:有时候我们做查询, 只需要返回两个string类型的字段,方便我们后续的处理.比如根据商品的code查询对应的分类的名字,需要返回一个map, key为商品code, value为商品分类对应的名称.以方便我们后续对结果集的处理.如果你直接用mybatis返回一个map, 你可能会发现,结果根据不是自己需要的.这时候我们需要自己实现一个ResultHandler来实现我们想要的结果,废话不多说,直接上代码第一步,在mapper.xml文件当中,定义一个ResultMap这个map当中的property的定
有时候我们做查询, 只需要返回两个string类型的字段,方便我们后续的处理.比如根据商品的code查询对应的分类的名字,需要返回一个map, key为商品code, value为商品分类对应的名称.以方便我们后续对结果集的处理.如果你直接用mybatis返回一个map, 你可能会发现,结果根据不是自己需要的.这时候我们需要自己实现一个ResultHandler来实现我们想要的结果,废话不多说,直接上代码
第一步,在mapper.xml文件当中,定义一个ResultMap
<resultMap id="cateNameMapping" type="java.util.HashMap" > <result property="key" column="commodityCode"></result> <result property="value" column="cateName"></result> </resultMap>
这个map当中的property的定义,是我们在定义ResultHandler的时候,需要用到的.column是我们做 sql 查询的时候 mysql 中字段的名称,注意这里不支持驼峰自动映射,比如我这里写了commodityCode, 后面需要用AS来处理一下.
第二步正常的在我们的mapper.xml中写查询语句
<select id="processCateNameMappingByGoodsCodes" parameterType="java.util.List" resultMap="cateNameMapping">
SELECT
c.commodity_code AS commodityCode,
CONCAT(tc.cate_name,',',tc1.cate_name, ',', tc2.cate_name) AS cateName
FROM
t_commodity c LEFT JOIN t_category tc ON c.commodity_first_id = tc.id
LEFT JOIN t_category tc1 ON c.commodity_second_id = tc1.id
LEFT JOIN t_category tc2 ON c.commodity_third_id = tc2.id
WHERE
c.commodity_code IN
<foreach collection="list" separator="," open="(" close=")" item="code">
#{code}
</foreach>
</select>
注意返回类型为ResultMap, 也就是我们上面定义的那个.
第三步 自定义一个ResultHandler
package org.linuxsogood.es.statistical.handler;
import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;
import java.util.HashMap;
import java.util.Map;
/**
* @author honway
* @date 2018/10/22 11:49.
* @blog http://linuxsogood.org
*/
public class MapResultHandler implements ResultHandler {
private final Map<String ,String> mappedResults = new HashMap();
@Override
public void handleResult(ResultContext resultContext) {
Map<String ,String> m = (Map) resultContext.getResultObject();
mappedResults.put(m.get("key"), m.get("value"));
}
public Map getMappedResults() {
return mappedResults;
}
}
第四步 就是使用了, 我们在service层, 利用spring的自动注入,来注入mybatis的sqlSession
@Service
public class GoodsSalesServiceImpl implements IGoodsSalesService {
private final GoodsSalesMapper goodsSalesMapper;
private final SqlSession sqlSession;
@Autowired
public GoodsSalesServiceImpl(GoodsSalesMapper goodsSalesMapper, SqlSession sqlSession) {
this.goodsSalesMapper = goodsSalesMapper;
this.sqlSession = sqlSession;
}
/**
* 根据商品code查询商品的一二三级分类
* @param commodityCodeList 商品code
* @return 返回商品和分类的映射, key为商品code, value为商品的一二三级分类,用逗号隔开
*/
@Override
public Map<String, String> processCateNameMappingByGoodsCodes(List<String> commodityCodeList) {
MapResultHandler handler = new MapResultHandler();
sqlSession.select("com.tramy.es.statistical.dao.GoodsSalesMapper.processCateNameMappingByGoodsCodes",commodityCodeList ,handler);
return handler.getMappedResults();
}
}
使用sqlSession的select方法,第一个参数是mapper.xml文件当中定义的select的命名空间, 第二个参数是需要传入的参数,如果没有可以不要这个参数.第三个是我们自定义的handler, 这样就能返回我们要的map结果了.
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Algorithms on Strings, Trees and Sequences
Dan Gusfield / Cambridge University Press / 1997-5-28 / USD 99.99
String algorithms are a traditional area of study in computer science. In recent years their importance has grown dramatically with the huge increase of electronically stored text and of molecular seq......一起来看看 《Algorithms on Strings, Trees and Sequences》 这本书的介绍吧!