我们系统不用判断,这样做再也没有出现NullException

121 阅读1分钟

公众号还有更多

image.png

禁用Null,传参不能传Null,返回也不能返回Null,这会加重很多判断。

mybatis3.5以下版本以及最新mybatis-plus(我看了最新版依赖的是3.4)查询单个对象如果为空都是返回Null。

方案

  1. 使用mybatis3.5以上的版本,支持返回Optional
  2. 现在很多人用的mybatis-plus版本,可以注入以下2个类
@Component@
Configuration
public class OptionalAwareObjectFactory extends DefaultObjectFactory {
    @SuppressWarnings("unchecked")    
    @Override    
    public <T> T create(Class<T> type, List<Class<?>> constructorArgTypes, List<Object> constructorArgs) {
       if (Optional.class.isAssignableFrom(type)) 
            return (T) Optional.ofNullable(Iterables.getOnlyElement(constructorArgs));       
       else            
            return super.create(type, constructorArgTypes, constructorArgs);​    }}
@Component
@ConfigurationPropertiesBinding
public class ObjectFactoryConverter implements Converter<String, ObjectFactory> {    
@Override    public ObjectFactory convert(String source) {        
    try {    
        return (ObjectFactory) Class.forName(source).newInstance();        
   } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {            
   throw new RuntimeException(e);        
       }    
    }
}