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
、answers
両方にフィールドがあるため、結果セットに2が含まれているcreated_at
ことがわかりました。また、2番目のフィールドは無視されます。したがって、回答の値は、正しくありません。select q.*, a.*
created_at
created_at
questions
これを避けるために、私は2つの方法を見つけましたが、どちらも良くありません。
各テーブルのフィールド名を変更し、それらが同じでないことを確認します。例:
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を初めて使用しますが、この問題に対するより良い解決策はありますか?