1、使用了达梦数据库和Mysql数据库,发现了字段名的区别,公司达梦数据库是大写的,而Mysql数据库是小写的。
达梦数据库
Mysql数据库
就像这样,这就导致在后端写代码时如果要使用Map取值的时候这就要注意了。
List<Map<String, Object>> result = bankReceiptRecFileMapper.getBankReceiptIdToOrgNameMapping(baknReceiptIdList); Map<Long, List<String>> bankReceiptIdWithOrgNameMap = result.stream() .collect(Collectors.groupingBy( map -> Long.valueOf(map.get("bank_receipt_id").toString()), // 手动转换为 Long Collectors.mapping(map -> (String) map.get("org_name"), Collectors.toList()) ));
如果使用达梦数据库,因为它的字段名是大写的,所以后端写代码时你用map.get("bank_receipt_id").toString(),获取值时,要注意get括号里的名称要跟达梦数据库字段名进行对应.
一般情况下,公司都会使用好多个数据库,所以要修改这部分内容,每个部分都要改,无法统一,所以解决方案还有一种,那就是在sql语句中下重点。就是将我们查询的字段重新别名,这样就统一了,例如:
<select id="getBankReceiptIdToOrgNameMapping" resultType="java.util.Map" parameterType="java.util.List"> SELECT br.bank_receipt_id as "bank_receipt_id", so.org_name as "org_name" FROM bankreceipt_recfile br JOIN sys_org so ON br.relate_orgid = so.id <if test="bankReceiptIdList != null and bankReceiptIdList.size() > 0"> WHERE br.bank_receipt_id IN <foreach collection="bankReceiptIdList" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach> </if> GROUP BY br.bank_receipt_id, so.org_name </select>