懒人查询 mybatisplus setEntity()

懒人查询

MybatisPlus setEntity()
由于我们公司代码生成的时候,查询列表统一都是使用了setEntity()
于是就开始折腾之旅。
懒人查询写法如下:

 public List<BasReservoirArea> selectList(BasReservoirArea basReservoirArea) {
        QueryWrapper<BasReservoirArea> where = new QueryWrapper<>();
        where.setEntity(basReservoirArea);
        return baseMapper.selectList(where);
    }

前端有可能会传入空格的情况 !!!
在这里插入图片描述
在这里插入图片描述

setEntity()源码 并不过滤空格 执行sql的时候 会把空格作为参数去当做查询条件

 public Children setEntity(T entity) {
        this.entity = entity;
        this.initEntityClass();
        return this.typedThis;
    }
protected void initEntityClass() {
        if (this.entityClass == null && this.entity != null) {
            this.entityClass = this.entity.getClass();
        }

    }

那我就想把空格转换为null就满足setEntity()方法了。开搞

暴力解决方案如下:

        //1.对象转map
        Map<Object, Object> map = MapUtil.beanToMap(test);
        //2.移除空值
        MapUtil.removeNullValue(map);
        //3.map转回对象
        Test entity = JSON.parseObject(JSON.toJSONString(map), Test.class);

工具类如下

/**
     * 将对象属性转化为map结合
     */
    public static <T> Map<Object, Object> beanToMap(T bean) {
        Map<Object, Object> map = new HashMap<>();
        if (bean != null) {
            BeanMap beanMap = BeanMap.create(bean);
            for (Object key : beanMap.keySet()) {
                map.put(key, beanMap.get(key));
            }
        }
        return map;
    }
    /**
     * 移除map中的value空值
     *
     * @param map
     * @return
     */
    public static void removeNullValue(Map map) {
        Set set = map.keySet();
        for (Iterator iterator = set.iterator(); iterator.hasNext(); ) {
            Object obj = (Object) iterator.next();
            Object value = (Object) map.get(obj);
            remove(value, iterator);
        }
    }

感觉还是不够懒呀…于是找了沙老大 搞了个配置

Get全局配置如下:

/**
* @Author 沙小卫
* @Description //TODO 适用于Get请求 处理参数为空值转换为null
* @Date  2021-01-12
* @Param  
* @return 
**/
@ControllerAdvice
public class GlobalControllerAdiviceController {

    //WebDataBinder是用来绑定请求参数到指定的属性编辑器,可以继承WebBindingInitializer来实现一个全部controller共享的dataBiner Java代码
    @InitBinder
    public void dataBind(WebDataBinder binder) {

        ///給指定类型注册类型转换器操作
        binder.registerCustomEditor(String.class, new StringEditor());
    }

}

/**
 * @Author 沙小卫
 * @Description //TODO 适用于Get请求 处理参数为空值转换为null
 * @Date 2021-01-12
 * @Param
 * @return
 **/
public class StringEditor extends PropertyEditorSupport {
    //setAsText完成字符串到具体对象类型的转换,
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        if (text == null || "".equals(text.trim())) {
            text = null;
        }
        setValue(text);
    }


    //getAsText完成具体对象类型到字符串的转换。
    @Override
    public String getAsText() {
        if (getValue() != null) {
            return getValue().toString();
        }
        return null;
    }
}

Post类型的配置如下:

/**
* @Author 沙小卫
* @Description //TODO 解决前端Post传参为空值转换为null 结合 mybatisPlus  where.setEntity()
* @Date  2021-01-13
* @Param  
* @return 
**/
public class StringDescrializer extends JsonDeserializer<String> {
    @Override
    public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
        String value = jsonParser.getValueAsString();
        if (value == null || "".equals(value.trim())) {
            return null;
        }
        return value;
    }

    @Bean
    @Primary
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
        //设置解析JSON工具类
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.getSerializerProvider().setNullValueSerializer(
                new JsonSerializer<Object>() {
                    @Override
                    public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                        jsonGenerator.writeString("");
                    }
                }
        );
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addDeserializer(String.class, new StringDescrializer());

        objectMapper.registerModule(simpleModule);

        //忽略未知属性 防止解析报错
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

        jsonConverter.setObjectMapper(objectMapper);
        List<MediaType> list = new ArrayList<>();
        list.add(MediaType.APPLICATION_JSON_UTF8);
        jsonConverter.setSupportedMediaTypes(list);
        return jsonConverter;
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值