mybatis select返回值為map時,選取表欄位的兩列作為key,value
mybatis select返回值為map時,選取表欄位的兩列作為key,value
一:資料格式確定
在做專案時,遇見這樣的需求,統計每部部門下的裝置數量,因為後臺需要對該資料進行二次處理,所以如果dao層返回List
部門編號 | 數量1 | 數量2 | 數量3 |
---|---|---|---|
部門A | 10 | 1 | 9 |
部門B | 20 | 2 | 18 |
在按照此資料格式進行實施的時,發現Map只有 key、value 只能返回兩個欄位,所有對sql語句進行處理,將其餘欄位通過 concat(數量1,’,’,數量2,’,’,數量3) 連線,則現在的資料格式為
部門編號 | 數量 |
---|---|
部門A | 10,1,9 |
部門B | 20,2,18 |
在上表中 部門編號代表Map的 key ,數量代表Map的 value
二:XxxMapper.xml 書寫
定義resultMap
<resultMap id="mapResultMap" type="HashMap">
<result property="key" column="id" jdbcType="VARCHAR" javaType="java.lang.String" />
<result property="value" column="value" javaType="java.lang.String" jdbcType="VARCHAR" />
</resultMap>
查詢語句
注:該mapper中使用的case when 語法進行統計分析,使用concat拼接結果集欄位
<select id="selectXxxxNum" resultMap="mapResultMap">
select
id as id ,
concat(count(device_id) ,',',
sum(case when customer_id is not null and customer_id != '' then 1 else 0 end),',',
sum(case when customer_id is null or customer_id = '' then 1 else 0 end) ) as value
from sys_device_info
where is_effective = true
group by id
</select>
ResultHandler.java 書寫
package cn.ja.rome.mybatis;
import java.util.HashMap;
import java.util.Map;
import org.apache.ibatis.session.ResultContext;
/**
* 用於轉化結果集
*
* @author jiangliuhong
*/
public class ResultHandler implements org.apache.ibatis.session.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的值,對應的列
}
@SuppressWarnings("rawtypes")
public Map getMappedResults() {
return mappedResults;
}
}
SessionMapper.java 書寫
package cn.ja.rome.dao;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository;
import cn.ja.rome.mybatis.ResultHandler;
/**
* 用於session查詢
*
* @author jiangliuhong
*/
@Repository
public class SessionMapper extends SqlSessionDaoSupport {
@Resource
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
super.setSqlSessionFactory(sqlSessionFactory);
}
/**
* @return
*/
@SuppressWarnings("unchecked")
public Map<String,Object> selectXxxNum(){
ResultHandler handler = new ResultHandler();
//namespace : XxxMapper.xml 中配置的地址(XxxMapper.xml的qualified name)
//.selectXxxxNum : XxxMapper.xml 中配置的方法名稱
//this.getSqlSession().select(namespace+".selectXxxxNum", handler);
this.getSqlSession().select(XxxMapper.class.getName()+".selectXxxxNum", handler);
Map<String, Object> map = handler.getMappedResults();
return map;
}
}
執行
配置完成,最後在service中注入SessionMapper
@Autowired
private SessionMapper sessionMapper;
public Map<String,Object> test(){
return sessionMapper.selectXxxNum();
}
相關文章
- java中Map根據Map的value取keyJava
- Mybatis-Plus 更新欄位為 NULLMyBatisNull
- 根據key集合批次從map中獲取value
- Java交換map的key和value值Java
- spring boot - mybatis Map集合返回空欄位Spring BootMyBatis
- 獲取選中select下拉選單的value屬性值
- JQuery 獲取select被選中的value和textjQuery
- Mybatis框架:foreach迴圈遍歷欄位(為了解決動態表、動態欄位查詢資料)MyBatis框架
- Hashtable/HashMap與key/value為null的關係HashMapNull
- Map按照key和value進行排序排序
- java8的stream將一個List轉為按照某個欄位分組的map,再按照另一個欄位取max最終得到一個mapJava
- js獲取select下拉選單的value和文字值JS
- jquery獲取select下拉選中option項的value值jQuery
- 表的欄位名轉為逗號相隔的字串字串
- mybatis自動填充時間欄位MyBatis
- C++結構體作為map的key的時候需要過載C++結構體
- 陣列作為形參陣列
- 表中已有資料,將表中某個欄位為空的改為非空
- javascript獲取select下拉選單框的value和text值JavaScript
- 【Mongo】mongo更新欄位為另一欄位的值Go
- MySQL為欄位新增預設時間(插入時間)MySql
- oracle檢視該使用者的所有表名字、表註釋、欄位名、欄位註釋、是否為空、欄位型別Oracle型別
- 欄位管理,為什麼只有新增的時候才自動匹配欄位型別型別
- 解決mybatis用Map返回的欄位全變大寫的問題MyBatis
- mybatis動態呼叫表名和欄位名MyBatis
- jQuery實現的獲取select下拉選單的text和value值jQuery
- PHP 陣列作為列表使用時應當遵循的規範PHP陣列
- mybatis-plus 獲取某列表的某欄位的集合MyBatis
- select * 和 select 所有欄位的區別
- 動態為10g資料庫的表新增欄位,到256個欄位,hung住了?資料庫
- hash_map中string為key的解決方法
- HTML的input型別為hidden導致無法reset改欄位的value問題HTML型別
- jquery實現的獲取select下拉選單value和文字內容jQuery
- 獲取表的結構、欄位描述等
- ms sql 獲取表欄位的屬性SQL
- 類成員函式作為map容器的value使用例項函式
- android getTextSize返回值是以畫素(px)為單位的,setTextSize()以sp為單位Android
- 陣列作為函式引數陣列函式