From 589d34d8a40a1efbc87cd6f27e0bf43c42f6d69b Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Wed, 7 Sep 2016 17:29:58 +0800 Subject: [PATCH] --- src/org/redkale/source/DataDefaultSource.java | 87 ++++++++++--------- 1 file changed, 47 insertions(+), 40 deletions(-) diff --git a/src/org/redkale/source/DataDefaultSource.java b/src/org/redkale/source/DataDefaultSource.java index 286d81df2..089a4af78 100644 --- a/src/org/redkale/source/DataDefaultSource.java +++ b/src/org/redkale/source/DataDefaultSource.java @@ -334,19 +334,16 @@ public final class DataDefaultSource implements DataSource, Function[] attrs = info.insertAttributes; - String[] sqls = null; + String[] sqls = new String[values.length]; if (distributed && !info.initedPrimaryValue && primaryType.isPrimitive()) { //由DataSource生成主键 synchronized (info) { if (!info.initedPrimaryValue) { //初始化最大主键值 try { Statement stmt = conn.createStatement(); - ResultSet rs = stmt.executeQuery("SELECT MAX(" + info.getPrimarySQLColumn() + ") FROM " + info.getTable(values[0])); if (rs.next()) { if (primaryType == int.class) { @@ -366,42 +363,7 @@ public final class DataDefaultSource implements DataSource, Function attr : attrs) { - prestmt.setObject(++i, attr.get(value)); - } - prestmt.addBatch(); - } - } else { //调用writeListener回调接口 - char[] sqlchars = sql.toCharArray(); - sqls = new String[values.length]; - CharSequence[] ps = new CharSequence[attrs.length]; - int index = 0; - for (final T value : values) { - int i = 0; - if (distributed) info.createPrimaryValue(value); - for (Attribute attr : attrs) { - Object a = attr.get(value); - ps[i] = FilterNode.formatToString(a); - prestmt.setObject(++i, a); - } - prestmt.addBatch(); - //----------------------------- - StringBuilder sb = new StringBuilder(128); - i = 0; - for (char ch : sqlchars) { - if (ch == '?') { - sb.append(ps[i++]); - } else { - sb.append(ch); - } - } - sqls[index++] = sb.toString(); - } - } + PreparedStatement prestmt = createInsertPreparedStatement(conn, sql, info, sqls, values); try { prestmt.executeBatch(); } catch (SQLException se) { @@ -416,6 +378,8 @@ public final class DataDefaultSource implements DataSource, Function PreparedStatement createInsertPreparedStatement(final Connection conn, final String sql, + final EntityInfo info, final String[] sqls, T... values) throws SQLException { + Attribute[] attrs = info.insertAttributes; + final PreparedStatement prestmt = info.autoGenerated + ? conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS) : conn.prepareStatement(sql); + if (writeListener == null) { + for (final T value : values) { + int i = 0; + if (info.distributed) info.createPrimaryValue(value); + for (Attribute attr : attrs) { + prestmt.setObject(++i, attr.get(value)); + } + prestmt.addBatch(); + } + } else { //调用writeListener回调接口 + char[] sqlchars = sql.toCharArray(); + CharSequence[] ps = new CharSequence[attrs.length]; + int index = 0; + for (final T value : values) { + int i = 0; + if (info.distributed) info.createPrimaryValue(value); + for (Attribute attr : attrs) { + Object a = attr.get(value); + ps[i] = FilterNode.formatToString(a); + prestmt.setObject(++i, a); + } + prestmt.addBatch(); + //----------------------------- + StringBuilder sb = new StringBuilder(128); + i = 0; + for (char ch : sqlchars) { + if (ch == '?') { + sb.append(ps[i++]); + } else { + sb.append(ch); + } + } + sqls[index++] = sb.toString(); + } + } + return prestmt; + } + public void insertCache(Class clazz, T... values) { if (values.length == 0) return; final EntityInfo info = loadEntityInfo(clazz);