@Override public void handleNode(XNode nodeToHandle, List<SqlNode> targetContents) { List<SqlNode> contents = parseDynamicTags(nodeToHandle); MixedSqlNode mixedSqlNode = new MixedSqlNode(contents); targetContents.add(mixedSqlNode); } }
@Override public void handleNode(XNode nodeToHandle, List<SqlNode> targetContents) { List<SqlNode> contents = parseDynamicTags(nodeToHandle); MixedSqlNode mixedSqlNode = new MixedSqlNode(contents); WhereSqlNode where = new WhereSqlNode(configuration, mixedSqlNode); targetContents.add(where); } }
@Override public void handleNode(XNode nodeToHandle, List<SqlNode> targetContents) { List<SqlNode> contents = parseDynamicTags(nodeToHandle); MixedSqlNode mixedSqlNode = new MixedSqlNode(contents); SetSqlNode set = new SetSqlNode(configuration, mixedSqlNode); targetContents.add(set); } }
@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); } }
public SqlSource parseScriptNode() { List<SqlNode> contents = parseDynamicTags(context); MixedSqlNode rootSqlNode = new MixedSqlNode(contents); SqlSource sqlSource = null; if (isDynamic) { sqlSource = new DynamicSqlSource(configuration, rootSqlNode); } else { sqlSource = new RawSqlSource(configuration, rootSqlNode, parameterType); } return sqlSource; }
protected MixedSqlNode parseDynamicTags(XNode node) { List<SqlNode> contents = new ArrayList<>(); NodeList children = node.getNode().getChildNodes(); for (int i = 0; i < children.getLength(); i++) { XNode child = node.newXNode(children.item(i)); if (child.getNode().getNodeType() == Node.CDATA_SECTION_NODE || child.getNode().getNodeType() == Node.TEXT_NODE) { String data = child.getStringBody(""); TextSqlNode textSqlNode = new TextSqlNode(data); if (textSqlNode.isDynamic()) { contents.add(textSqlNode); isDynamic = true; } else { contents.add(new StaticTextSqlNode(data)); } } else if (child.getNode().getNodeType() == Node.ELEMENT_NODE) { // issue #628 String nodeName = child.getNode().getNodeName(); NodeHandler handler = nodeHandlerMap.get(nodeName); if (handler == null) { throw new BuilderException("Unknown element <" + nodeName + "> in SQL statement."); } handler.handleNode(child, contents); isDynamic = true; } } return new MixedSqlNode(contents); }
@Override public void handleNode(XNode nodeToHandle, List<SqlNode> targetContents) { List<SqlNode> contents = parseDynamicTags(nodeToHandle); MixedSqlNode mixedSqlNode = new MixedSqlNode(contents); String prefix = nodeToHandle.getStringAttribute("prefix"); String prefixOverrides = nodeToHandle.getStringAttribute("prefixOverrides"); String suffix = nodeToHandle.getStringAttribute("suffix"); String suffixOverrides = nodeToHandle.getStringAttribute("suffixOverrides"); TrimSqlNode trim = new TrimSqlNode(configuration, mixedSqlNode, prefix, prefixOverrides, suffix, suffixOverrides); targetContents.add(trim); } }
@Override public void handleNode(XNode nodeToHandle, List<SqlNode> targetContents) { List<SqlNode> contents = parseDynamicTags(nodeToHandle); MixedSqlNode mixedSqlNode = new MixedSqlNode(contents); String collection = nodeToHandle.getStringAttribute("collection"); String item = nodeToHandle.getStringAttribute("item"); String index = nodeToHandle.getStringAttribute("index"); String open = nodeToHandle.getStringAttribute("open"); String close = nodeToHandle.getStringAttribute("close"); String separator = nodeToHandle.getStringAttribute("separator"); ForEachSqlNode forEachSqlNode = new ForEachSqlNode(configuration, mixedSqlNode, collection, index, item, open, close, separator); targetContents.add(forEachSqlNode); } }
/** * 获取所有列的where节点中的if判断列 * * @param entityClass * @return */ protected SqlNode getAllIfColumnNode(Class<?> entityClass) { //获取全部列 Set<EntityHelper.EntityColumn> columnList = EntityHelper.getColumns(entityClass); List<SqlNode> ifNodes = new LinkedList<SqlNode>(); boolean first = true; //对所有列循环,生成<if test="property!=null">column = #{property}</if> for (EntityHelper.EntityColumn column : columnList) { ifNodes.add(getIfNotNull(column, getColumnEqualsProperty(column, first), mapperHelper.isNotEmpty())); first = false; } return new MixedSqlNode(ifNodes); }
/** * 根据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); }
sqlNodes.add(new SetSqlNode(ms.getConfiguration(), new MixedSqlNode(ifNodes))); first = false; sqlNodes.add(new WhereSqlNode(ms.getConfiguration(), new MixedSqlNode(whereNodes))); return new MixedSqlNode(sqlNodes);
/** * 查询总数 * * @param ms * @return */ public SqlNode selectCount(MappedStatement ms) { Class<?> entityClass = getSelectReturnType(ms); List<SqlNode> sqlNodes = new LinkedList<SqlNode>(); //select count(*) from table sqlNodes.add(new StaticTextSqlNode("SELECT COUNT(*) FROM " + tableName(entityClass))); //获取全部列的where,if条件 sqlNodes.add(new WhereSqlNode(ms.getConfiguration(), getAllIfColumnNode(entityClass))); return new MixedSqlNode(sqlNodes); }
/** * 通过条件删除 * * @param ms * @return */ public SqlNode delete(MappedStatement ms) { Class<?> entityClass = getSelectReturnType(ms); List<SqlNode> sqlNodes = new LinkedList<SqlNode>(); //delete from table sqlNodes.add(new StaticTextSqlNode("DELETE FROM " + tableName(entityClass))); //where/if判断条件 sqlNodes.add(new WhereSqlNode(ms.getConfiguration(), getAllIfColumnNode(entityClass))); return new MixedSqlNode(sqlNodes); }
/** * 根据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); }
public SqlNode selectByIdList(MappedStatement ms) { Class<?> entityClass = getEntityClass(ms); //修改返回值类型为实体类型 setResultType(ms, entityClass); List<SqlNode> sqlNodes = new LinkedList<SqlNode>(); //静态的sql部分:select column ... from table sqlNodes.add(new StaticTextSqlNode("SELECT " + EntityHelper.getSelectColumns(entityClass) + " FROM " + tableName(entityClass))); List<SqlNode> whereNodes = new LinkedList<SqlNode>(); whereNodes.add(new StaticTextSqlNode(" dr = 0 ")); ForEachSqlNode forEachSqlNode = new ForEachSqlNode(ms.getConfiguration(), new StaticTextSqlNode("#{item}"), "list", "index", "item", " and id in (", ")", ","); whereNodes.add(forEachSqlNode); sqlNodes.add(new WhereSqlNode(ms.getConfiguration(), new MixedSqlNode(whereNodes))); String orderByClause = EntityHelper.getOrderByClause(entityClass); if (orderByClause.length() > 0) { sqlNodes.add(new StaticTextSqlNode("ORDER BY " + orderByClause)); } return new MixedSqlNode(sqlNodes); }
sqlNodes.add(new SetSqlNode(ms.getConfiguration(), new MixedSqlNode(ifNodes))); first = false; sqlNodes.add(new WhereSqlNode(ms.getConfiguration(), new MixedSqlNode(whereNodes))); 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); } }
sqlNodes.add(new TrimSqlNode(ms.getConfiguration(), new MixedSqlNode(ifNodes), "(", null, ")", ",")); sqlNodes.add(new TrimSqlNode(ms.getConfiguration(), new MixedSqlNode(ifNodes), "VALUES (", null, ")", ",")); return new MixedSqlNode(sqlNodes);
/** * 查询(dr = 0) * * @param ms * @return SqlNode */ private SqlNode select(MappedStatement ms, Class<?> entityClass) { List<SqlNode> sqlNodes = new LinkedList<SqlNode>(); //静态的sql部分:select column ... from table sqlNodes.add(new StaticTextSqlNode("SELECT " + EntityHelper.getSelectColumns(entityClass) + " FROM " + tableName(entityClass))); //将if添加到<where> sqlNodes.add(new WhereSqlNode(ms.getConfiguration(), new StaticTextSqlNode(" dr = 0"))); String orderByClause = EntityHelper.getOrderByClause(entityClass); if (orderByClause.length() > 0) { sqlNodes.add(new StaticTextSqlNode("ORDER BY " + orderByClause)); } 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); }