SQL语句使用distinct获取某个字段下的唯一值,但是当数据库中有空值的时候,distinct 中字段出现null时,会产生一些问题。
原因是distinct将null也视为值并被归并到一项。
产生的问题:
Mybatis使用resultType="map"时,null值会使得前端获取json格式不对,产生报错。
<!-- 获取字段对应的值-->
<select id="getFiledValue" parameterType="String" resultType="map" >
SELECT DISTINCT ${field} FROM "T_S_DOORPLATE"
</select>
//查询字段下的所有值
@Override
public List<Map<String,Object>> getFiledValue(String field){
return doorPlateMapper.getFiledValue(field);
}
修改方式:
1、改resultType=“String”,返回一个List < String >
2、修改sql为IS NOT NULL
.xml:
<!-- 获取字段对应的值-->
<select id="getFiledValue" parameterType="String" resultType="String" >
SELECT DISTINCT ${field} FROM "T_S_DOORPLATE" WHERE ${field} IS NOT NULL
</select>
mapper层
public interface DoorPlateMapper {
List<String> getFiledValue(String field);
}
Server层 实现
//查询字段下的所有值
@Override
public JSONObject getFiledValue(String field){
if(field.equals("geom")||field.equals("geometry")){
field = "ST_AsGeoJson(geometry) as geom";
}
JSONObject json = new JSONObject();
json.put("field_name",field);
json.put("value",doorPlateMapper.getFiledValue(field));
return json;
}
结果:成功去除null。