Browse Source

jfinal 3.6

James 7 years ago
parent
commit
182c5466ec

+ 2 - 1
src/main/java/com/jfinal/core/Controller.java

@@ -1408,9 +1408,10 @@ public abstract class Controller {
 	
 	// --- 以下是 getPara 系列中获取 urlPara 的缩短版本
 	
+	/* 为了让继承类可以使用名为 get 的 action 注掉此方法,可使用 get(0) 来实现本方法的功能
 	public String get() {
 		return getPara();
-	}
+	} */
 	
 	public String get(int index) {
 		return getPara(index);

+ 52 - 0
src/main/java/com/jfinal/plugin/activerecord/sql/SqlKit.java

@@ -202,6 +202,58 @@ public class SqlKit {
 	public String toString() {
 		return "SqlKit for config : " + configName;
 	}
+	
+	// ---------
+	
+	/**
+	 * 通过 String 内容获取 SqlPara 对象
+	 * 
+	 * <pre>
+	 * 例子:
+	 *     String content = "select * from user where id = #para(id)"
+	 *     SqlPara sqlPara = getSqlParaByString(content, Kv.by("id", 123));
+	 * 
+	 * 特别注意:content 参数中不能包含 #sql 指令
+	 * </pre>
+	 */
+	public SqlPara getSqlParaByString(String content, Map data) {
+		Template template = engine.getTemplateByString(content);
+		if (template == null) {
+			return null;
+		}
+		
+		SqlPara sqlPara = new SqlPara();
+		data.put(SQL_PARA_KEY, sqlPara);
+		sqlPara.setSql(template.renderToString(data));
+		data.remove(SQL_PARA_KEY);	// 避免污染传入的 Map
+		return sqlPara;
+	}
+	
+	/**
+	 * 通过 String 内容获取 SqlPara 对象
+	 * 
+	 * <pre>
+	 * 例子:
+	 *     String content = "select * from user where id = #para(0)"
+	 *     SqlPara sqlPara = getSqlParaByString(content, 123);
+	 * 
+	 * 特别注意:content 参数中不能包含 #sql 指令
+	 * </pre>
+	 */
+	public SqlPara getSqlParaByString(String content, Object... paras) {
+		Template template = engine.getTemplateByString(content);
+		if (template == null) {
+			return null;
+		}
+		
+		SqlPara sqlPara = new SqlPara();
+		Map data = new HashMap();
+		data.put(SQL_PARA_KEY, sqlPara);
+		data.put(PARA_ARRAY_KEY, paras);
+		sqlPara.setSql(template.renderToString(data));
+		// data 为本方法中创建,不会污染用户数据,无需移除 SQL_PARA_KEY、PARA_ARRAY_KEY
+		return sqlPara;
+	}
 }