それに関するドキュメントの欠如は私に不思議に思います
こんにちは@Shujito 、
ミックスインは、SQLオブジェクトタイプに実装/拡張して、SQLオブジェクトにメソッドを追加できるインターフェイスです。 GetHandle
とTransactional
の2つのミックスインがあります。
GetHandle
は、単一のメソッドHandle getHandle()
$を提供します。 アノテーションで実行できるよりも複雑なクエリがある場合(たとえば、フォールドを使用したマルチテーブル結合)、 GetHandle
を実装/拡張し、SQLメソッドを具象/デフォルトメソッドにします。 メソッド内でgetHandle()
を呼び出して、SQLオブジェクトに関連付けられたHandle
$を取得できます。
interface ContactDao extends GetHandle {
default List<Contact> getFullContacts() {
return getHandle().createQuery(
"select * from contact c left join phones p on c.id = p.contactId")
.fold(new LinkedHashMap<Integer,Contact>(), (map, rs, ctx) -> {
// etc
})
.values()
.stream()
.collect(toList());
}
Transactional
は、トランザクションを管理するためのいくつかの方法を提供します。
interface ContactDao extends Transactional {
default void createFullContact(Contact contact) {
begin();
try {
int contactId = createContact(contact.getName());
createPhones(contact.getPhones());
commit();
}
catch (Exception e) {
rollback();
}
}
@SqlUpdate("insert into contact(id, name) values (nextval('contact_seq'), :name)")
<strong i="20">@GetGeneratedKeys</strong>
int createContact(<strong i="21">@BindBean</strong> Contact contact);
@SqlBatch("insert into phone(id, contact_id, phone_type, phone_number) " +
"values (nextval('phone_seq'), :contactId, :phoneType, :phoneNumber)")
void createPhones(<strong i="22">@BindBean</strong> List<Phone> phones);
}
したがって、これらを使用して、より複雑なオブジェクトを照会できます。
この例では、ここにある多くの電話と一緒に連絡先を取得できますよね?
そうです、そうです。 ただし、クエリをどのように作成するかによって異なります。
これですべてが明らかになりました。必要性がわかり次第、この機能を悪用します。
ちなみにここに記入するとよいでしょう:http: //jdbi.org/sql_object_mixins/
ありがとう
#802で追跡
最も参考になるコメント
こんにちは@Shujito 、
ミックスインは、SQLオブジェクトタイプに実装/拡張して、SQLオブジェクトにメソッドを追加できるインターフェイスです。
GetHandle
とTransactional
の2つのミックスインがあります。GetHandle
は、単一のメソッドHandle getHandle()
$を提供します。 アノテーションで実行できるよりも複雑なクエリがある場合(たとえば、フォールドを使用したマルチテーブル結合)、GetHandle
を実装/拡張し、SQLメソッドを具象/デフォルトメソッドにします。 メソッド内でgetHandle()
を呼び出して、SQLオブジェクトに関連付けられたHandle
$を取得できます。Transactional
は、トランザクションを管理するためのいくつかの方法を提供します。