问题描述
我遇到了一个用例,其中MyBatis resultMap将其id元素设置为不存在的列(检索该resultSet的查询中都不存在这样的别名)。在调查过程中,我得出的结论是这样做可以加快结果映射的速度,因为没有任何id的运行会使它的运行速度大大降低。但是,我想知道使用这种id映射的后果以及它是否可能引起任何问题。让我在一个简单的示例上展示它。
想象一下,我们有一个名为Book的数据库表。这不是最好的设计,但是表格具有扁平的结构,每本书中都存储着作者的数据。它可能有这样的列:
| id_book |标题|年体裁| author_name | author_surname | author_age |
但是在后端,此结构将被映射到的模型由两个对象组成(以伪代码):
OrdersTopic
MyBatis使用xml映射器,可以通过以下方式对其进行配置以检索书籍列表:
Author {
string author_name,string author_surname,int author_age
}
Book {
int id_book,string title,int year,string genre,Author author
}
如您所见,作者的resultMap包含 dummy_id ,该值本身不存在于表本身中,也不是任何使用的别名。如果删除了dummy_id映射,查询将返回与以前相同的数据,但速度要慢得多。我知道MyBatis使用此ID来区分映射的对象,但是在这种情况下,由于没有指定的列,因此无法为它分配任何值。看到它正常工作而没有引发任何异常,我试图理解两件事:
- MyBatis如何使用此ID,为什么使用不存在的列可以加快映射速度?我想了解它,即使在那种情况下返回的数据是相同的,在更复杂的情况下,我也可以想象它会影响映射。请注意,查询本身始终以相同的速度运行,只有受影响的部分才将检索到的数据写入后端模型。
- 鉴于您既不能更改数据库结构又不能更改模型结构,有没有办法在不使用 dummy_id 的情况下获得相同的映射时间?
如果在用例中很重要,我偶然发现后端是Java,模型是简单的POJO。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)