الاستعلامات المفرطة مع jdbctemplate
-
28-09-2019 - |
سؤال
أنا أعمل حاليًا في مشروع ترحيل ، لترحيل البيانات من DB القديم إلى المصنف الجديد (من فضلك لا تسأل لماذا أتجاوز طلب Java لهذا ، هذا ما يتطلبه العميل).
كان هناك بعض الرمز الأولي الذي أقوم بتحديثه الآن. أحد الأشياء التي أغيرها هو استخدام الربيع JdbcTemplate
بدلاً من ذلك ، رمز لوحة الغلاية الذي كان هناك.
لسوء الحظ ، لم أجد طريقة بعد تنفيذ الاستعلامات الجسدية على أ JdbcTemplate
, ، التناظرية للرمز القديم:
Statement statement = getConnection().createStatement(
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
statement.setFetchDirection(ResultSet.FETCH_FORWARD);
statement.setFetchSize(1000);
return statement.executeQuery();
ال getConnection()
فقط أعد أ Connection
كائن ، تم إنشاؤه في رمز JDBC عادي (ليس جزءًا من أ SessionFactory
أو تنفيذ إطار).
أود بعد ذلك حلقة على مجموعة النتائج ، ورسم الخرائط للصفوف واحدة في كل مرة. هل يعرف أي شخص ما إذا كانت هناك طريقة سهلة لتحقيق نفس الوظيفة مع JdbcTemplate
?
تيا
المحلول
أعتقد أن الخيار الطبيعي لمثل هذا التطبيق دفعة الربيع (اقرأ المثير للإعجاب صفحة الميزات)
فيما يلي الأقسام التي يجب أن تكون ذات صلة بك:
itemReaders و itemWriters> قاعدة البيانات
وعلى وجه الخصوص JdbcPagingItemReader
نصائح أخرى
هل تقصد sth. مثله؟
SimpleJdbcTemplate template = new SimpleJdbcTemplate(dataSource);
List<String> result = template.query("SELECT name FROM people WHERE id > ?",
new RowMapper<String>() {
public String mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs.getString("name");
}
}, 666
);
أو هذا:
template.getJdbcOperations().query("SELECT name FROM people WHERE id > ?",
new Object[] { 666 },
new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
System.out.println(String.format(
"Got '%s'", rs.getString("name")));
}
}
);