MyBatis查询返回Map示例代码
前言
有时候我们做查询,只需要返回两个string类型的字段,方便我们后续的处理.比如根据商品的code查询对应的分类的名字,需要返回一个map,key为商品code,value为商品分类对应的名称.以方便我们后续对结果集的处理.如果你直接用mybatis返回一个map,你可能会发现,结果根据不是自己需要的.这时候我们需要自己实现一个ResultHandler来实现我们想要的结果,废话不多说,直接上代码
方法如下
第一步,在mapper.xml文件当中,定义一个ResultMap
这个map当中的property的定义,是我们在定义ResultHandler的时候,需要用到的.column是我们做sql查询的时候mysql中字段的名称,注意这里不支持驼峰自动映射,比如我这里写了commodityCode,后面需要用AS来处理一下.
第二步正常的在我们的mapper.xml中写查询语句
SELECT c.commodity_codeAScommodityCode, CONCAT(tc.cate_name,',',tc1.cate_name,',',tc2.cate_name)AScateName FROM t_commoditycLEFTJOINt_categorytcONc.commodity_first_id=tc.id LEFTJOINt_categorytc1ONc.commodity_second_id=tc1.id LEFTJOINt_categorytc2ONc.commodity_third_id=tc2.id WHERE c.commodity_codeIN #[code]
注意返回类型为ResultMap,也就是我们上面定义的那个.
第三步自定义一个ResultHandler
packageorg.linuxsogood.es.statistical.handler; importorg.apache.ibatis.session.ResultContext; importorg.apache.ibatis.session.ResultHandler; importjava.util.HashMap; importjava.util.Map; /** *@authorhonway *@date2018/10/2211:49. *@bloghttp://linuxsogood.org */ publicclassMapResultHandlerimplementsResultHandler{ privatefinalMapmappedResults=newHashMap(); @Override publicvoidhandleResult(ResultContextresultContext){ Map m=(Map)resultContext.getResultObject(); mappedResults.put(m.get("key"),m.get("value")); } publicMapgetMappedResults(){ returnmappedResults; } }
第四步就是使用了,我们在service层,利用spring的自动注入,来注入mybatis的sqlSession
@Service publicclassGoodsSalesServiceImplimplementsIGoodsSalesService{ privatefinalGoodsSalesMappergoodsSalesMapper; privatefinalSqlSessionsqlSession; @Autowired publicGoodsSalesServiceImpl(GoodsSalesMappergoodsSalesMapper,SqlSessionsqlSession){ this.goodsSalesMapper=goodsSalesMapper; this.sqlSession=sqlSession; } /** *根据商品code查询商品的一二三级分类 *@paramcommodityCodeList商品code *@return返回商品和分类的映射,key为商品code,value为商品的一二三级分类,用逗号隔开 */ @Override publicMapprocessCateNameMappingByGoodsCodes(List commodityCodeList){ MapResultHandlerhandler=newMapResultHandler(); sqlSession.select("com.tramy.es.statistical.dao.GoodsSalesMapper.processCateNameMappingByGoodsCodes",commodityCodeList,handler); returnhandler.getMappedResults(); } }
使用sqlSession的select方法,第一个参数是mapper.xml文件当中定义的select的命名空间,第二个参数是需要传入的参数,如果没有可以不要这个参数.第三个是我们自定义的handler,这样就能返回我们要的map结果了.
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。