Я пытаюсь реализовать MyBatis в моем проекте на работе. Это устаревшая система, которая использует ванильный JDBC для доступа к базе данных, исключительно посредством хранимых процедур. Я понимаю, что для вызова хранимой процедуры MyBatis требует объект, который содержит входные параметры для хранимой процедуры, а другой - для хранения набора результатов. Не уверен, что это полностью верно.Сопоставление результата с SP на сложный объект
Чтобы предотвратить создание слишком большого количества объектов данных в системе, я хочу повторно использовать существующие. И здесь возникает проблема. Позвольте мне объяснить, какова типичная ситуация/сценарий, с которым я столкнулся, и затем, как я пытаюсь ее решить.
Допустим, у меня есть следующий объект данных (е) в системе:
class Account {
private int accountID;
private String accountName;
private OrganizationAddress address;
// Getters-Setters Go Here
}
class OrganizationAddress extends Address {
// ... some attributes here
// Getters-Setters Go Here
}
class Address {
private String address;
private String city;
private String state;
private String country;
// Getters-Setters Go Here
}
Я использую аннотации, так что мой Mapper
класс имеет что-то вроде этого:
@Select(value = "{call Get_AccountList(#{accountType, mode=IN, jdbcType=String})}")
@Options(statementType = StatementType.CALLABLE)
@Results(value = {
@org.apache.ibatis.annotations.Result
(property = "accountID", column = "Account_ID"),
@org.apache.ibatis.annotations.Result
(property = "accountName", column = "Organization_Name"),
@org.apache.ibatis.annotations.Result
(property = "state", column = "State", javaType=OrganizationAddress.class)
})
List<Account> getAccountList(Param param);
Проблемы: Когда я делаю вызов хранимой процедуры, объект Account
имеет state
всегда null
.
Чтобы добавить к травме, у меня нет доступа к источнику данных объектов данных. Так что я не мог бы попробовать предлагаемое решение по этой ссылке либо - Mybatis select with nested objects
Мой запрос:
- Можно ли мне использовать entites данных, которые уже присутствуют в системе, или же я должен создать новые, а затем сопоставить данные с существующими?
- Если да, то как это сделать? Любые ссылки, если они есть.
- Если нет, существует ли способ уменьшить количество объектов данных, которые я создавал бы для вызова хранимых процедур (для обоих параметров ввода и вывода)?
Да, вы правильно поняли мою проблему, и это решение работает для меня. Спасибо! :) – Rishabh