From bb85a6482b874d31e49133131d995419bb6847c7 Mon Sep 17 00:00:00 2001 From: Succy Date: Sat, 2 Feb 2019 11:56:46 +0800 Subject: [PATCH 1/4] =?UTF-8?q?isEmpty=E5=92=8CisNotEmpty=E9=92=88?= =?UTF-8?q?=E5=AF=B9String=E7=B1=BB=E5=9E=8B=E5=81=9A=E4=BA=86=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/engine/EmptyExpressionFunction.java | 33 ++++++++----------- .../engine/NotEmptyExpressionFunction.java | 31 ++++++++--------- 2 files changed, 26 insertions(+), 38 deletions(-) diff --git a/src/main/java/org/beetl/sql/core/engine/EmptyExpressionFunction.java b/src/main/java/org/beetl/sql/core/engine/EmptyExpressionFunction.java index 022d4678..02065fd9 100755 --- a/src/main/java/org/beetl/sql/core/engine/EmptyExpressionFunction.java +++ b/src/main/java/org/beetl/sql/core/engine/EmptyExpressionFunction.java @@ -27,38 +27,31 @@ */ package org.beetl.sql.core.engine; -import java.util.Collection; -import java.util.Map; - import org.beetl.core.Context; import org.beetl.core.Function; -import org.beetl.core.misc.PrimitiveArrayUtil; /** * 判断全局变量是否为“空”,下列情况属于为空·的情况,返回true, * * 不同于beetl 的isEmpty * 参数可以一个到多个,如

* ${isEmpty("list")} - * @author joelli * + * @author joelli */ -public class EmptyExpressionFunction implements Function -{ - - public Boolean call(Object[] paras, Context ctx) - { - - - Object result = paras[0]; - return result==null; - - - } - +public class EmptyExpressionFunction implements Function { + @Override + public Boolean call(Object[] paras, Context ctx) { + Object result = paras[0]; + // 针对String类型做优化 + if (String.class.isInstance(result)) { + return ((String)result).isEmpty(); + } + return result == null; + } } diff --git a/src/main/java/org/beetl/sql/core/engine/NotEmptyExpressionFunction.java b/src/main/java/org/beetl/sql/core/engine/NotEmptyExpressionFunction.java index e20422d8..a8ecd1db 100755 --- a/src/main/java/org/beetl/sql/core/engine/NotEmptyExpressionFunction.java +++ b/src/main/java/org/beetl/sql/core/engine/NotEmptyExpressionFunction.java @@ -27,30 +27,25 @@ */ package org.beetl.sql.core.engine; -import java.util.Collection; -import java.util.Map; - import org.beetl.core.Context; import org.beetl.core.Function; -import org.beetl.core.misc.PrimitiveArrayUtil; /** * 判断全局变量是否不为“空”, * ${isNotEmpty(xxx)} - * @author joelli * + * @author joelli */ -public class NotEmptyExpressionFunction implements Function -{ - - public Boolean call(Object[] paras, Context ctx) - { - - - Object result = paras[0]; - return result!=null; - - - } - +public class NotEmptyExpressionFunction implements Function { + + @Override + public Boolean call(Object[] paras, Context ctx) { + Object result = paras[0]; + + // 针对String类型优化,避免传递""同样认为是true,如果result == null,则不会进入这里 + if (String.class.isInstance(result)) { + return ((String) result).isEmpty(); + } + return result != null; + } } -- Gitee From b68858d453647eacc4a4c3c8d7d5adecaddf4bd8 Mon Sep 17 00:00:00 2001 From: Succy Date: Thu, 28 Mar 2019 21:34:37 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0isBlank=E5=92=8CisNotBlan?= =?UTF-8?q?k=E7=9A=84=E8=A1=A8=E8=BE=BE=E5=BC=8F=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/engine/BlankExpressionFunction.java | 26 +++++++++++++++++++ .../engine/NotBlankExpressionFunction.java | 24 +++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/main/java/org/beetl/sql/core/engine/BlankExpressionFunction.java create mode 100644 src/main/java/org/beetl/sql/core/engine/NotBlankExpressionFunction.java diff --git a/src/main/java/org/beetl/sql/core/engine/BlankExpressionFunction.java b/src/main/java/org/beetl/sql/core/engine/BlankExpressionFunction.java new file mode 100644 index 00000000..058cc05a --- /dev/null +++ b/src/main/java/org/beetl/sql/core/engine/BlankExpressionFunction.java @@ -0,0 +1,26 @@ +package org.beetl.sql.core.engine; + +import org.beetl.core.Context; +import org.beetl.core.Function; +import org.beetl.sql.core.kit.StringKit; + +/** + * 判断字符串是否为空。如果字符串中有一个以上字符不为空,则不为空 + * 如果传递下来的参数不是String类型,则按照是否为null进行判断 + * @author Succy + * create on 2019/2/3 + */ +public class BlankExpressionFunction implements Function { + @Override + public Object call(Object[] paras, Context ctx) { + Object param = paras[0]; + if (param == null) { + return true; + } + + if (!String.class.isInstance(param)) { + throw new IllegalArgumentException("期望参数是String类型"); + } + return StringKit.isBlank((String) param); + } +} \ No newline at end of file diff --git a/src/main/java/org/beetl/sql/core/engine/NotBlankExpressionFunction.java b/src/main/java/org/beetl/sql/core/engine/NotBlankExpressionFunction.java new file mode 100644 index 00000000..fe6f6ccb --- /dev/null +++ b/src/main/java/org/beetl/sql/core/engine/NotBlankExpressionFunction.java @@ -0,0 +1,24 @@ +package org.beetl.sql.core.engine; + +import org.beetl.core.Context; +import org.beetl.core.Function; +import org.beetl.sql.core.kit.StringKit; + +/** + * 判断字符串是否非空 + * @author Succy + * create on 2019/2/3 + */ +public class NotBlankExpressionFunction implements Function { + @Override + public Object call(Object[] paras, Context ctx) { + Object param = paras[0]; + if (param != null) { + if (!String.class.isInstance(param)) { + throw new IllegalArgumentException("期望参数是String类型"); + } + return StringKit.isNotBlank((String) param); + } + return false; + } +} -- Gitee From dc1deceb53e5b7ed027314dea39d66af7ae86169 Mon Sep 17 00:00:00 2001 From: Succy Date: Sat, 30 Mar 2019 22:46:56 +0800 Subject: [PATCH 3/4] =?UTF-8?q?insertBatch/updateBatch=E7=B3=BB=E5=88=97?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E4=BD=BF=E7=94=A8Collection=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2List?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/beetl/sql/core/SQLManager.java | 175 +++++---- .../java/org/beetl/sql/core/SQLScript.java | 346 ++++++++---------- .../org/beetl/sql/core/kit/StringKit.java | 4 +- .../org/beetl/sql/core/mapper/BaseMapper.java | 20 +- .../core/mapper/internal/InsertBatchAmi.java | 9 +- .../mapper/internal/UpdateByIdBatchAmi.java | 4 +- 6 files changed, 254 insertions(+), 304 deletions(-) diff --git a/src/main/java/org/beetl/sql/core/SQLManager.java b/src/main/java/org/beetl/sql/core/SQLManager.java index 665205a6..bc8b5d4c 100755 --- a/src/main/java/org/beetl/sql/core/SQLManager.java +++ b/src/main/java/org/beetl/sql/core/SQLManager.java @@ -1,29 +1,5 @@ package org.beetl.sql.core; -import static org.beetl.sql.core.kit.ConstantEnum.DELETE_BY_ID; -import static org.beetl.sql.core.kit.ConstantEnum.DELETE_TEMPLATE_BY_ID; -import static org.beetl.sql.core.kit.ConstantEnum.INSERT; -import static org.beetl.sql.core.kit.ConstantEnum.INSERT_TEMPLATE; -import static org.beetl.sql.core.kit.ConstantEnum.LOCK_BY_ID; -import static org.beetl.sql.core.kit.ConstantEnum.SELECT_ALL; -import static org.beetl.sql.core.kit.ConstantEnum.SELECT_BY_ID; -import static org.beetl.sql.core.kit.ConstantEnum.SELECT_BY_TEMPLATE; -import static org.beetl.sql.core.kit.ConstantEnum.SELECT_COUNT_BY_TEMPLATE; -import static org.beetl.sql.core.kit.ConstantEnum.UPDATE_ALL; -import static org.beetl.sql.core.kit.ConstantEnum.UPDATE_BY_ID; -import static org.beetl.sql.core.kit.ConstantEnum.UPDATE_TEMPLATE_BY_ID; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.lang.reflect.Method; -import java.math.BigDecimal; -import java.sql.Connection; -import java.sql.SQLException; -import java.util.*; - import org.beetl.sql.core.db.ClassDesc; import org.beetl.sql.core.db.DBStyle; import org.beetl.sql.core.db.KeyHolder; @@ -48,7 +24,38 @@ import org.beetl.sql.ext.gen.GenConfig; import org.beetl.sql.ext.gen.GenFilter; import org.beetl.sql.ext.gen.MDCodeGen; import org.beetl.sql.ext.gen.SourceGen; -import sun.font.CompositeGlyphMapper; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.lang.reflect.Method; +import java.math.BigDecimal; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; + +import static org.beetl.sql.core.kit.ConstantEnum.DELETE_BY_ID; +import static org.beetl.sql.core.kit.ConstantEnum.DELETE_TEMPLATE_BY_ID; +import static org.beetl.sql.core.kit.ConstantEnum.INSERT; +import static org.beetl.sql.core.kit.ConstantEnum.INSERT_TEMPLATE; +import static org.beetl.sql.core.kit.ConstantEnum.LOCK_BY_ID; +import static org.beetl.sql.core.kit.ConstantEnum.SELECT_ALL; +import static org.beetl.sql.core.kit.ConstantEnum.SELECT_BY_ID; +import static org.beetl.sql.core.kit.ConstantEnum.SELECT_BY_TEMPLATE; +import static org.beetl.sql.core.kit.ConstantEnum.SELECT_COUNT_BY_TEMPLATE; +import static org.beetl.sql.core.kit.ConstantEnum.UPDATE_ALL; +import static org.beetl.sql.core.kit.ConstantEnum.UPDATE_BY_ID; +import static org.beetl.sql.core.kit.ConstantEnum.UPDATE_TEMPLATE_BY_ID; /** * Beetsql 操作入口 @@ -99,7 +106,6 @@ public class SQLManager { */ public SQLManager(DBStyle dbStyle, ConnectionSource ds) { this(dbStyle, new ClasspathLoader("/sql"), ds); - } /** @@ -109,7 +115,6 @@ public class SQLManager { */ public SQLManager(DBStyle dbStyle, SQLLoader sqlLoader, ConnectionSource ds) { this(dbStyle, sqlLoader, ds, new DefaultNameConversion(), new Interceptor[]{}, null); - } /** @@ -120,7 +125,6 @@ public class SQLManager { */ public SQLManager(DBStyle dbStyle, SQLLoader sqlLoader, ConnectionSource ds, NameConversion nc) { this(dbStyle, sqlLoader, ds, nc, new Interceptor[]{}, null); - } /** @@ -618,7 +622,8 @@ public class SQLManager { root.put("_root", paras); } - if (query.getOrderBy() != null&&query.getOrderBy().length()!=0) { + // 直接使用StringKit.isNotBlank做判断 + if (StringKit.isNotBlank(query.getOrderBy())) { root.put(DBStyle.ORDER_BY, query.getOrderBy()); } @@ -635,7 +640,7 @@ public class SQLManager { } if (totalRow == null) { - totalRow = 0l; + totalRow = 0L; } query.setTotalRow(totalRow); } @@ -1012,7 +1017,6 @@ public class SQLManager { * @return */ public int deleteById(Class clazz, Object pkValue) { - SQLScript script = getScript(clazz, DELETE_BY_ID); return script.deleteById(clazz, pkValue); } @@ -1024,7 +1028,6 @@ public class SQLManager { * @return */ public int deleteObject(Object obj) { - SQLScript script = getScript(obj.getClass(), DELETE_TEMPLATE_BY_ID); return script.update(obj); } @@ -1107,7 +1110,6 @@ public class SQLManager { * @return */ public int insert(Class clazz, Object paras) { - return this.insert(clazz, paras, false); } @@ -1117,22 +1119,21 @@ public class SQLManager { Class target = clazz; int result = template ? this.insertTemplate(target, paras, holder) : this.insert(target, paras, holder); - assignAutoId(paras,holder.getKey()); + assignAutoId(paras, holder.getKey()); return result; - } else { SQLScript script = getScript(clazz, template ? INSERT_TEMPLATE : INSERT); return script.insert(paras); } } - protected void assignAutoId(Object bean,Object id){ + protected void assignAutoId(Object bean, Object id) { Class target = bean.getClass(); String table = this.nc.getTableName(target); ClassDesc desc = this.metaDataManager.getTable(table).getClassDesc(target, nc); if (desc.getIdCols().isEmpty()) { - return ; + return; } else { Method getterMethod = (Method) desc.getIdMethods().get(desc.getIdAttrs().get(0)); @@ -1152,42 +1153,42 @@ public class SQLManager { * 批量插入 * * @param clazz - * @param list + * @param collection */ - public int[] insertBatch(Class clazz, List list) { + public int[] insertBatch(Class clazz, Collection collection) { SQLScript script = getScript(clazz, INSERT); LinkedList keys = new LinkedList(); - int[] ret = script.insertBatch(list,null,false); - if(keys.isEmpty()){ + int[] ret = script.insertBatch(collection, null, false); + if (keys.isEmpty()) { return ret; } //如果有自增主键 - Iterator it = list.iterator(); + Iterator it = collection.iterator(); Iterator keyIt = keys.iterator(); - while(it.hasNext()){ + while (it.hasNext()) { Object bean = it.next(); keyIt.hasNext(); - Object key = keyIt.next(); - this.assignAutoId(bean,key); + Object key = keyIt.next(); + this.assignAutoId(bean, key); } return ret; } - public int[] insertBatch(Class clazz, List list,boolean autoDbAssignKey) { + public int[] insertBatch(Class clazz, Collection collection, boolean autoDbAssignKey) { SQLScript script = getScript(clazz, INSERT); LinkedList keys = new LinkedList(); - int[] ret = script.insertBatch(list,keys,autoDbAssignKey); - if(!autoDbAssignKey){ + int[] ret = script.insertBatch(collection, keys, autoDbAssignKey); + if (!autoDbAssignKey) { return ret; } //如果有自增主键 - Iterator it = list.iterator(); + Iterator it = collection.iterator(); Iterator keyIt = keys.iterator(); - while(it.hasNext()){ + while (it.hasNext()) { Object bean = it.next(); keyIt.hasNext(); - Object key = keyIt.next(); - this.assignAutoId(bean,key); + Object key = keyIt.next(); + this.assignAutoId(bean, key); } return ret; } @@ -1255,7 +1256,6 @@ public class SQLManager { } else { return script.insertBySqlId(map, null, null); } - } /** @@ -1280,7 +1280,6 @@ public class SQLManager { return script.insertBySqlId(paras, holder, ((CaseInsensitiveOrderSet) idCols).getFirst()); } else { return script.insertBySqlId(paras, holder, null); - } } @@ -1299,63 +1298,61 @@ public class SQLManager { /** * 先判断是否主键为空,如果为空,则插入,如果不为空,则从数据库 - * 出一条,如果未取到,则插入一条,其他情况按照主键更新 + * 出一条,如果未取到,则插入一条,其他情况按照主键更新 * * @param obj * @return 受影响条数 */ public int upsert(Object obj) { - return this.upsert(obj,false); + return this.upsert(obj, false); } /** * 先判断是否主键为空,如果为空,则插入,如果不为空,则从数据库 * 取出一条,如果未取到,则插入一条,其他情况按照主键更新 + * * @param obj * @return 受影响条数 */ public int upsertByTemplate(Object obj) { - return this.upsert(obj,true); + return this.upsert(obj, true); } /** * 先判断是否主键为空,如果为空,则插入,如果不为空,则从数据库 * 取出一条,如果未取到,则插入一条,其他情况按照主键更新 - * @param obj 待更新/插入的实体对象 + * + * @param obj 待更新/插入的实体对象 * @param template * @return 受影响条数 */ - protected int upsert(Object obj,boolean template) { - Class c = obj.getClass(); + protected int upsert(Object obj, boolean template) { + Class c = obj.getClass(); String tableName = this.nc.getTableName(c); TableDesc table = this.metaDataManager.getTable(tableName); ClassDesc classDesc = table.getClassDesc(this.nc); List idProperties = classDesc.getIdAttrs(); - if(idProperties.size()!=1){ - throw new BeetlSQLException(BeetlSQLException.ID_EXPECTED_ONE_ERROR,"upsert方法期望只有一个主键"); + if (idProperties.size() != 1) { + throw new BeetlSQLException(BeetlSQLException.ID_EXPECTED_ONE_ERROR, "upsert方法期望只有一个主键"); } - Object pk = BeanKit.getBeanProperty(obj,idProperties.get(0)); - if(pk==null){ + Object pk = BeanKit.getBeanProperty(obj, idProperties.get(0)); + if (pk == null) { //插入 - return template?this.insertTemplate(obj,true):this.insert(obj,true); + return template ? this.insertTemplate(obj, true) : this.insert(obj, true); } - Object dbValue = this.single(c,pk); - if(dbValue==null){ + Object dbValue = this.single(c, pk); + if (dbValue == null) { //还是插入 - return template?this.insertTemplate(obj,true):this.insert(obj,true); + return template ? this.insertTemplate(obj, true) : this.insert(obj, true); } //更新 - return template?this.updateTemplateById(obj):this.updateById(obj); - - + return template ? this.updateTemplateById(obj) : this.updateById(obj); } - - /** * 更新一个对象 * @@ -1403,16 +1400,17 @@ public class SQLManager { /**** * 批量更新 * - * @param list + * @param collection * ,包含pojo(不支持map) * @return */ - public int[] updateByIdBatch(List list) { - if (list == null || list.isEmpty()) { + public int[] updateByIdBatch(Collection collection) { + if (collection == null || collection.isEmpty()) { return new int[0]; } - SQLScript script = getScript(list.get(0).getClass(), UPDATE_BY_ID); - return script.updateBatch(list); + // 能走到这说明collection有元素,可以用迭代器的next() + SQLScript script = getScript(collection.iterator().next().getClass(), UPDATE_BY_ID); + return script.updateBatch(collection); } /** @@ -1457,21 +1455,21 @@ public class SQLManager { * @param list * @return 返回更新的条数 */ - public int[] updateBatch(String sqlId, List list) { + public int[] updateBatch(String sqlId, Collection collection) { SQLScript script = getScript(sqlId); - return script.updateBatch(list); + return script.updateBatch(collection); } /** * 批量模板更新方式,list包含的对象是作为参数,非空属性参与更新 * * @param clz - * @param list + * @param collection * @return */ - public int[] updateBatchTemplateById(Class clz, List list) { + public int[] updateBatchTemplateById(Class clz, Collection collection) { SQLScript script = getScript(clz, UPDATE_TEMPLATE_BY_ID); - return script.updateBatch(list); + return script.updateBatch(collection); } /** @@ -1720,7 +1718,7 @@ public class SQLManager { SQLScript script = new SQLScript(source, this); return script.sqlReadyExecuteUpdate(p); } - + public int[] executeBatchUpdate(SQLBatchReady batch) { SQLSource source = new SQLSource("native.batch." + batch.getSql(), batch.getSql()); SQLScript script = new SQLScript(source, this); @@ -2185,7 +2183,7 @@ public class SQLManager { refreshStatus = 0; } - public boolean isRefreshReady(){ + public boolean isRefreshReady() { return this.refreshStatus == 0; } @@ -2207,14 +2205,13 @@ public class SQLManager { /** * 为不存在的表设置一个数据库真正的表,以用于获取metadata,用于数据库分库分表 + * * @param virtualTable * @param realTable */ - public void addVirtualTable(String realTable,String virtualTable){ - this.metaDataManager.addTableVirtuals(realTable,virtualTable); + public void addVirtualTable(String realTable, String virtualTable) { + this.metaDataManager.addTableVirtuals(realTable, virtualTable); } - - } diff --git a/src/main/java/org/beetl/sql/core/SQLScript.java b/src/main/java/org/beetl/sql/core/SQLScript.java index 387ecab1..605c41b4 100755 --- a/src/main/java/org/beetl/sql/core/SQLScript.java +++ b/src/main/java/org/beetl/sql/core/SQLScript.java @@ -2,12 +2,15 @@ package org.beetl.sql.core; import org.beetl.core.GroupTemplate; import org.beetl.core.Template; -import org.beetl.core.resource.StringTemplateResourceLoader; import org.beetl.sql.core.annotatoin.AssignID; import org.beetl.sql.core.annotatoin.builder.ObjectBuilderHolder; import org.beetl.sql.core.annotatoin.builder.ObjectSelectBuilder; -import org.beetl.sql.core.db.*; -import org.beetl.sql.core.engine.RefreshRuntimeException; +import org.beetl.sql.core.db.ClassAnnotation; +import org.beetl.sql.core.db.ClassDesc; +import org.beetl.sql.core.db.DBStyle; +import org.beetl.sql.core.db.KeyHolder; +import org.beetl.sql.core.db.MetadataManager; +import org.beetl.sql.core.db.TableDesc; import org.beetl.sql.core.engine.SQLParameter; import org.beetl.sql.core.kit.BeanKit; import org.beetl.sql.core.kit.CaseInsensitiveOrderSet; @@ -18,8 +21,19 @@ import org.beetl.sql.core.mapping.RowMapperResultSetExt; import java.lang.reflect.Method; import java.math.BigDecimal; import java.math.BigInteger; -import java.sql.*; -import java.util.*; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; import java.util.Map.Entry; public class SQLScript { @@ -31,8 +45,6 @@ public class SQLScript { final String dbName; private List listener; - - // final QueryMapping queryMapping = QueryMapping.getInstance(); public SQLScript(SQLSource sqlSource, SQLManager sm) { @@ -41,7 +53,6 @@ public class SQLScript { this.sm = sm; this.id = sqlSource.getId(); this.dbName = sm.getDbStyle().getName(); - } private static boolean isBaseDataType(Class clazz) { @@ -90,13 +101,13 @@ public class SQLScript { result.jdbcSql = jdbcSql; result.jdbcPara = jdbcPara; //sql 脚本执行后回掉 - List scriptListeners = (List)t.getCtx().getGlobal("_listener"); - if(scriptListeners==null) { - return result; + List scriptListeners = (List) t.getCtx().getGlobal("_listener"); + if (scriptListeners == null) { + return result; } - if(this.listener==null) { - this.listener = scriptListeners; - return result; + if (this.listener == null) { + this.listener = scriptListeners; + return result; } this.listener.addAll(scriptListeners); return result; @@ -107,51 +118,40 @@ public class SQLScript { * * @param target */ - protected void checkAnnotatonBeforeSelect(Class target,Map paras) { - ClassAnnotation an = ClassAnnotation.getClassAnnotation(target); - if(an.getObjectBuilders().isEmpty()) { - return ; - } - for(ObjectBuilderHolder holder:an.getObjectBuilders()) { - Object builder = holder.getInstance(); - if(builder instanceof ObjectSelectBuilder ) { - ((ObjectSelectBuilder)builder).beforeSelect(target, this, holder.getBeanAnnotaton(),paras); - } - - - } - - } - - protected List checkAnnotatonAfterSelect(Class target,List entitys,SQLResult sqlResult){ - ClassAnnotation an = ClassAnnotation.getClassAnnotation(target); - if(an.getObjectBuilders().isEmpty()) { - return entitys; - } - List newList = entitys; - for(ObjectBuilderHolder holder:an.getObjectBuilders()) { - Object builder = holder.getInstance(); - if(builder instanceof ObjectSelectBuilder ) { - newList = ((ObjectSelectBuilder)builder).afterSelect(target, newList,this, holder.getBeanAnnotaton(),sqlResult); - } - - } - return newList; - - - } - - + protected void checkAnnotatonBeforeSelect(Class target, Map paras) { + ClassAnnotation an = ClassAnnotation.getClassAnnotation(target); + if (an.getObjectBuilders().isEmpty()) { + return; + } + for (ObjectBuilderHolder holder : an.getObjectBuilders()) { + Object builder = holder.getInstance(); + if (builder instanceof ObjectSelectBuilder) { + ((ObjectSelectBuilder) builder).beforeSelect(target, this, holder.getBeanAnnotaton(), paras); + } + } + } + + protected List checkAnnotatonAfterSelect(Class target, List entitys, SQLResult sqlResult) { + ClassAnnotation an = ClassAnnotation.getClassAnnotation(target); + if (an.getObjectBuilders().isEmpty()) { + return entitys; + } + List newList = entitys; + for (ObjectBuilderHolder holder : an.getObjectBuilders()) { + Object builder = holder.getInstance(); + if (builder instanceof ObjectSelectBuilder) { + newList = ((ObjectSelectBuilder) builder).afterSelect(target, newList, this, holder.getBeanAnnotaton(), sqlResult); + } + } + return newList; + } public int insert(Object paras) { Map map = new HashMap(); map.put("_root", paras); addParaIfAssignId(paras); - PreparedStatement ps = null; Connection conn = null; - - SQLResult result = this.run(map); String sql = result.jdbcSql; List objs = result.jdbcPara; @@ -160,7 +160,6 @@ public class SQLScript { objs = ctx.getParas(); try { - conn = sm.getDs().getConn(this.id, true, sql, objs); ps = conn.prepareStatement(sql); this.setPreparedStatementPara(ps, objs); @@ -184,8 +183,6 @@ public class SQLScript { Connection conn = null; InterceptorContext ctx = null; try { - - SQLResult result = this.run(map); String sql = result.jdbcSql; List objs = result.jdbcPara; @@ -196,13 +193,13 @@ public class SQLScript { if (conn == null) { conn = sm.getDs().getConn(id, true, sql, objs); } - int idType = ((SQLTableSource)sqlSource).getIdType(); - if (idType== DBStyle.ID_ASSIGN) { + int idType = ((SQLTableSource) sqlSource).getIdType(); + if (idType == DBStyle.ID_ASSIGN) { ps = conn.prepareStatement(sql); } else if (idType == DBStyle.ID_AUTO) { ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); } else if (idType == DBStyle.ID_SEQ) { - CaseInsensitiveOrderSet idCols = (CaseInsensitiveOrderSet) ((SQLTableSource)sqlSource).getTableDesc().getIdNames(); + CaseInsensitiveOrderSet idCols = (CaseInsensitiveOrderSet) ((SQLTableSource) sqlSource).getTableDesc().getIdNames(); if (idCols.size() != 1) { throw new BeetlSQLException(BeetlSQLException.ID_EXPECTED_ONE_ERROR); } @@ -210,11 +207,8 @@ public class SQLScript { } else { ps = conn.prepareStatement(sql); } - this.setPreparedStatementPara(ps, objs); - int ret = ps.executeUpdate(); - if (idType == DBStyle.ID_AUTO || idType == DBStyle.ID_SEQ) { ResultSet seqRs = ps.getGeneratedKeys(); seqRs.next(); @@ -233,14 +227,11 @@ public class SQLScript { } public int insertBySqlId(Map map, KeyHolder holder, String keyName) { - boolean getKey = holder != null; - PreparedStatement ps = null; Connection conn = null; InterceptorContext ctx = null; try { - SQLResult result = this.run(map); String sql = result.jdbcSql; List objs = result.jdbcPara; @@ -258,11 +249,8 @@ public class SQLScript { ps = conn.prepareStatement(sql); } - this.setPreparedStatementPara(ps, objs); - int ret = ps.executeUpdate(); - if (getKey) { ResultSet seqRs = ps.getGeneratedKeys(); seqRs.next(); @@ -270,7 +258,6 @@ public class SQLScript { holder.setKey(key); seqRs.close(); } - this.callInterceptorAsAfter(ctx, ret); return ret; } catch (SQLException e) { @@ -282,16 +269,13 @@ public class SQLScript { } public T singleSelect(Object paras, Class target) { - Map map = new HashMap(); map.put("_root", paras); return this.selectSingle(map, target); } public T selectSingle(Map map, Class target) { - List result = select(target, map); - if (result.size() > 0) { return result.get(0); } @@ -299,17 +283,15 @@ public class SQLScript { } public T selectUnique(Map map, Class target) { - List result = select(target, map); int size = result.size(); if (size == 1) { return result.get(0); - }else if(size==0) { + } else if (size == 0) { throw new BeetlSQLException(BeetlSQLException.UNIQUE_EXCEPT_ERROR, "unique查询,但数据库未找到结果集:参数是" + map); - }else { + } else { throw new BeetlSQLException(BeetlSQLException.UNIQUE_EXCEPT_ERROR, "unique查询,找到多条记录:参数是" + map); } - } public List select(Class clazz, Object paras) { @@ -319,10 +301,10 @@ public class SQLScript { } public List select(Class clazz, Map paras, RowMapper mapper) { - // + // checkAnnotatonBeforeSelect(clazz, paras); - //运行sql模板,获取实际的sql语句 - SQLResult result = run(paras); + //运行sql模板,获取实际的sql语句 + SQLResult result = run(paras); String sql = result.jdbcSql; List objs = result.jdbcPara; ResultSet rs = null; @@ -341,31 +323,22 @@ public class SQLScript { conn = sm.getDs().getConn(id, false, sql, objs); ps = conn.prepareStatement(sql); this.setPreparedStatementPara(ps, objs); - - rs = ps.executeQuery(); - if (mapper != null) { BeanProcessor beanProcessor = this.getBeanProcessor(); - resultList = new RowMapperResultSetExt(mapper, beanProcessor).handleResultSet(this.id,rs, clazz); - + resultList = new RowMapperResultSetExt(mapper, beanProcessor).handleResultSet(this.id, rs, clazz); } else { resultList = mappingSelect(rs, clazz); - - } this.callInterceptorAsAfter(ctx, resultList); //通过注解实现后处理 resultList = this.checkAnnotatonAfterSelect(clazz, resultList, result); //sql 脚本里通过listener 实现最后处理 if (this.getListener() != null) { - for (SQLResultListener listener : getListener()) { - listener.dataSelectd(resultList,paras,this.sm,result); + for (SQLResultListener listener : getListener()) { + listener.dataSelectd(resultList, paras, this.sm, result); } - - } - - + } return resultList; } catch (SQLException e) { this.callInterceptorAsException(ctx, e); @@ -373,7 +346,6 @@ public class SQLScript { } finally { clean(false, conn, ps, rs); } - } public List select(Class clazz, Map paras) { @@ -389,16 +361,12 @@ public class SQLScript { // 如果是Map的子类或者父类,返回List> resultList = new ArrayList(); while (rs.next()) { - Map map = beanProcessor.toMap(this.sqlSource.getId(), clazz, rs); resultList.add((T) map); } return resultList; - } else if (isBaseDataType(clazz)) { - resultList = new ArrayList(1); - while (rs.next()) { Object result = beanProcessor.toBaseType(this.sqlSource.getId(), clazz, rs); resultList.add((T) result); @@ -409,7 +377,6 @@ public class SQLScript { } return resultList; - } private BeanProcessor getBeanProcessor() { @@ -425,14 +392,13 @@ public class SQLScript { } else { return sm.getDefaultBeanProcessors(); } - - } public List select(Map paras, Class mapping, RowMapper mapper, long start, long size) { SQLScript pageScript = this.sm.getPageSqlScript(this.id); - if (paras == null) + if (paras == null) { paras = new HashMap(); + } this.sm.getDbStyle().initPagePara(paras, start, size); return pageScript.select(mapping, paras, mapper); // return pageScript.se @@ -453,7 +419,6 @@ public class SQLScript { } public int update(Map paras) { - SQLResult result = run(paras); String sql = result.jdbcSql; List objs = result.jdbcPara; @@ -520,9 +485,9 @@ public class SQLScript { } - public int[] insertBatch(List list,LinkedList keys,boolean autoDbAssignKey) { + public int[] insertBatch(Collection collection, LinkedList keys, boolean autoDbAssignKey) { //与updateBatch区别是需要考虑到id生成 - if (list.size() == 0) { + if (collection.size() == 0) { return new int[0]; } int[] rs = null; @@ -531,10 +496,8 @@ public class SQLScript { // 执行jdbc InterceptorContext ctx = null; try { - - for (int k = 0; k < list.size(); k++) { + for (Object entity : collection) { Map paras = new HashMap(); - Object entity = list.get(k); this.addParaIfAssignId(entity); paras.put("_root", entity); SQLResult result = run(paras); @@ -542,26 +505,21 @@ public class SQLScript { if (ps == null) { conn = sm.getDs().getConn(id, true, result.jdbcSql, objs); - ps = autoDbAssignKey?conn.prepareStatement(result.jdbcSql,Statement.RETURN_GENERATED_KEYS):conn.prepareStatement(result.jdbcSql); + ps = autoDbAssignKey ? conn.prepareStatement(result.jdbcSql, Statement.RETURN_GENERATED_KEYS) : conn.prepareStatement(result.jdbcSql); ctx = this.callInterceptorAsBefore(this.id, result.jdbcSql, true, new ArrayList(0), paras); } this.setPreparedStatementPara(ps, objs); - ps.addBatch(); - } - rs = ps.executeBatch( ); - if(autoDbAssignKey){ + rs = ps.executeBatch(); + if (autoDbAssignKey) { ResultSet primaryKeys = ps.getGeneratedKeys(); - while(primaryKeys.next()) { + while (primaryKeys.next()) { keys.add(primaryKeys.getObject(1)); } } - - this.callInterceptorAsAfter(ctx, rs); - } catch (SQLException e) { this.callInterceptorAsException(ctx, e); throw new BeetlSQLException(BeetlSQLException.SQL_EXCEPTION, e); @@ -572,25 +530,26 @@ public class SQLScript { } - public int[] updateBatch(List list) { - if (list.size() == 0) { + public int[] updateBatch(Collection collection) { + if (collection.size() == 0) { return new int[0]; } Connection conn = null; InterceptorContext lastCtx = null; - int[] jdbcRets = new int[list.size()]; + int[] jdbcRets = new int[collection.size()]; // 执行jdbc try { - //记录不同sql对应的PreparedStatement - Map batchPs = new HashMap(); - //上下文 - Map batchCtx = new HashMap(); - //不同sql产生的批处理结果,汇总到jdbcRets - Map> batchRet = new HashMap>(); - conn = sm.getDs().getMaster(); - for (int k = 0; k < list.size(); k++) { + //记录不同sql对应的PreparedStatement + Map batchPs = new HashMap(); + //上下文 + Map batchCtx = new HashMap(); + //不同sql产生的批处理结果,汇总到jdbcRets + Map> batchRet = new HashMap>(); + conn = sm.getDs().getMaster(); + int index = 0; + for (Object entity : collection) { Map paras = new HashMap(); - paras.put("_root", list.get(k)); + paras.put("_root", entity); SQLResult result = run(paras); List objs = result.jdbcPara; PreparedStatement ps = batchPs.get(result.jdbcSql); @@ -599,34 +558,32 @@ public class SQLScript { if (ps == null) { ps = conn.prepareStatement(result.jdbcSql); ctx = new InterceptorContext(id, result.jdbcSql, new ArrayList(0), paras, true); - rets = new ArrayList (); + rets = new ArrayList(); batchCtx.put(result.jdbcSql, ctx); batchPs.put(result.jdbcSql, ps); batchRet.put(result.jdbcSql, rets); } - + this.setPreparedStatementPara(ps, objs); ps.addBatch(); - rets.add(k); + rets.add(index++); ctx.getParas().add(new SQLParameter(objs)); } - - for(Entry entry:batchPs.entrySet()) { - PreparedStatement ps = entry.getValue(); - lastCtx = batchCtx.get(entry.getKey()); - List rets = batchRet.get(entry.getKey()); - for (Interceptor in : sm.inters) { - in.before(lastCtx); - } - int[] rs = ps.executeBatch(); - for(int i=0;i entry : batchPs.entrySet()) { + PreparedStatement ps = entry.getValue(); + lastCtx = batchCtx.get(entry.getKey()); + List rets = batchRet.get(entry.getKey()); + for (Interceptor in : sm.inters) { + in.before(lastCtx); + } + int[] rs = ps.executeBatch(); + for (int i = 0; i < rs.length; i++) { + int realIndex = rets.get(i); + jdbcRets[realIndex] = rs[i]; + } + this.callInterceptorAsAfter(lastCtx, rs); + } } catch (SQLException e) { this.callInterceptorAsException(lastCtx, e); throw new BeetlSQLException(BeetlSQLException.SQL_EXCEPTION, e); @@ -636,7 +593,6 @@ public class SQLScript { return jdbcRets; } - public T unique(Class clazz, RowMapper mapper, Object objId) { return single(clazz, mapper, objId, true); } @@ -646,7 +602,6 @@ public class SQLScript { } public T single(Class clazz, RowMapper mapper, Object objId, boolean throwException) { - MetadataManager mm = this.sm.getDbStyle().getMetadataManager(); TableDesc table = mm.getTable(this.sm.getNc().getTableName(clazz)); ClassDesc classDesc = table.getClassDesc(clazz, this.sm.getNc()); @@ -689,10 +644,10 @@ public class SQLScript { model = mapper.mapRow(model, rs, 1); } //orm - if (model != null && this.getListener()!=null) { + if (model != null && this.getListener() != null) { for (SQLResultListener listener : this.getListener()) { - listener.dataSelectd(Arrays.asList(model),paras,this.sm,result); - + listener.dataSelectd(Arrays.asList(model), paras, this.sm, result); + } } } catch (BeetlSQLException ex) { @@ -776,7 +731,6 @@ public class SQLScript { } public int sqlReadyExecuteUpdate(SQLReady p) { - String sql = this.sql; List objs = toSQLParameters(p.getArgs()); InterceptorContext ctx = this.callInterceptorAsBefore(this.id, sql, true, objs, this.getSQLReadyParas(Arrays.asList(p.getArgs()))); @@ -801,31 +755,31 @@ public class SQLScript { } return rs; } - - public int[] sqlReadyBatchExecuteUpdate(SQLBatchReady batch) { + + public int[] sqlReadyBatchExecuteUpdate(SQLBatchReady batch) { String sql = this.sql; - List args = batch.getArgs(); - if(args.isEmpty()) { - return new int[0]; + List args = batch.getArgs(); + if (args.isEmpty()) { + return new int[0]; } InterceptorContext ctx = null; - Connection conn =null; - PreparedStatement ps =null; + Connection conn = null; + PreparedStatement ps = null; int[] rs = null; try { - - for(int i=0;i objs = toSQLParameters(jdbcArgs); - if(i==0) { - conn = sm.getDs().getConn(id, true, sql, objs); - ctx = this.callInterceptorAsBefore(this.id, sql, true, objs, this.getSQLReadyParas(Arrays.asList(jdbcArgs))); - ps = conn.prepareStatement(sql); - } - this.setPreparedStatementPara(ps, objs); - ps.addBatch(); - + + for (int i = 0; i < args.size(); i++) { + Object[] jdbcArgs = args.get(i); + List objs = toSQLParameters(jdbcArgs); + if (i == 0) { + conn = sm.getDs().getConn(id, true, sql, objs); + ctx = this.callInterceptorAsBefore(this.id, sql, true, objs, this.getSQLReadyParas(Arrays.asList(jdbcArgs))); + ps = conn.prepareStatement(sql); + } + this.setPreparedStatementPara(ps, objs); + ps.addBatch(); + } rs = ps.executeBatch(); this.callInterceptorAsAfter(ctx, rs); @@ -836,10 +790,6 @@ public class SQLScript { clean(true, conn, ps); } return rs; - - - - } private void setPreparedStatementPara(PreparedStatement ps, List objs) throws SQLException { @@ -851,29 +801,26 @@ public class SQLScript { } - protected void clean(boolean isUpdate, Connection conn, PreparedStatement ps, ResultSet rs) { try { - if (rs != null) + if (rs != null) { rs.close(); - if (ps != null) + } + if (ps != null) { ps.close(); + } if (!this.sm.getDs().isTransaction()) { try { - if (conn != null) { // colse 不一定能保证能自动commit if (isUpdate && !conn.getAutoCommit()) { - - conn.commit(); + conn.commit(); } - conn.close(); } } catch (SQLException e) { throw new BeetlSQLException(BeetlSQLException.SQL_EXCEPTION, e); } - } } catch (SQLException e) { // ignore @@ -899,8 +846,9 @@ public class SQLScript { } private void callInterceptorAsAfter(InterceptorContext ctx, Object result) { - if (sm.inters == null) + if (sm.inters == null) { return; + } if (!ctx.isUpdate()) { ctx.setResult(result); @@ -917,8 +865,9 @@ public class SQLScript { if (ctx == null) { return; } - if (sm.inters == null) + if (sm.inters == null) { return; + } for (Interceptor in : sm.inters) { in.exception(ctx, ex); @@ -973,28 +922,25 @@ public class SQLScript { if (obj == null) { return; } - SQLTableSource tableSource = (SQLTableSource)this.sqlSource; + SQLTableSource tableSource = (SQLTableSource) this.sqlSource; Class clz = obj.getClass(); if (tableSource.getIdType() == DBStyle.ID_ASSIGN && tableSource.getAssignIds() != null) { Map ids = tableSource.getAssignIds(); for (Entry entry : ids.entrySet()) { String attrName = entry.getKey(); Object value = BeanKit.getBeanProperty(obj, attrName); - // 已经有值的列尊重调用者设置的值,@lidaoguang - // 严格判断 null 和 empty 的 value,支持 ID 类型为 String 或者 Char 类型的情况 @larrykoo - if (!StringKit.isNullOrEmpty(value)) { - continue; - } + // 已经有值的列尊重调用者设置的值,@lidaoguang + // 严格判断 null 和 empty 的 value,支持 ID 类型为 String 或者 Char 类型的情况 @larrykoo + if (!StringKit.isNullOrEmpty(value)) { + continue; + } AssignID assignId = entry.getValue(); String algorithm = assignId.value(); String param = assignId.param(); Object o = this.sm.getAssignIdByIdAutonGen(algorithm, param, tableSource.getTableDesc().getName()); BeanKit.setBeanProperty(obj, o, attrName); - } - } - } private List toSQLParameters(Object[] args) { @@ -1009,14 +955,14 @@ public class SQLScript { public String getSql() { return sql; } - - public List getListener() { - return listener; - } + + public List getListener() { + return listener; + } public void setListener(List listener) { - this.listener = listener; - } + this.listener = listener; + } } diff --git a/src/main/java/org/beetl/sql/core/kit/StringKit.java b/src/main/java/org/beetl/sql/core/kit/StringKit.java index d8ddeba5..1eb263f4 100755 --- a/src/main/java/org/beetl/sql/core/kit/StringKit.java +++ b/src/main/java/org/beetl/sql/core/kit/StringKit.java @@ -106,11 +106,11 @@ public class StringKit { public static boolean isBlank(String str) { int strLen; - if (str == null || (strLen = str.length()) == 0) { + if (str == null || (strLen = str.trim().length()) == 0) { return true; } for (int i = 0; i < strLen; i++) { - if ((Character.isWhitespace(str.charAt(i)) == false)) { + if ((!Character.isWhitespace(str.charAt(i)))) { return false; } } diff --git a/src/main/java/org/beetl/sql/core/mapper/BaseMapper.java b/src/main/java/org/beetl/sql/core/mapper/BaseMapper.java index 6f992a21..d1b0c3dd 100755 --- a/src/main/java/org/beetl/sql/core/mapper/BaseMapper.java +++ b/src/main/java/org/beetl/sql/core/mapper/BaseMapper.java @@ -1,13 +1,14 @@ package org.beetl.sql.core.mapper; -import java.util.List; - import org.beetl.sql.core.SQLManager; import org.beetl.sql.core.db.KeyHolder; import org.beetl.sql.core.engine.PageQuery; import org.beetl.sql.core.query.LambdaQuery; import org.beetl.sql.core.query.Query; +import java.util.Collection; +import java.util.List; + /** * BaseMapper. * @@ -51,16 +52,17 @@ public interface BaseMapper { * insert(T entity,true); * * - * @param list + * @param collection */ - void insertBatch(List list); + void insertBatch(Collection collection); /** * 批量插入,使用数据库返回自增主键 - * @param list + * + * @param collection * @param autoDbAssignKey */ - void insertBatch(List list,boolean autoDbAssignKey); + void insertBatch(Collection collection, boolean autoDbAssignKey); /** * (数据库表有自增主键调用此方法)如果实体对应的有自增主键,插入实体到数据库,自增主键值放到keyHolder里处理 @@ -72,6 +74,7 @@ public interface BaseMapper { /** * 根据主键更新对象,所以属性都参与更新。也可以使用主键ColumnIgnore来控制更新的时候忽略此字段 + * * @param entity * @return */ @@ -87,12 +90,15 @@ public interface BaseMapper { /** * 按照主键更新更新或插入,自增或者序列id自动赋值给entity + * * @param entity 待更新/插入的实体对象 * @return 受影响条数 */ int upsert(T entity); - /**按照主键更新或插入,更新失败,会调用插入,属性为空的字段将不更新或者插入。自增或者序列id自动赋值给entity + /** + * 按照主键更新或插入,更新失败,会调用插入,属性为空的字段将不更新或者插入。自增或者序列id自动赋值给entity + * * @param entity 待更新/插入的实体对象 * @return */ diff --git a/src/main/java/org/beetl/sql/core/mapper/internal/InsertBatchAmi.java b/src/main/java/org/beetl/sql/core/mapper/internal/InsertBatchAmi.java index bb1edc15..942fd32f 100644 --- a/src/main/java/org/beetl/sql/core/mapper/internal/InsertBatchAmi.java +++ b/src/main/java/org/beetl/sql/core/mapper/internal/InsertBatchAmi.java @@ -4,6 +4,7 @@ import org.beetl.sql.core.SQLManager; import org.beetl.sql.core.mapper.MapperInvoke; import java.lang.reflect.Method; +import java.util.Collection; import java.util.List; /** @@ -15,10 +16,10 @@ public class InsertBatchAmi implements MapperInvoke { @Override public Object call(SQLManager sm, Class entityClass, String sqlId, Method m, Object[] args) { - if(args.length==1){ - sm.insertBatch(entityClass, (List) args[0]); - }else{ - sm.insertBatch(entityClass, (List) args[0],(Boolean)args[1]); + if (args.length == 1) { + sm.insertBatch(entityClass, (Collection) args[0]); + } else { + sm.insertBatch(entityClass, (Collection) args[0], (Boolean) args[1]); } return null; diff --git a/src/main/java/org/beetl/sql/core/mapper/internal/UpdateByIdBatchAmi.java b/src/main/java/org/beetl/sql/core/mapper/internal/UpdateByIdBatchAmi.java index c9ed11b0..c122192e 100644 --- a/src/main/java/org/beetl/sql/core/mapper/internal/UpdateByIdBatchAmi.java +++ b/src/main/java/org/beetl/sql/core/mapper/internal/UpdateByIdBatchAmi.java @@ -4,7 +4,7 @@ import org.beetl.sql.core.SQLManager; import org.beetl.sql.core.mapper.MapperInvoke; import java.lang.reflect.Method; -import java.util.List; +import java.util.Collection; /** * create time : 2017-04-27 16:09 @@ -15,7 +15,7 @@ public class UpdateByIdBatchAmi implements MapperInvoke { @Override public Object call(SQLManager sm, Class entityClass, String sqlId, Method m, Object[] args) { - return sm.updateByIdBatch((List)args[0]); + return sm.updateByIdBatch((Collection) args[0]); } } -- Gitee From 7454287be7a27e232a366e9ad6196efc0f207a04 Mon Sep 17 00:00:00 2001 From: Succy Date: Sat, 30 Mar 2019 23:10:54 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=81=A2=E5=A4=8DEmptyExpressionFunction?= =?UTF-8?q?=E5=92=8CNotEmptyExpressionFunction=E4=B8=8A=E4=B8=80=E6=AC=A1p?= =?UTF-8?q?r=E5=89=8D=E7=9A=84=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/beetl/sql/core/engine/EmptyExpressionFunction.java | 4 ---- .../beetl/sql/core/engine/NotEmptyExpressionFunction.java | 5 ----- 2 files changed, 9 deletions(-) diff --git a/src/main/java/org/beetl/sql/core/engine/EmptyExpressionFunction.java b/src/main/java/org/beetl/sql/core/engine/EmptyExpressionFunction.java index 02065fd9..922f8f3d 100755 --- a/src/main/java/org/beetl/sql/core/engine/EmptyExpressionFunction.java +++ b/src/main/java/org/beetl/sql/core/engine/EmptyExpressionFunction.java @@ -48,10 +48,6 @@ public class EmptyExpressionFunction implements Function { @Override public Boolean call(Object[] paras, Context ctx) { Object result = paras[0]; - // 针对String类型做优化 - if (String.class.isInstance(result)) { - return ((String)result).isEmpty(); - } return result == null; } } diff --git a/src/main/java/org/beetl/sql/core/engine/NotEmptyExpressionFunction.java b/src/main/java/org/beetl/sql/core/engine/NotEmptyExpressionFunction.java index a8ecd1db..ed8a6ff6 100755 --- a/src/main/java/org/beetl/sql/core/engine/NotEmptyExpressionFunction.java +++ b/src/main/java/org/beetl/sql/core/engine/NotEmptyExpressionFunction.java @@ -41,11 +41,6 @@ public class NotEmptyExpressionFunction implements Function { @Override public Boolean call(Object[] paras, Context ctx) { Object result = paras[0]; - - // 针对String类型优化,避免传递""同样认为是true,如果result == null,则不会进入这里 - if (String.class.isInstance(result)) { - return ((String) result).isEmpty(); - } return result != null; } } -- Gitee