标签:setEntity map mybatisplus 懒人 new return null public
懒人查询
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;
}
}
标签:setEntity,map,mybatisplus,懒人,new,return,null,public 来源: https://blog.csdn.net/sinat_40936086/article/details/112554913
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。