@Override public void handleNode(XNode nodeToHandle, List<SqlNode> targetContents) { MixedSqlNode mixedSqlNode = parseDynamicTags(nodeToHandle); String test = nodeToHandle.getStringAttribute("test"); IfSqlNode ifSqlNode = new IfSqlNode(mixedSqlNode, test); targetContents.add(ifSqlNode); } }
@Override public void handleNode(XNode nodeToHandle, List<SqlNode> targetContents) { List<SqlNode> contents = parseDynamicTags(nodeToHandle); MixedSqlNode mixedSqlNode = new MixedSqlNode(contents); String test = nodeToHandle.getStringAttribute("test"); IfSqlNode ifSqlNode = new IfSqlNode(mixedSqlNode, test); targetContents.add(ifSqlNode); } }
/** * 返回if条件的sqlNode * <p>一般类型:<code><if test="property!=null">columnNode</if></code></p> * * @param column * @return */ protected SqlNode getIfCacheNotNull(EntityHelper.EntityColumn column, SqlNode columnNode) { return new IfSqlNode(columnNode, column.getProperty() + "_cache != null "); }
/** * 返回if条件的sqlNode * <p>一般类型:<code><if test="property==null">columnNode</if></code></p> * * @param column * @return */ protected SqlNode getIfIsNull(EntityHelper.EntityColumn column, SqlNode columnNode) { return new IfSqlNode(columnNode, column.getProperty() + " == null "); }
/** * 返回if条件的sqlNode * <p>一般类型:<code><if test="property_cache!=null">columnNode</if></code></p> * * @param column * @return */ protected SqlNode getIfCacheIsNull(EntityHelper.EntityColumn column, SqlNode columnNode) { return new IfSqlNode(columnNode, column.getProperty() + "_cache == null "); }
/** * 返回if条件的sqlNode * <p>一般类型:<code><if test="property!=null">columnNode</if></code></p> * * @param column * @param columnNode * @param empty 是否包含!=''条件 * @return */ protected SqlNode getIfNotNull(EntityHelper.EntityColumn column, SqlNode columnNode, boolean empty) { if (empty && column.getJavaType().equals(String.class)) { return new IfSqlNode(columnNode, column.getProperty() + " != null and " + column.getProperty() + " != ''"); } else { return new IfSqlNode(columnNode, column.getProperty() + " != null "); } }
public IfSqlNode ExampleValidSqlNode(Configuration configuration) { List<SqlNode> whenSqlNodes = new LinkedList<SqlNode>(); IfSqlNode noValueSqlNode = new IfSqlNode(new TextSqlNode(" and ${criterion.condition}"), "criterion.noValue"); whenSqlNodes.add(noValueSqlNode); IfSqlNode singleValueSqlNode = new IfSqlNode(new TextSqlNode(" and ${criterion.condition} #{criterion.value}"), "criterion.singleValue"); whenSqlNodes.add(singleValueSqlNode); IfSqlNode betweenValueSqlNode = new IfSqlNode(new TextSqlNode(" and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}"), "criterion.betweenValue"); whenSqlNodes.add(betweenValueSqlNode); List<SqlNode> listValueContentSqlNodes = new LinkedList<SqlNode>(); listValueContentSqlNodes.add(new TextSqlNode(" and ${criterion.condition}")); ForEachSqlNode listValueForEachSqlNode = new ForEachSqlNode(configuration, new StaticTextSqlNode("#{listItem}"), "criterion.value", null, "listItem", "(", ")", ","); listValueContentSqlNodes.add(listValueForEachSqlNode); IfSqlNode listValueSqlNode = new IfSqlNode(new MixedSqlNode(listValueContentSqlNodes), "criterion.listValue"); whenSqlNodes.add(listValueSqlNode); ChooseSqlNode chooseSqlNode = new ChooseSqlNode(whenSqlNodes, null); ForEachSqlNode criteriaSqlNode = new ForEachSqlNode(configuration, chooseSqlNode, "criteria.criteria", null, "criterion", null, null, null); TrimSqlNode trimSqlNode = new TrimSqlNode(configuration, criteriaSqlNode, "(", "and", ")", null); IfSqlNode validSqlNode = new IfSqlNode(trimSqlNode, "criteria.valid"); return validSqlNode; }
/** * 根据Example删除 * * @param ms * @return */ public SqlNode deleteByExample(MappedStatement ms) { Class<?> entityClass = getSelectReturnType(ms); List<SqlNode> sqlNodes = new LinkedList<SqlNode>(); //静态的sql部分:select column ... from table sqlNodes.add(new StaticTextSqlNode("DELETE FROM " + tableName(entityClass))); IfSqlNode ifNullSqlNode = new IfSqlNode(exampleWhereClause(ms.getConfiguration()), "_parameter != null"); sqlNodes.add(ifNullSqlNode); return new MixedSqlNode(sqlNodes); }
/** * 根据Example查询总数 * * @param ms * @return */ public SqlNode selectCountByExample(MappedStatement ms) { Class<?> entityClass = getSelectReturnType(ms); List<SqlNode> sqlNodes = new LinkedList<SqlNode>(); //静态的sql部分:select column ... from table sqlNodes.add(new StaticTextSqlNode("SELECT COUNT(*) FROM " + tableName(entityClass))); IfSqlNode ifNullSqlNode = new IfSqlNode(exampleWhereClause(ms.getConfiguration()), "_parameter != null"); sqlNodes.add(ifNullSqlNode); return new MixedSqlNode(sqlNodes); }
/** * 根据Example查询 * * @param ms * @return */ public SqlNode selectByExample(MappedStatement ms) { Class<?> entityClass = getSelectReturnType(ms); //将返回值修改为实体类型 setResultType(ms, entityClass); List<SqlNode> sqlNodes = new LinkedList<SqlNode>(); //静态的sql部分:select column ... from table sqlNodes.add(new StaticTextSqlNode("SELECT")); IfSqlNode distinctSqlNode = new IfSqlNode(new StaticTextSqlNode("DISTINCT"), "distinct"); sqlNodes.add(distinctSqlNode); sqlNodes.add(new StaticTextSqlNode(EntityHelper.getSelectColumns(entityClass) + " FROM " + tableName(entityClass))); IfSqlNode ifNullSqlNode = new IfSqlNode(exampleWhereClause(ms.getConfiguration()), "_parameter != null"); sqlNodes.add(ifNullSqlNode); IfSqlNode orderByClauseSqlNode = new IfSqlNode(new TextSqlNode("order by ${orderByClause}"), "orderByClause != null"); sqlNodes.add(orderByClauseSqlNode); String orderByClause = EntityHelper.getOrderByClause(entityClass); if (orderByClause.length() > 0) { IfSqlNode defaultOrderByClauseSqlNode = new IfSqlNode(new StaticTextSqlNode("ORDER BY " + orderByClause), "orderByClause == null"); sqlNodes.add(defaultOrderByClauseSqlNode); } return new MixedSqlNode(sqlNodes); }
/** * 根据Example更新非null字段 * * @param ms * @return */ public SqlNode updateByExampleSelective(MappedStatement ms) { Class<?> entityClass = getSelectReturnType(ms); List<SqlNode> sqlNodes = new LinkedList<SqlNode>(); //update table sqlNodes.add(new StaticTextSqlNode("UPDATE " + tableName(entityClass))); //获取全部列 Set<EntityHelper.EntityColumn> columnList = EntityHelper.getColumns(entityClass); List<SqlNode> ifNodes = new LinkedList<SqlNode>(); for (EntityHelper.EntityColumn column : columnList) { if (!column.isId()) { StaticTextSqlNode columnNode = new StaticTextSqlNode(column.getColumn() + " = #{record." + column.getProperty() + "}, "); ifNodes.add(new IfSqlNode(columnNode, "record." + column.getProperty() + " != null")); } } sqlNodes.add(new SetSqlNode(ms.getConfiguration(), new MixedSqlNode(ifNodes))); //Example的Where IfSqlNode ifNullSqlNode = new IfSqlNode(updateByExampleWhereClause(ms.getConfiguration()), "_parameter != null"); sqlNodes.add(ifNullSqlNode); return new MixedSqlNode(sqlNodes); }
/** * 根据Example更新 * * @param ms * @return */ public SqlNode updateByExample(MappedStatement ms) { Class<?> entityClass = getSelectReturnType(ms); List<SqlNode> sqlNodes = new LinkedList<SqlNode>(); //update table sqlNodes.add(new StaticTextSqlNode("UPDATE " + tableName(entityClass))); //获取全部列 Set<EntityHelper.EntityColumn> columnList = EntityHelper.getColumns(entityClass); List<SqlNode> setSqlNodes = new LinkedList<SqlNode>(); //全部的if property!=null and property!='' for (EntityHelper.EntityColumn column : columnList) { if (!column.isId()) { setSqlNodes.add(new StaticTextSqlNode(column.getColumn() + " = #{record." + column.getProperty() + "}, ")); } } sqlNodes.add(new SetSqlNode(ms.getConfiguration(), new MixedSqlNode(setSqlNodes))); //Example的Where IfSqlNode ifNullSqlNode = new IfSqlNode(updateByExampleWhereClause(ms.getConfiguration()), "_parameter != null"); sqlNodes.add(ifNullSqlNode); return new MixedSqlNode(sqlNodes); } }
ifNodes.add(new IfSqlNode(new StaticTextSqlNode("#{" + column.getProperty() + "},"), column.getProperty() + " != null "));