This commit is contained in:
RedKale
2016-04-12 14:53:13 +08:00
parent 600d4d0822
commit 426882d8dd
3 changed files with 36 additions and 33 deletions

View File

@@ -5,19 +5,19 @@
*/ */
package org.redkale.source; package org.redkale.source;
import static org.redkale.source.FilterNode.*;
import java.io.*; import java.io.*;
import java.lang.reflect.*; import java.lang.reflect.Method;
import java.net.*; import java.net.URL;
import java.nio.channels.*; import java.nio.channels.CompletionHandler;
import java.sql.*; import java.sql.*;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.*; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.*; import java.util.function.*;
import java.util.logging.*; import java.util.logging.*;
import javax.annotation.*; import javax.annotation.Resource;
import javax.sql.*; import javax.sql.ConnectionPoolDataSource;
import javax.xml.stream.*; import javax.xml.stream.*;
import static org.redkale.source.FilterNode.formatToString;
import org.redkale.util.*; import org.redkale.util.*;
/** /**
@@ -345,9 +345,9 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
final boolean distributed = info.distributed; final boolean distributed = info.distributed;
Attribute<T, Serializable>[] attrs = info.insertAttributes; Attribute<T, Serializable>[] attrs = info.insertAttributes;
String[] sqls = null; String[] sqls = null;
if (distributed && !info.initedPrimaryValue && primaryType.isPrimitive()) { if (distributed && !info.initedPrimaryValue && primaryType.isPrimitive()) { //由DataSource生成主键
synchronized (info) { synchronized (info) {
if (!info.initedPrimaryValue) { if (!info.initedPrimaryValue) { //初始化最大主键值
Statement stmt = conn.createStatement(); Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT MAX(" + info.getPrimarySQLColumn() + ") FROM " + info.getTable()); ResultSet rs = stmt.executeQuery("SELECT MAX(" + info.getPrimarySQLColumn() + ") FROM " + info.getTable());
if (rs.next()) { if (rs.next()) {
@@ -361,7 +361,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
} }
rs.close(); rs.close();
stmt.close(); stmt.close();
if (info.distributeTables != null) { if (info.distributeTables != null) { //是否还有其他表
for (final Class t : info.distributeTables) { for (final Class t : info.distributeTables) {
EntityInfo<T> infox = loadEntityInfo(t); EntityInfo<T> infox = loadEntityInfo(t);
stmt = conn.createStatement(); stmt = conn.createStatement();
@@ -392,7 +392,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
} }
prestmt.addBatch(); prestmt.addBatch();
} }
} else { } else { //调用writeListener回调接口
char[] sqlchars = sql.toCharArray(); char[] sqlchars = sql.toCharArray();
sqls = new String[values.length]; sqls = new String[values.length];
CharSequence[] ps = new CharSequence[attrs.length]; CharSequence[] ps = new CharSequence[attrs.length];
@@ -421,7 +421,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
} }
prestmt.executeBatch(); prestmt.executeBatch();
if (writeListener != null) writeListener.insert(sqls); if (writeListener != null) writeListener.insert(sqls);
if (info.autoGenerated) { if (info.autoGenerated) { //由数据库自动生成主键值
ResultSet set = prestmt.getGeneratedKeys(); ResultSet set = prestmt.getGeneratedKeys();
int i = -1; int i = -1;
while (set.next()) { while (set.next()) {
@@ -437,7 +437,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
} }
prestmt.close(); prestmt.close();
//------------------------------------------------------------ //------------------------------------------------------------
if (debug.get()) { if (debug.get()) { //打印调试信息
char[] sqlchars = sql.toCharArray(); char[] sqlchars = sql.toCharArray();
for (final T value : values) { for (final T value : values) {
//----------------------------- //-----------------------------
@@ -457,10 +457,10 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
} }
logger.finest(info.getType().getSimpleName() + " insert sql=" + sb.toString().replaceAll("(\r|\n)", "\\n")); logger.finest(info.getType().getSimpleName() + " insert sql=" + sb.toString().replaceAll("(\r|\n)", "\\n"));
} }
} } //打印结束
} }
final EntityCache<T> cache = info.getCache(); final EntityCache<T> cache = info.getCache();
if (cache != null) { if (cache != null) { //更新缓存
for (final T value : values) { for (final T value : values) {
cache.insert(value); cache.insert(value);
} }
@@ -492,7 +492,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
public <T> void delete(T... values) { public <T> void delete(T... values) {
if (values.length == 0) return; if (values.length == 0) return;
final EntityInfo<T> info = loadEntityInfo((Class<T>) values[0].getClass()); final EntityInfo<T> info = loadEntityInfo((Class<T>) values[0].getClass());
if (info.isVirtualEntity()) { if (info.isVirtualEntity()) { //虚拟表只更新缓存Cache
delete(null, info, values); delete(null, info, values);
return; return;
} }
@@ -524,7 +524,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
@Override @Override
public <T> void delete(Class<T> clazz, Serializable... ids) { public <T> void delete(Class<T> clazz, Serializable... ids) {
final EntityInfo<T> info = loadEntityInfo(clazz); final EntityInfo<T> info = loadEntityInfo(clazz);
if (info.isVirtualEntity()) { if (info.isVirtualEntity()) { //虚拟表只更新缓存Cache
delete(null, info, ids); delete(null, info, ids);
return; return;
} }

View File

@@ -5,11 +5,11 @@
*/ */
package org.redkale.source; package org.redkale.source;
import java.io.*; import java.io.Serializable;
import java.nio.channels.*; import java.nio.channels.CompletionHandler;
import java.sql.*; import java.sql.ResultSet;
import java.util.*; import java.util.*;
import java.util.function.*; import java.util.function.Consumer;
import org.redkale.util.*; import org.redkale.util.*;
/** /**
@@ -94,6 +94,9 @@ public interface DataSource {
public <T> void updateColumns(final CompletionHandler<Void, T> handler, final T value, final String... columns); public <T> void updateColumns(final CompletionHandler<Void, T> handler, final T value, final String... columns);
//############################################# 查询接口 #############################################
//-----------------------getXXXXResult----------------------------- //-----------------------getXXXXResult-----------------------------
public Number getNumberResult(final Class entityClass, final FilterFunc func, final String column); public Number getNumberResult(final Class entityClass, final FilterFunc func, final String column);

View File

@@ -29,7 +29,7 @@ public class FilterKey implements java.io.Serializable {
@Override @Override
public String toString() { public String toString() {
return "$." + getColumn(); return "a." + getColumn();
} }
} }