我有一些表都有一个名为 的字段created_at
,这是一个时间戳,表示插入行的时间。
现在我使用 mybatis 3 作为持久层,用join
.
看看我期望得到所有问题及其答案的简单 sql:
<select id="selectQuestionsWithAnswers">
select q.*, a.* from questions as q left inner join answers as a
on q.id=a.id
order by a.created_at desc
</select>
但我发现,因为questions
andanswers
都有 field created_at
,如果我写select q.*, a.*
,结果集中有 2created_at
个,第二个被忽略。所以答案的created_at
值为questions
,这是不正确的。
为了避免这种情况,我找到了两种方法,但都不好:
修改每个表的字段名称,确保它们不相同。例如:
questions.created_at
->questions.q_created_at
,answers.created_at
->answers.a_created_at
。这不好,因为有很多这样的字段,如,,,,它
id
使数据库难以阅读和维护以更改这些名称name
title
updated_at
修改 SQL。更改sql中的字段名称,例如:
select q.id as q_id, q.title as q_title, ..., q.created_at as q_created_at, a.id as a_id, a.content as a_content, ..., a.created_at as a_created_at from questions as q left inner join answers as a on q.id=a.id order by a.created_at desc
这不好,因为我需要更改 SQL 中的每个字段名称,它变得非常长且难以阅读,并且每次编写这样的 SQL 都非常痛苦。
我是mybatis新手,有没有更好的解决这个问题的方法?