diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index b0277067..73655728 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -60,8 +60,8 @@ export default defineConfig({ {text: '基础查询', link: '/zh/base/query'}, {text: '关联查询', link: '/zh/base/relations-query'}, {text: '批量操作', link: '/zh/base/batch'}, + {text: '链式操作', link: '/zh/base/chain'}, {text: 'QueryWrapper', link: '/zh/base/querywrapper'}, - {text: 'QueryWrapperChain', link: '/zh/base/query-wrapper-chain'}, {text: 'Db + Row', link: '/zh/base/db-row'}, {text: 'Active Record', link: '/zh/base/active-record'}, {text: 'IService', link: '/zh/base/service'}, diff --git a/docs/zh/base/active-record.md b/docs/zh/base/active-record.md index d8148ba7..6690a218 100644 --- a/docs/zh/base/active-record.md +++ b/docs/zh/base/active-record.md @@ -5,13 +5,12 @@ 模式中,对象中既有持久存储的数据,也有针对数据的操作。Active Record 模式把数据存取逻辑作为对象的一部分,处理对象的用户知道如何把数据写入数据库,还知道如何从数据库中读出数据。 在 MyBatis-Flex 中实现 Active Record -功能十分简单,只需继承 [Model](https://gitee.com/mybatis-flex/mybatis-flex/blob/main/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/Model.java) +功能十分简单,只需让 Entity 类继承 [Model](https://gitee.com/mybatis-flex/mybatis-flex/blob/main/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/Model.java) 即可。 ::: tip 注意事项 - -- 使用 Active Record 功能时,项目中必须注入对应实体类的 BaseMapper 对象! -- 如果不想手动创建 Mapper 接口,可以使用 [APT](../others/apt.md#配置文件和选项) 辅助生成。 +- 使用 Active Record 功能时,项目中必须注入对应实体类的 BaseMapper 对象。 +- 如果不想手动创建 Mapper 接口,可以使用 [代码生成器](../others/codegen.md) 或 [APT](../others/apt.md#配置文件和选项) 辅助生成。 ::: ## 使用示例 @@ -35,7 +34,6 @@ public class Account extends Model { private String userName; private Integer age; private Date birthday; - } ``` @@ -50,7 +48,6 @@ public class AccountController { public boolean save(@RequestBody Account account) { return account.save(); } - } ``` diff --git a/docs/zh/base/query-wrapper-chain.md b/docs/zh/base/chain.md similarity index 82% rename from docs/zh/base/query-wrapper-chain.md rename to docs/zh/base/chain.md index 2d65bd1d..5e1057c0 100644 --- a/docs/zh/base/query-wrapper-chain.md +++ b/docs/zh/base/chain.md @@ -1,7 +1,9 @@ -# QueryWrapperChain +# 链式操作 -`QueryWrapperChain.java` 是一个对 `QueryWrapper` 进行链式调用封装的一个类,在 Service 中, -我们可以调用 `service.queryChain()` 获得该实例。 +在 MyBatis-Flex 中,内置了 `QueryChain.java` 和 `UpdateChain.java` 用于对数据进行链式查询操作和链式数据操作(修改和删除)。 + + +## QueryChain 示例 例如,查询文章列表代码如下: @@ -24,29 +26,48 @@ class ArticleServiceTest { } ``` -若不是在 Service 中,我们也可以通过 `QueryWrapperChain.create` 方法,自己创建一个 `QueryWrapperChain` 实例,代码如下: +若不是在 Service 中,我们也可以通过 `QueryChain.create` 方法,自己创建一个 `QueryChain` 实例,代码如下: ```java -List
articles = QueryWrapperChain.create(mapper) +List
articles = QueryChain.of(mapper) .select(ARTICLE.ALL_COLUMNS) .from(ARTICLE) .where(ARTICLE.ID.ge(100)) .list(); ``` -## QueryWrapperChain 的方法 +## UpdateChain 示例 + +假设我们要更新 `Account` 的 `userName` 为 "`张三`",更新年龄在之前的基础上加 1,更新代码如下: +```java +@Test +public void testUpdateChain() { + UpdateChain.of(Account.class) + .set(Account::getUserName, "张三") + .setRaw(Account::getAge, "age + 1") + .where(Account::getId).eq(1) + .update(); +} +``` +以上方法调用时,MyBatis-Flex 内部执行的 SQL 如下: + +```sql +UPDATE `tb_account` SET `user_name` = '张三' , `age` = age + 1 +WHERE `id` = 1 +``` + + +## QueryChain 的方法 - one():获取一条数据 - list():获取多条数据 - page():分页查询 - obj():当 SQL 查询只返回 1 列数据的时候,且只有 1 条数据时,可以使用此方法 - objList():当 SQL 查询只返回 1 列数据的时候,可以使用此方法 -- remove():删除数据 -- update(entity):更新数据 - count():查询数据条数 - exists():是否存在,判断 count 是否大于 0 -## 扩展方法 +## UpdateChain 扩展方法 ### `one()` 系列方法 diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryChain.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryChain.java index 14db79d6..f1d4be83 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryChain.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryChain.java @@ -37,7 +37,7 @@ public class QueryChain extends QueryWrapperAdapter> { this.baseMapper = baseMapper; } - public static QueryChain create(BaseMapper baseMapper) { + public static QueryChain of(BaseMapper baseMapper) { return new QueryChain<>(baseMapper); }