直接resultType 可以為map 但是 是以查詢的字段作為key, 值為value,有時候想讓值為key-value,所以還是有缺陷
編寫select 普通查詢語句
<select id="findOrderWaitissue" parameterType="list" resultMap="getAllSetDaysResult"> SELECT FPQQLSH SP_FPARAMEKEY,GROUP_CONCAT(ddh) SP_FPARAMEVALUE FROM `t_inv_orders_waitissue` where FPQQLSH in <foreach collection="list" item="item" separator="," open="(" close=")"> #{item.fpqqlsh} </foreach> GROUP BY FPQQLSH </select>
定義resultMap ,在里面對字段設置key,value
<resultMap id="getAllSetDaysResult" type="HashMap"> <result property="key" column="SP_FPARAMEKEY" /> <result property="value" column="SP_FPARAMEVALUE" /> </resultMap>
創建二配置個類
package com.cqaisino.newbill.common.handler;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import com.cqaisino.newbill.output.entity.InvInvoiceExcel;
import com.cqaisino.newbill.output.mapper.InvInvoiceMapper;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository;
@Repository public class SessionMapper extends SqlSessionDaoSupport { @Resource public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { super.setSqlSessionFactory(sqlSessionFactory); } /** * @return */ @SuppressWarnings("unchecked") public Map<String,Object> findOrderWaitissue(List<InvInvoiceExcel> invInvoiceExcels){ FblMapResultHandler handler = new FblMapResultHandler(); //namespace : XxxMapper.xml 中配置的地址(XxxMapper.xml的qualified name) //.selectXxxxNum : XxxMapper.xml 中配置的方法名稱 //this.getSqlSession().select(namespace+".selectXxxxNum", handler); this.getSqlSession().select(InvInvoiceMapper.class.getName()+".findOrderWaitissue",invInvoiceExcels, handler); Map<String, Object> map = handler.getMappedResults(); return map; } }
package com.cqaisino.newbill.common.handler; import org.apache.ibatis.session.ResultContext; import org.apache.ibatis.session.ResultHandler; import java.util.HashMap; import java.util.Map; public class FblMapResultHandler implements ResultHandler { @SuppressWarnings("rawtypes") private final Map mappedResults = new HashMap(); @SuppressWarnings("unchecked") @Override public void handleResult(ResultContext context) { @SuppressWarnings("rawtypes") Map map = (Map) context.getResultObject(); mappedResults.put(map.get("key"), map.get("value")); // xml 配置里面的property的值,對應的列 } public Map getMappedResults() { return mappedResults; } }
然后直接注入mapper 使用
@Autowired private SessionMapper invoiceMapMapper;
Map<String, Object> orderWaitissue = this.invoiceMapMapper.findOrderWaitissue(invInvoiceExcels);