- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你好 StackOverflowers,
关于 MyBatis resultMap 有一些我不明白的地方。
我正在处理的模型正在更新。我们决定创建一个新的对象图来反射(reflect)我们 future 的数据库模式(当前的模式很糟糕)。
为了总结我们的问题,这里有一个简单的案例:当前与表 SITE 相关的对象是 org.example.model.SiteModel
.我们创建了一个名为 org.example.entity.Site
的新对象. (包名是临时的)。
现在的目标是使用由 MyBatis 开发的现有 SQL 请求,并添加一个新的 ResultMap 链接到我们方法的返回类型。
这是一个例子:
/**
* Get all site defined as template.
*/
@Select("SELECT * FROM SITE WHERE ISTEMPLATE = 'True'")
@ResultMap({"siteResMap" , "siteResultMap"})
@Options(statementType = StatementType.CALLABLE)
<T> List<T> findTemplates();
然后,在 XML 配置文件中,我们定义了以下映射:
...
<resultMap id="siteResMap" type="org.example.entity.Site" />
<resultMap id="siteResultMap" type="org.example.model.SiteModel" />
...
然后我们从我们的 DAO 调用方法:
List<Site> site = siteDao.findTemplates();
List<SiteModel> siteMod = siteDao.findTemplates();
我们期望的是 MyBatis 的动态解释,根据计算的返回类型采用正确的 ResultMap。
但两个列表都显示为 List<org.example.entity.Site>
来自调试器。
这让我觉得第一个 ResultMap 被采用了,而忽略了第二个。
我错过了什么吗?有没有办法让 MyBatis 以这种方式运行?
问候
最佳答案
经过大量研究和代码探索,我们发现 ResultMap 的 String[]
并不是为了将 java 返回类型链接到 resultMap 而设计的。
这是检索结果映射的函数(来自 org.apache.ibatis.executor.resultset.DefaultResultSetHandler
)
public List<Object> handleResultSets(Statement stmt) throws SQLException {
ErrorContext.instance().activity("handling results").object(mappedStatement.getId());
final List<Object> multipleResults = new ArrayList<Object>();
int resultSetCount = 0;
ResultSetWrapper rsw = getFirstResultSet(stmt);
List<ResultMap> resultMaps = mappedStatement.getResultMaps();
int resultMapCount = resultMaps.size();
validateResultMapsCount(rsw, resultMapCount);
while (rsw != null && resultMapCount > resultSetCount) {
ResultMap resultMap = resultMaps.get(resultSetCount);
handleResultSet(rsw, resultMap, multipleResults, null);
rsw = getNextResultSet(stmt);
cleanUpAfterHandlingResultSet();
resultSetCount++;
}
String[] resultSets = mappedStatement.getResulSets();
if (resultSets != null) {
while (rsw != null && resultSetCount < resultSets.length) {
ResultMapping parentMapping = nextResultMaps.get(resultSets[resultSetCount]);
if (parentMapping != null) {
String nestedResultMapId = parentMapping.getNestedResultMapId();
ResultMap resultMap = configuration.getResultMap(nestedResultMapId);
handleResultSet(rsw, resultMap, null, parentMapping);
}
rsw = getNextResultSet(stmt);
cleanUpAfterHandlingResultSet();
resultSetCount++;
}
}
return collapseSingleResultList(multipleResults);
}
这解释了为什么我们总是得到第一个 resultMap 类型的元素列表。
我们创建了一个新的 Dao 来映射新的对象类型。
关于MyBatis - 根据 javaType 的 ResultMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32562337/
你好 StackOverflowers, 关于 MyBatis resultMap 有一些我不明白的地方。 我正在处理的模型正在更新。我们决定创建一个新的对象图来反射(reflect)我们 futur
我有一个包含以下内容的 XSD 文件:
我想让 XJC 在生成 bean 时在 complexType 中使用 javaType 标签。这是不允许的吗?我真的缺少很好的文档和一些可以理解的错误消息。 这是我正在尝试但因错误而失败的尝试: 编
我想在使用 XmlJavaTypeAdapter 的同时使用 xjc 生成 JAXB 对象 我目前在全局绑定(bind)中使用以下内容: 它生成以下代码: @XmlJavaTypeAdapter(
在 iBatis 中定义 resultMap 时,它提供了一个选项来为每个属性设置 javaType 和 jdbcType 到列映射。 例如 想知道我们应该在什么时候定义 javaType
我使用 XML 模式生成 JAXB 类。我的架构的一部分使用内联 javaType 将 dateTime 类型重新分配给 java.util.Calendar,如下所示:
如果有其他项目依赖的Java库(通过Maven依赖.jar)。在此库中,有一个 XSD 文件定义了一些 xs:simpleType,这些文件还使用 xjc:javaType 元素进行注释,将简单类型映
我的应用程序抛出以下错误,尽管我的应用程序中有 jackson-core-asl-1.4.2 和 jackson-mapper-asl-1.4.2 Caused by: java.lang.NoSuc
我有一个包含以下内容的 XSD 文件:
我在我的项目中使用了 elasticsearch 和 spring。升级到最新的 Elasticsearch 后,出现以下错误。添加这些依赖项后,项目开始正常。当我尝试使用这些方法时,它开始给我错误:
我正在使用 Jackson JSON library 制作自定义解串器(扩展 StdDeserializer)而且我无法弄清楚构造函数参数的目的是什么。什么是 Class或 JavaType valu
当使用 XJC 从 XSD 生成 Java bean 时,我需要映射 xs:integer至 Integer而不是 BigInteger .我添加了一个 javaType标记到我的 JAXB 自定义文
我在我的应用程序中使用 jackson 库,当我构建代码(使用 ant)时,构建成功。我已经尝试通过在单元测试中使用这些方法进行模拟测试,并且效果很好。但是当启动 karaf 时,它给了我这个错误:
我对 Spring 比较陌生,在将 war 部署到 Jboss EAP 7 时遇到 jackson 数据绑定(bind)错误,但是当我在 Wildfly 10 上部署相同的 war 时,它部署成功。我
我在 Wildfly 8.2.1 和 Glassfish 4.1 中使用 Spring Data JPA 部署 Spring MVC 应用程序时遇到问题(它在 Wildfly 10 中工作,但我不允许
我是一名优秀的程序员,十分优秀!