李林
2023-10-07 658d4927d468c47208fd012d9128b09249c07eff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.chinaztt.mes.common.wrapper;
 
import cn.hutool.core.collection.CollectionUtil;
import lombok.AllArgsConstructor;
import org.apache.ibatis.mapping.ResultMap;
import org.apache.ibatis.mapping.ResultMapping;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
 
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
 
/**
 * @Author: zhangxy
 * @Date: 2020-09-14 10:52
 */
@Component
@AllArgsConstructor
public class ResultMapHelper {
 
    public final static String CACHE_KEY = "COLUMN_FIELD_MAPS";
 
    private ApplicationContext applicationContext;
 
    /**
     * 获取mybatis所有的field-column映射
     *
     * @return
     */
    @Cacheable(value = CACHE_KEY)
    public Map<Class, Map<String, String>> getColumnMaps() {
        SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) applicationContext.getBean("sqlSessionFactory");
        Collection<ResultMap> resultMaps = sqlSessionFactory.getConfiguration().getResultMaps();
        Map<Class, Map<String, String>> map = new HashMap(1000);
        if (CollectionUtil.isNotEmpty(resultMaps)) {
            for (Object obj : resultMaps) {
                if (!(obj instanceof ResultMap)) {
                    continue;
                }
                ResultMap resultMap = (ResultMap) obj;
                Map<String, String> columnFieldMap = new HashMap(50);
                if (resultMap.getResultMappings() != null) {
                    for (ResultMapping mapping : resultMap.getResultMappings()) {
                        columnFieldMap.put(mapping.getProperty(), mapping.getColumn());
                    }
                }
                map.put(resultMap.getType(), columnFieldMap);
            }
        }
        return map;
    }
}