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 提供的接口分几种系列:

- + @@ -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>	
系列方法功能描述
insert插入数据