diff --git a/src/org/redkale/service/DataSourceService.java b/src/org/redkale/service/DataSourceService.java index 49f0644cd..f00a1c5f4 100644 --- a/src/org/redkale/service/DataSourceService.java +++ b/src/org/redkale/service/DataSourceService.java @@ -34,23 +34,23 @@ public class DataSourceService implements DataSource, Service, AutoCloseable { } @Override - public void delete(T... values) { - source.delete(values); + public int delete(T... values) { + return source.delete(values); } @Override - public void delete(final Class clazz, final Serializable... ids) { - source.delete(clazz, ids); + public int delete(final Class clazz, final Serializable... ids) { + return source.delete(clazz, ids); } @Override - public void delete(final Class clazz, FilterNode node) { - source.delete(clazz, node); + public int delete(final Class clazz, FilterNode node) { + return source.delete(clazz, node); } @Override - public void update(T... values) { - source.update(values); + public int update(T... values) { + return source.update(values); } @Override diff --git a/src/org/redkale/source/DataDefaultSource.java b/src/org/redkale/source/DataDefaultSource.java index 9b704d488..de21a9ef6 100644 --- a/src/org/redkale/source/DataDefaultSource.java +++ b/src/org/redkale/source/DataDefaultSource.java @@ -463,51 +463,53 @@ public final class DataDefaultSource implements DataSource, Function Entity类泛型 * @param values Entity对象 + * + * @return 删除的数据条数 */ @Override - public void delete(T... values) { - if (values.length == 0) return; + public int delete(T... values) { + if (values.length == 0) return 0; final EntityInfo info = loadEntityInfo((Class) values[0].getClass()); if (info.isVirtualEntity()) { //虚拟表只更新缓存Cache - delete(null, info, values); - return; + return delete(null, info, values); } Connection conn = createWriteSQLConnection(); try { - delete(conn, info, values); + return delete(conn, info, values); } finally { closeSQLConnection(conn); } } - private void delete(final Connection conn, final EntityInfo info, T... values) { - if (values.length == 0) return; + private int delete(final Connection conn, final EntityInfo info, T... values) { + if (values.length == 0) return 0; final Attribute primary = info.getPrimary(); Serializable[] ids = new Serializable[values.length]; int i = 0; for (final T value : values) { ids[i++] = (Serializable) primary.get(value); } - delete(conn, info, ids); + return delete(conn, info, ids); } @Override - public void delete(Class clazz, Serializable... ids) { + public int delete(Class clazz, Serializable... ids) { final EntityInfo info = loadEntityInfo(clazz); if (info.isVirtualEntity()) { //虚拟表只更新缓存Cache - delete(null, info, ids); - return; + return delete(null, info, ids); } Connection conn = createWriteSQLConnection(); try { - delete(conn, info, ids); + return delete(conn, info, ids); } finally { closeSQLConnection(conn); } } - private void delete(final Connection conn, final EntityInfo info, Serializable... keys) { - if (keys.length == 0) return; + private int delete(final Connection conn, final EntityInfo info, Serializable... keys) { + if (keys.length == 0) return -1; + int c = -1; + int c2 = 0; try { if (!info.isVirtualEntity()) { final Statement stmt = conn.createStatement(); @@ -516,38 +518,43 @@ public final class DataDefaultSource implements DataSource, Function cache = info.getCache(); - if (cache == null) return; + if (cache == null) return c; + int c2 = 0; for (final T value : values) { - cache.update(value); + c2 += cache.update(value); } if (cacheListener != null) cacheListener.updateCache(clazz, values); + return c >= 0 ? c : c2; } catch (SQLException e) { throw new RuntimeException(e); } diff --git a/src/org/redkale/source/DataSource.java b/src/org/redkale/source/DataSource.java index 2417f9cfc..d7a53aa28 100644 --- a/src/org/redkale/source/DataSource.java +++ b/src/org/redkale/source/DataSource.java @@ -38,8 +38,10 @@ public interface DataSource { * * @param 泛型 * @param values Entity对象 + * + * @return 删除的数据条数 */ - public void delete(final T... values); + public int delete(final T... values); /** * 根据主键值删除数据 @@ -48,10 +50,12 @@ public interface DataSource { * @param Entity类的泛型 * @param clazz Entity类 * @param ids 主键值 + * + * @return 删除的数据条数 */ - public void delete(final Class clazz, final Serializable... ids); + public int delete(final Class clazz, final Serializable... ids); - public void delete(final Class clazz, final FilterNode node); + public int delete(final Class clazz, final FilterNode node); //------------------------update--------------------------- /** @@ -59,8 +63,10 @@ public interface DataSource { * * @param 泛型 * @param values Entity对象 + * + * @return 更新的数据条数 */ - public void update(final T... values); + public int update(final T... values); public int updateColumn(final Class clazz, final Serializable id, final String column, final Serializable value); diff --git a/src/org/redkale/source/EntityCache.java b/src/org/redkale/source/EntityCache.java index a121701c1..81cdb7598 100644 --- a/src/org/redkale/source/EntityCache.java +++ b/src/org/redkale/source/EntityCache.java @@ -363,10 +363,12 @@ public final class EntityCache { } } - public void delete(final Serializable id) { - if (id == null) return; + public int delete(final Serializable id) { + if (id == null) return 0; final T rs = this.map.remove(id); - if (rs != null) this.list.remove(rs); + if (rs == null) return 0; + this.list.remove(rs); + return 1; } public Serializable[] delete(final FilterNode node) { @@ -383,13 +385,14 @@ public final class EntityCache { return ids; } - public void update(final T value) { - if (value == null) return; + public int update(final T value) { + if (value == null) return 0; T rs = this.map.get(this.primary.get(value)); - if (rs == null) return; + if (rs == null) return 0; synchronized (rs) { this.chgReproduce.apply(rs, value); } + return 1; } public T update(final T value, Collection> attrs) {