سؤال

هل هناك طريقة لإنشاء استعلام SQL سريعًا باستخدام MyBatis؟لتجسيد:لدي استعلام حيث يجب إنشاء جزء منه (ولكن ليس المعلمة) في وقت التشغيل:

         with dummy (id) as (
           values (#{rangeEnd}) union all
           select id - 1 from dummy where id - 1 >= #{rangeStart}   
         ).......

يمكن استخدام الجزء الثاني كمعلمة، ولكن عند تجربة الاستعلام كما هو أحصل على استثناء:

[SQL0584] NULL or parameter marker in VALUES not allowed.

مع JDBC العادي الذي أستخدمه MessageFormat:

PreparedStatement ps = connection.prepareStatement(
            MessageFormat.format(MY_QUERY, currentRange.getRangeEnd()))

, لكني لم أجد طريقة للقيام بذلك باستخدام MyBatis.

هل كانت مفيدة؟

المحلول

إنه أمر سهل حقًا (الإجابة من تحديد عبارات SQL الديناميكية باستخدام MyBatis):

with dummy (id) as (
           values (${نطاق النهاية}) union all
           select id - 1 from dummy where id - 1 >= #{rangeStart}   
         ).......

نصائح أخرى

يستخدم @SelectProvider حاشية. ملاحظة:

public interface SqlMapper {
    static class PureSqlProvider {
        public String sql(String sql) {
           // Create your query here
           return sql; 
        }
    }

    @SelectProvider(type = PureSqlProvider.class, method = "sql")
    public List<Dummy> select(String sql);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top