假设我有一个Oracle数据库和一个像这样的接口:
public interface DaoMapper {
@Select({
"SELECT col1, col2, col3",
"FROM my_table" })
List<Map<String, Object>> getUntyped();
}
如果我致电getUntyped()
并且所有列均具有值,则映射包含三个条目。但是,如果col2
为NULL
,则地图只有两个条目。在许多情况下,这不是问题,但是在我们代码的通用部分中,我实际上想.values()
在该地图上调用,并希望包含三个条目的列表。任何条目都可以是null
(或一个空字符串,与Oracle中的相同)。
实际上,我真的很高兴这样的事情,其中每个外部列表都由具有三个条目的列表组成:
@Select({
"SELECT col1, col2, col3",
"FROM my_table" })
List<List<Object>> getUntypedList();
但是,iBatis告诉我这是不受支持的操作。
因此,我在这里问我如何告诉iBatis包含包含NULL
或为空字符串的列。
多亏了乔凡尼(Giovanni)的回答,我注意到了类型处理程序的示例,然后从那里开始:
public class EmptyStringTypeHandler extends StringTypeHandler {
@Override
public String getResult(ResultSet rs, String columnName) throws SQLException {
return unnulledString(super.getResult(rs, columnName));
}
@Override
public String getResult(ResultSet rs, int columnIndex) throws SQLException {
return unnulledString(super.getResult(rs, columnIndex));
}
@Override
public String getResult(CallableStatement cs, int columnIndex) throws SQLException {
return unnulledString(super.getResult(cs, columnIndex));
}
private String unnulledString(String value) {
return StringUtils.defaultString(value, "");
}
}
现在的界面是:
public interface DaoMapper {
@Select({
"SELECT col1, col2, col3",
"FROM my_table" })
@Results(value = {
@Result(column = "col1", property = "col1", typeHandler = EmptyStringTypeHandler.class),
@Result(column = "col2", property = "col2", typeHandler = EmptyStringTypeHandler.class),
@Result(column = "col3", property = "col3", typeHandler = EmptyStringTypeHandler.class)
})
List<LinkedHashMap<String, ?>> getUntyped();
}
我应该补充一点,最大的好处是我可以在每条语句的每一列中指定它。为了更通用,最好按每个语句指定此名称。也许在将来的版本中?
====下面是完整的存储库,如果您希望查看更新后的存储库:https://github.com/kidfrom/g2java/tree/main/etc/mssqlserver 控制器/nameController.java mapper/namemapper.java model/namemodel.java
我有以下模式: 模式反映了一个事实,即我必须返回一个对象。然而,我不能总是这样做,有时我需要返回null。例如,如果我向数据库发出请求,它将返回return object或null(如果找不到用户)。 在我的GraphQL模式中,我为特定字段设置了类型。如果我试图返回一个不同于我设置的类型,我会得到一个错误。如何允许字段返回对象或null?
问题内容: 我正在尝试在Java程序中阅读标准输入。我期望一系列数字后跟换行符,例如: 当通过eclipse内置控制台提供输入时,一切都会顺利进行。但是,使用Windows命令行时,程序将输出: 我的代码是: 有什么线索吗? 问题答案: 得到a 表示相关对象已到达EOF(文件末尾),或者换句话说,它们无法再获得任何标准输入。现在,您的代码明显的问题是: 的每个方法调用都会创建一个 新的 。 每个这
在我开始之前,我读过类似的文章,但它们对我不起作用。 正如我在标题中解释的那样,当我单击肯定按钮(在这种情况下为“确定”)时,我会得到一个NPE。如果有人能指出我做得不正确,那就太好了!下面是我的设置的抽象版本
我有两个活动和两个布局。当我在第一个活动中显示列表时,一切都正常,并在单击时给出列表中项目的编号,但当我尝试在第二个活动中重复相同的内容时,它会告诉我RecycleServiceClickListener侦听器为空。 适配器: 第一项活动: 第二项活动: 错误: 我不明白为什么在第一种情况下,它正常处理单击,而在第二种情况下,它说RecyclerViewClickListener为null