عدم وجود وثائق حول ذلك يجعلني أتساءل
مرحبًا Shujito ،
mixin هي واجهة يمكنك تنفيذها / توسيعها في أنواع كائنات SQL الخاصة بك ، لإضافة أساليب إضافية إلى كائن SQL الخاص بك. هناك نوعان من مزيج ، GetHandle
، و Transactional
.
يوفر GetHandle
طريقة واحدة Handle getHandle()
. إذا كان لديك استعلام أكثر تعقيدًا مما يمكن إنجازه باستخدام التعليقات التوضيحية (على سبيل المثال ، ربط الجداول المتعددة مع الطيات) ، فقم بتنفيذ / تمديد GetHandle
، واجعل أسلوب SQL الخاص بك أسلوبًا ملموسًا / افتراضيًا. داخل الطريقة يمكنك استدعاء getHandle()
للحصول على Handle
المرتبط بكائن SQL.
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 ،
mixin هي واجهة يمكنك تنفيذها / توسيعها في أنواع كائنات SQL الخاصة بك ، لإضافة أساليب إضافية إلى كائن SQL الخاص بك. هناك نوعان من مزيج ،
GetHandle
، وTransactional
.يوفر
GetHandle
طريقة واحدةHandle getHandle()
. إذا كان لديك استعلام أكثر تعقيدًا مما يمكن إنجازه باستخدام التعليقات التوضيحية (على سبيل المثال ، ربط الجداول المتعددة مع الطيات) ، فقم بتنفيذ / تمديدGetHandle
، واجعل أسلوب SQL الخاص بك أسلوبًا ملموسًا / افتراضيًا. داخل الطريقة يمكنك استدعاءgetHandle()
للحصول علىHandle
المرتبط بكائن SQL.يوفر
Transactional
عدة طرق لإدارة المعاملات: