Browse Source

添加了部分文档

huangluyu 1 year ago
parent
commit
4cfa91f34b
2 changed files with 116 additions and 42 deletions
  1. 2 0
      .idea/inspectionProfiles/Project_Default.xml
  2. 114 42
      README.md

+ 2 - 0
.idea/inspectionProfiles/Project_Default.xml

@@ -32,5 +32,7 @@
       <option name="IGNORE_POINT_TO_ITSELF" value="false" />
       <option name="myAdditionalJavadocTags" value="date" />
     </inspection_tool>
+    <inspection_tool class="SqlDialectInspection" enabled="false" level="WARNING" enabled_by_default="false" />
+    <inspection_tool class="SqlNoDataSourceInspection" enabled="false" level="WARNING" enabled_by_default="false" />
   </profile>
 </component>

+ 114 - 42
README.md

@@ -39,56 +39,65 @@
 
 2. 在业务代码中执行链式查询。如:
     
-    ```
-    Person person = (Person) Table.init(Person.class)
-            .leftJoin("person_info pi", "person.id", "pi.id")
-            .where(Where.init("person.name", "=", "xiaoMing")
-            .orWhere("person.id", "=", "1"))
-            .andWhere("pi.password", "!=", null)
-            .getOne();
+    ```java
+    public class Demo {
+        public static void main(String[] args) {
+            Person person = (Person) Table.init(Person.class)
+                    .leftJoin("person_info pi", "person.id", "pi.id")
+                    .where(Where.init("person.name", "=", "xiaoMing")
+                    .orWhere("person.id", "=", "1"))
+                    .andWhere("pi.password", "!=", null)
+                    .getOne();
+        }
+    }
     ```
     
     你会得到一个返回值组成的的 HashMap。
     
 3. 支持链式子查询。如:
 
-    ```
-    List<BaseModel> sql = Table.select("person.*")
-            .from(Table.select("name", "id")
-                    .from(Person.class), "person")
-            .leftJoin(PersonInfo.class, "person.id", "pi.id", "pi")
-            .where(Where.init("person.name", "=", "xiaoMing")
-                    .orWhere("person.id", "=", "1"))
-            .andWhere("pi.password", "!=", null)
-            .andWhere("person.id", "=",
-                    Table.select("id")
-                            .from("person")
-                            .where("person.id", "=", "1"))
-            .get();
+    ```java
+    public class Demo {
+        public static void main(String[] args) {
+            List<BaseModel> sql = Table.select("person.*")
+                    .from(Table.select("name", "id")
+                           .from(Person.class), "person")
+                    .leftJoin(PersonInfo.class, "person.id", "pi.id", "pi")
+                    .where(Where.init("person.name", "=", "xiaoMing")
+                           .orWhere("person.id", "=", "1"))
+                    .andWhere("pi.password", "!=", null)
+                    .andWhere("person.id", "=",
+                           Table.select("id")
+                                   .from("person")
+                                   .where("person.id", "=", "1"))
+                    .get();
+        }
+    }
+    
     ```
     
     你会得到下列查询 SQL 产生的结果(MySQL)。
     
     ```sql
-    SELECT 
-        person.* 
-    FROM ( 
-        SELECT 
-            name, id 
-        FROM person 
-        WHERE null.id != '666' 
-    ) person 
-    LEFT JOIN person_info pi ON person.id = pi.id 
-    WHERE ( 
-        person.name = 'xiaoMing' 
-        AND person.id = '1' 
-    ) 
-    AND pi.password IS NOT NULL 
-    AND person.id = ( 
-        SELECT 
-            id 
-        FROM person 
-        WHERE person.id = '1' 
+    SELECT
+        person.*
+    FROM (
+        SELECT
+            name, id
+        FROM person
+        WHERE null.id != '666'
+    ) person
+    LEFT JOIN person_info pi ON person.id = pi.id
+    WHERE (
+        person.name = 'xiaoMing'
+        AND person.id = '1'
+    )
+    AND pi.password IS NOT NULL
+    AND person.id = (
+        SELECT
+            id
+        FROM person
+        WHERE person.id = '1'
     )
     ```
 
@@ -96,18 +105,81 @@
 
 #### 开始构建
     
-使用 `Table.from()`  或者 `Table.select("*").from()` 开始一段查询,如果未指定 `select`的字段,将默认以`select("*")`来执行,可以将`select`语句放到`from`语句的后面,如`Table.from().select()`。
+使用 `Table.from()`  或者 `Table.select("*").from()` 开始一段查询,可以将`select`语句放到`from`语句的后面,如`Table.from().select()`,或者将`from`放到任何位置,但必须要通过`from`来指定查询来源,更多的信息将在下面进行介绍。
+
+```java
+public class Demo {
+    public static void main(String[] args) {
+        BaseConstructor constructor = null;
+        constructor = Table.from(Person.class);
+        constructor = Table.select("*").from(Person.class);
+    }
+}
+```
     
-该方法会返回一个 `BaseConstructor` 对象,用于构建 SQL 语句。
+该方法会返回一个 `BaseConstructor` 的对象,该对象是链式查询的基础。该接口的默认实现类为`DefaultConstructor`
 
 #### 使用 select 构建查询内容
 
 `BaseConstructor` 中 `select(String... fields)` 方法接收一个可变长度的参数,每一项为需要读取的字段。
 
-可以对其增加别名,如:`.select("fieldName fieldAlias")`,别名与字段名用单个空格进行分格,勿需使用 `AS` 进行标识。如果字段没有指定相应的 Table,将会默认按照 `JOIN` 的顺序默认指定第一个符合的Table。
+可以对其增加别名,如:
+
+```java
+public class Demo {
+    public static void main(String[] args) {
+        BaseConstructor constructor = Table.from(Person.class)
+            .select("person.id p_id");
+    }
+}
+```
+
+其中`person`为表名,`id`为字段名,`p_id`为别名。别名与字段名用单个空格进行分格,勿需使用 `AS` 进行标识。如果字段没有指定相应的 Table,将会默认按照 `JOIN` 的顺序默认指定第一个符合的Table,故下例等价于上例:
+
+```java
+public class Demo {
+    public static void main(String[] args) {
+        BaseConstructor constructor = Table.from(Person.class)
+            .select("id p_id");
+    }
+}
+```
+
+如果未指定 `select`的字段,将默认以`select("*")`来执行,
     
 #### 使用 from 指定查询来源
 
+`BaseConstructor` 中 `from`方法有三种传参形式:
+
+1. `BaseModel`子类的`Class`:
+
+    ```java
+    public class Demo {
+        public static void main(String[] args) {
+            BaseConstructor constructor = Table.from(Person.class);
+        }
+    }
+    ```
+2. `BaseModel`子类的`Class`所注册的表名:
+
+    ```java
+    public class Demo {
+        public static void main(String[] args) {
+            BaseConstructor constructor = Table.from("person");
+        }
+    }
+    ```
+3. 另一个`BaseConstructor`对象,该方法为子查询提供支持:
+
+    ```java
+    public class Demo {
+        public static void main(String[] args) {
+            BaseConstructor constructor = Table.from(Table.from(Person.class));
+        }
+    }
+    ```
+与其他方法不同的是,每一个`BaseConstructor`构建器必须调用`from`方法来指定目标,而其他方法均有默认值。
+
 #### 使用 where 构建查询条件
 
 #### 使用 orderBy 构建排序条件