公众号还有更多
禁用Null,传参不能传Null,返回也不能返回Null,这会加重很多判断。
mybatis3.5以下版本以及最新mybatis-plus(我看了最新版依赖的是3.4)查询单个对象如果为空都是返回Null。
方案:
- 使用mybatis3.5以上的版本,支持返回Optional
- 现在很多人用的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);
}
}
}