diff --git a/source.html b/source.html
index 3f77d91b5..287e33546 100644
--- a/source.html
+++ b/source.html
@@ -60,7 +60,7 @@
操作数据源主要使用的对象有 DataSource、FilterBean、FilterNode。DataSource 提供的接口分几种系列:
-
+
| 系列方法 | 功能描述 |
| insert | 插入数据 |
@@ -79,12 +79,78 @@
过滤条件
FilterBean、FilterNode对象用于构造过滤条件。FilterBean可以转化为FilterNode。FilterBean主要用于接收外界构建的过滤条件,而FilterNode为了构建内部的过滤条件且降低过滤条件变化的耦合性。
-
+ public class UserBean implements FilterBean {
+
+ private int userid;
+
+ @FilterColumn(express = FilterExpress.LIKE)
+ private String username;
+
+ private Range age;
+
+ public UserBean(int userid, String username, Range age) {
+ this.userid = userid;
+ this.username = username;
+ this.age = age;
+ }
+
+ /** 以下省略getter setter方法 */
+
+}
+
+
+
+ new UserBean(200001, "redkale", new IntRange(14, 36)) 等价于
+ FilterNode.create("userid", 200001).and("username", FilterExpress.LIKE, "redkale").and("age", new Range.IntRange(14, 36))
+
+ new UserBean(200001, "redkale", new IntRange(14, 36)) 等价于 "WHERE userid = 200001 AND username LIKE '%redkale%' AND age BETWEEN 14 AND 36"
+ new UserBean(200001, "redkale", null) 等价于 "WHERE userid = 200001 AND username LIKE '%redkale%'"
+ new UserBean(0, "redkale", null) 等价于 "WHERE username LIKE '%redkale%'"
+
+
+ 如上定义UserBean过滤条件,当非数值类字段值为null、字符串值为空、数值类字段值小于@FilterColumn.least()值(least的默认值为1)都不会构建成过滤条件。@FilterColumn.express根据字段的类型有不同的默认值,若字段类型为Collection子类或数组则express默认为FilterExpress.IN;若字段类型为Range的子类则express默认为FilterExpress.BETWEEN;其他类型则express默认为FilterExpress.EQUAL。默认字段之间是AND关系,若想使用OR关系则需要使用@FilterGroup进行标记:
+ public class UserBean implements FilterBean {
+
+ private int userid;
+
+ @FilterGroup("[OR]a")
+ @FilterColumn(express = FilterExpress.LIKE)
+ private String username;
+
+ @FilterGroup("[OR]a")
+ private Range age;
+
+ public UserBean(int userid, String username, Range age) {
+ this.userid = userid;
+ this.username = username;
+ this.age = age;
+ }
+
+ /** 以下省略getter setter方法 */
+
+}
+
+
+
+ new UserBean(200001, "redkale", new IntRange(14, 36)) 等价于
+ FilterNode orNode = FilterNode.create("username" , FilterExpress.LIKE, "redkale").or("age", new Range.IntRange(14, 36));
+ FilterNode node = FilterNode.create("userid", 200001).and(orNode));
+
+ new UserBean(200001, "redkale", new IntRange(14, 36)) 等价于 "WHERE userid = 200001 AND (username LIKE '%redkale%' OR age BETWEEN 14 AND 36)"
+ new UserBean(200001, "redkale", null) 等价于 "WHERE userid = 200001 AND username LIKE '%redkale%'"
+ new UserBean(0, "redkale", null) 等价于 "WHERE username LIKE '%redkale%'"
+
+
+ source.getNumberResult(User.class, FilterFunc.COUNT, null, new UserBean(0, "redkale", new IntRange(14, 36))).intValue() 等价于
+ "SELECT COUNT(*) FROM user WHERE username LIKE '%redkale%' AND age BETWEEN 14 AND 36"
+
+ 如上@FilterGroup 的value 必须是[OR]或者[AND]开头,没有标记@FilterGroup的字段等价于标记了@FilterGroup(value = "[AND]")。[AND]、[OR]后面的字符串为GROUP_NAME,默认的GROUP_NAME为空字符串。如上"[OR]a"可以直接使用"[OR]",有多个[OR]或者[AND]则需要加上不同的NAME。
+
未完待续……
-
+
CacheSource 入门
-
+
persistence.xml 配置说明
<!-- 其配置算是标准的JPA配置文件的缩略版 -->
<persistence>