From e2783ac80f88f8b90ddca85fd7f0b487d3abaf47 Mon Sep 17 00:00:00 2001 From: Kristijan Mitrovic Date: Thu, 10 Sep 2020 00:58:07 +0000 Subject: [PATCH] Refactor bulk delete method (#12) Merge branch 'master' into kris/refactor_bulk_delete_methods Allow null as parameters in bulk delete method Use StringBuilder instead of appending Strings Use strict types instead of var Add new method for bulk delete with old signature Do not use SingletonMap so it may appended Set bulkDelete's parameters to be non null Refactor bulkDelete methods Co-authored-by: jonathan Co-authored-by: Kristijan Mitrovic Reviewed-on: https://git.bubblev.org/bubblev/cobbzilla-wizard/pulls/12 --- .../cobbzilla/wizard/dao/AbstractCRUDDAO.java | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/dao/AbstractCRUDDAO.java b/wizard-server/src/main/java/org/cobbzilla/wizard/dao/AbstractCRUDDAO.java index 1981b65..fa48cf2 100644 --- a/wizard-server/src/main/java/org/cobbzilla/wizard/dao/AbstractCRUDDAO.java +++ b/wizard-server/src/main/java/org/cobbzilla/wizard/dao/AbstractCRUDDAO.java @@ -302,13 +302,13 @@ public abstract class AbstractCRUDDAO + " SET " + String.join(" IS NULL, ", setFields) + " IS NULL" + whereClause); } else { - final var setFieldsSQLPart = Arrays.stream(setFields) - .map(s -> s + (s == null ? " IS NULL" : " = :" + s)) - .collect(Collectors.joining(", ")); + final String setFieldsSQLPart = Arrays.stream(setFields) + .map(s -> s + (s == null ? " IS NULL" : " = :" + s)) + .collect(Collectors.joining(", ")); queryBase = session.createQuery("UPDATE " + getEntityClass().getSimpleName() + " SET " + setFieldsSQLPart + whereClause); - for (var i = 0; i < setValues.length; i++) { + for (int i = 0; i < setValues.length; i++) { if (setValues[i] != null) queryBase.setParameter(setFields[i], setValues[i]); } } @@ -339,31 +339,30 @@ public abstract class AbstractCRUDDAO public static final String EX_UUID = "__exclude_uuid__"; - private int bulkDelete(String field, Object value, boolean notUuid) { - final Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); - final Query query; - final String deleteSql = "DELETE FROM " + getEntityClass().getSimpleName() + " WHERE "; - if (value == null) { - query = session.createQuery(deleteSql + field + " IS NULL"); - - } else if (notUuid) { - query = session.createQuery(deleteSql + field + " = :" + field + " AND uuid != :" + EX_UUID) - .setParameter(field, value) - .setParameter(EX_UUID, value); - } else { - query = session.createQuery(deleteSql + field + " = :" + field) - .setParameter(field, value); + private int bulkDelete(@NonNull final String field, @Nullable final Object value, final boolean notUuid) { + if (value == null) return bulkDeleteWhere(field + " IS NULL"); + + final StringBuilder condition = new StringBuilder(field).append(" = :").append(field); + final HashMap params = new HashMap<>(); + params.put(field, value); + + if (notUuid) { + condition.append(" AND uuid != :").append(EX_UUID); + params.put(EX_UUID, value); } - final int count = query.executeUpdate(); - session.setFlushMode(FlushMode.COMMIT); - session.flush(); - return count; + + return bulkDeleteWhere(condition.toString(), params); + } + + public int bulkDeleteWhere(@NonNull final String whereClause) { + return bulkDeleteWhere(whereClause, null); } - public int bulkDeleteWhere(String whereClause) { + public int bulkDeleteWhere(@NonNull final String whereClause, @Nullable final Map parameters) { final Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); final String deleteSql = "DELETE FROM " + getEntityClass().getSimpleName() + " WHERE " + whereClause; final Query query = session.createQuery(deleteSql); + if (!empty(parameters)) parameters.forEach(query::setParameter); final int count = query.executeUpdate(); session.setFlushMode(FlushMode.COMMIT); session.flush();