MyBatis を学び始めたばかりで、挿入クエリや更新クエリを作成するときに、プロパティ名をリファクタリングしやすいものにする方法はありますか? 詳しく説明します:
プロパティ名を参照するために使用できるすべてのドメイン クラスに定数があります。私の意見では、タイプミスが減り、リファクタリングが少し簡単になります。
public static final String FIRST_NAME = "firstName";
private String firstName = "";
注釈を使用して MyBatis select ステートメントを作成すると、次のようなことができます。
@Select("SELECT ID, FIRST_NAME, LAST_NAME FROM CUSTOMERS WHERE ID = #{id}")
@Results({
@Result(property = CustomerDetail.ID, column = "ID"),
@Result(property = CustomerDetail.FIRST_NAME, column = "FIRST_NAME"),
@Result(property = CustomerDetail.LAST_NAME, column = "LAST_NAME")
})
CustomerDetail selectById(final int id);
ドメイン オブジェクト (CustomerDetail) をリファクタリングしてプロパティ名を変更すると、かなり単純になります。
ただし、注釈を使用して MyBatis の挿入ステートメントを作成するときは、次のようにする必要があります。
@Insert("INSERT INTO CUSTOMERS (ID, FIRST_NAME, LAST_NAME) VALUES (#{id}, #{firstName}, #{lastName})")
void insertCustomerDetail(final CustomerDetail customerDetail);
この場合、ドメイン オブジェクト (CustomerDetail) をリファクタリングしてプロパティ名を変更すると、エラーが発生しやすくなります。一連の文字列連結に頼らずに定数を使用できる方法はありますか? それは私自身も気にする必要がありますか?
まったくの初心者として、@Insert および @Update アノテーションが @Select アノテーションの構造を模倣することを期待していました。例 (以下は有効な MyBatis アノテーションではないことに注意してください):
@Insert("INSERT INTO CUSTOMERS (ID, FIRST_NAME, LAST_NAME)")
@Params({
@Param(property = CustomerDetail.ID, column = "ID"),
@Param(property = CustomerDetail.FIRST_NAME, column = "FIRST_NAME"),
@Param(property = CustomerDetail.LAST_NAME, column = "LAST_NAME")
})
void insertCustomerDetail(final CustomerDetail customerDetail);
上記のサンプルと同じ効果を持つオプションを見逃していませんか? または、MyBatis マッピングを単体テストして、ドメイン オブジェクトに存在しないプロパティ名を誰も使用していないことを確認することはできますか? テストは XML ベースのマッピングにも適用されるため、より良い解決策になる可能性があります。考え?