استعلام "فائق الديناميكي" مع MyBatis
سؤال
هل هناك طريقة لإنشاء استعلام 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);
}
لا تنتمي إلى StackOverflow