一觉睡到小时候

Controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RestController
@RequestMapping("/web")
public class MapKeyTest {
@Autowired
private InvoicingBuyOrderService invoicingBuyOrderService;

@GetMapping("/testKey")
public Map<String,Object> testMayKey(String id){
Map<String,Object> map = new HashMap<>();
Map<String,String> result = this.invoicingBuyOrderService.test(id);
map.put("data",result);
return map;
}
}

Service

1
Map<String,String> test(String id);

ServiceImpl

1
2
3
4
5
@Override
public Map<String, String> test(String id) {
Map<String, String> map = this.invoicingPackageunitMapper.selectPackageNameByCommodityDetailId(id);
return map;
}

Mapper

1
Map<String,String> selectPackageNameByCommodityDetailId(@Param("commodityDetailId") String commodityDetailId);

XML

①我们不设置字段的别名

1
2
3
<select id="selectPackageNameByCommodityDetailId" 
parameterType="java.lang.String" resultType="java.util.HashMap">
select * from invoicing_commoditydetailprice icd where icd.COMMODITYDETAILPRICE_ID=#{commodityDetailId}

postMan请求:
localhost:8001/FHSHGL/web/testKey?id=15b67d1756134936a6fbc8a5d5007bef
返回值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"data": {
"SMALL_PACKAGE_COUNT": "300",
"SMALL_PACKAGE_UNIT_ID": "0f899de1f92911e8bb4500ffa0c803da",
"PHP_ID": 80270,
"MIDDLE_PACKAGE_UNIT_ID": "0f8995cef92911e8bb4500ffa0c803da",
"CREATED_TIME": 1570839233000,
"UPDATED_TIME": 1570839233000,
"PRODUCTION_TIME": 1522425600000,
"IN_PRICE": "15.00",
"MIDDLE_PACKAGE_COUNT": "20",
"OUT_PRICE": "15.00",
"INVOICING_COMMODITY_ID": "25422c6135ed497dafa5f6e50fd6abcd",
"CODE": "11325882056318109808267349261365",
"BIG_PACKAGE_UNIT_ID": "0f894c61f92911e8bb4500ffa0c803da",
"COMMODITYDETAILPRICE_ID": "15b67d1756134936a6fbc8a5d5007bef"
}
}

②设置返回字段的别名

1
2
3
4
5
6
7
8
9
10
11
12
<select id="selectPackageNameByCommodityDetailId" parameterType="java.lang.String" resultType="java.util.HashMap">
SELECT
ips.`NAME` AS smallName,
ipm.`NAME` AS middleName,
ipb.`NAME` AS bigName
FROM
invoicing_commoditydetailprice icd
LEFT JOIN invoicing_packageunit ips ON icd.SMALL_PACKAGE_UNIT_ID = ips.PACKAGEUNIT_ID
LEFT JOIN invoicing_packageunit ipm ON icd.MIDDLE_PACKAGE_UNIT_ID = ipm.PACKAGEUNIT_ID
LEFT JOIN invoicing_packageunit ipb ON icd.BIG_PACKAGE_UNIT_ID = ipb.PACKAGEUNIT_ID
WHERE icd.COMMODITYDETAILPRICE_ID=#{commodityDetailId}
</select>

postMan请求:
localhost:8001/FHSHGL/web/testKey?id=15b67d1756134936a6fbc8a5d5007bef
返回值:

1
2
3
4
5
6
7
{
"data": {
"bigName": "箱",
"middleName": "瓶",
"smallName": "克"
}
}

springboot中处理mybatis返回Map时key值的大小写

为了统一不同数据库返回key值大小写不一致的问题,特自定义ObjectWrapperFactory来做统一的处理

1、首先自定义MapWrapper

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 将Map的key全部转换为小写
* */
public class MapKeyLowerWrapper extends MapWrapper {

public MapKeyLowerWrapper(MetaObject metaObject, Map<String, Object> map) {
super(metaObject, map);
}
@Override
public String findProperty(String name, boolean useCamelCaseMapping) {
return name==null?"":name.toLowerCase() ;
}
}

2、自定义ObjectWrapperFactory

mybatis默认的ObjectWrapperFactory

1
2
3
4
5
6
7
8
9
10
public class DefaultObjectWrapperFactory implements ObjectWrapperFactory {
public boolean hasWrapperFor(Object object) {
return false;
}

public ObjectWrapper getWrapperFor(MetaObject metaObject, Object object) {
throw new ReflectionException(
"The DefaultObjectWrapperFactory should never be called to provide an ObjectWrapper.");
}
}

我们自定义的如下:

1
2
3
4
5
6
7
8
9
10
11
12
public class MapWrapperFactory implements ObjectWrapperFactory {

@Override
public boolean hasWrapperFor(Object object) {
return object != null && object instanceof Map;
}

@Override
public ObjectWrapper getWrapperFor(MetaObject metaObject, Object object) {
return new MapKeyLowerWrapper(metaObject, (Map) object);
}
}

3、在mybatis的配置中添加 MapWrapperFactory 的配置

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
@Bean(name = "sqlSessionFactory")
@ConditionalOnBean(name = "dataSource")
public SqlSessionFactory sqlSessionFactoryBean(@Qualifier("dataSource") DataSource dataSource) {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setObjectWrapperFactory(new MapWrapperFactory());
bean.setDataSource(dataSource);
// 添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setMapperLocations(resolver.getResources("classpath*:com/ultrapower/ioss/**/mapper/**/*.xml"));
return bean.getObject();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

@Bean("sqlSessionTemplate")
@ConditionalOnBean(name = "sqlSessionFactory")
public SqlSessionTemplate sqlSessionTemplate(
@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}

@ConditionalOnBean(name = "dataSource")
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) {
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);
return dataSourceTransactionManager;
}

简书
云+社区
掘金
CSDN
微信公共号:


 评论

载入天数...载入时分秒...