Jdbi: وثيقة الخلطات SqlObject وكيفية استخدامها

تم إنشاؤها على ١٦ ديسمبر ٢٠١٦  ·  5تعليقات  ·  مصدر: jdbi/jdbi

عدم وجود وثائق حول ذلك يجعلني أتساءل

doc

التعليق الأكثر فائدة

مرحبًا 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);
}

ال 5 كومينتر

مرحبًا 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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات