Я только начинаю изучать MyBatis и мне интересно, когда я создаю запросы на вставку или обновление, есть ли способ сделать имена свойств более удобными для рефакторинга?Я объясню более подробно:
У меня есть константы во всех моих классах домена, которые можно использовать для ссылки на имена свойств.На мой взгляд, это сокращает количество опечаток и немного упрощает рефакторинг.
public static final String FIRST_NAME = "firstName";
private String firstName = "";
Когда я создаю оператор выбора MyBatis с использованием аннотаций, я могу сделать что-то вроде этого:
@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.Мысли?