你好StackOverflowers,
有一些关于MyBatis resultMap的内容 .
我正在研究的模型正在更新 . 我们决定创建一个新的对象图,它反映了我们未来的数据库模式(当前的模式非常糟糕) .
总结一下我们的问题,这里有一个简单的例子:当前的Object whith与表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 .
但这两个清单都显示为debuger的 List<org.example.entity.Site>
.
这让我觉得第一个ResultMap被采用,而忽略了第二个 .
我错过了什么吗?有没有办法让MyBatis以这种方式表现?
问候
1 回答
经过大量的研究和代码探索,我们发现ResultMap的
String[]
并不是为了将java返回类型链接到resultMap而设计的 .这是检索resultmap的函数(来自
org.apache.ibatis.executor.resultset.DefaultResultSetHandler
)它解释了为什么我们总是得到第一个resultMap类型的元素列表 .
我们创建了一个新的Dao来映射新的对象类型 .