diff --git a/docs/.vitepress/cache/deps/@theme_index.js b/docs/.vitepress/cache/deps/@theme_index.js
deleted file mode 100644
index 8f691a16..00000000
--- a/docs/.vitepress/cache/deps/@theme_index.js
+++ /dev/null
@@ -1,41 +0,0 @@
-// node_modules/vitepress/dist/client/theme-default/index.js
-import "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/styles/fonts.css";
-
-// node_modules/vitepress/dist/client/theme-default/without-fonts.js
-import "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/styles/vars.css";
-import "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/styles/base.css";
-import "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/styles/utils.css";
-import "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/styles/components/custom-block.css";
-import "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code.css";
-import "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code-group.css";
-import "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css";
-import "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-sponsor.css";
-import VPBadge from "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue";
-import Layout from "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/Layout.vue";
-import { default as default2 } from "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeHero.vue";
-import { default as default3 } from "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeFeatures.vue";
-import { default as default4 } from "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeSponsors.vue";
-import { default as default5 } from "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue";
-import { default as default6 } from "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPage.vue";
-import { default as default7 } from "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue";
-import { default as default8 } from "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageSection.vue";
-import { default as default9 } from "/Users/michael/work/git/mybatis-flex/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamMembers.vue";
-var theme = {
- Layout,
- enhanceApp: ({ app }) => {
- app.component("Badge", VPBadge);
- }
-};
-var without_fonts_default = theme;
-export {
- default5 as VPDocAsideSponsors,
- default3 as VPHomeFeatures,
- default2 as VPHomeHero,
- default4 as VPHomeSponsors,
- default9 as VPTeamMembers,
- default6 as VPTeamPage,
- default8 as VPTeamPageSection,
- default7 as VPTeamPageTitle,
- without_fonts_default as default
-};
-//# sourceMappingURL=@theme_index.js.map
diff --git a/docs/.vitepress/cache/deps/@theme_index.js.map b/docs/.vitepress/cache/deps/@theme_index.js.map
deleted file mode 100644
index 6414bf4c..00000000
--- a/docs/.vitepress/cache/deps/@theme_index.js.map
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "version": 3,
- "sources": ["../../../node_modules/vitepress/dist/client/theme-default/index.js", "../../../node_modules/vitepress/dist/client/theme-default/without-fonts.js"],
- "sourcesContent": ["import './styles/fonts.css';\nexport * from './without-fonts';\nexport { default as default } from './without-fonts';\n", "import './styles/vars.css';\nimport './styles/base.css';\nimport './styles/utils.css';\nimport './styles/components/custom-block.css';\nimport './styles/components/vp-code.css';\nimport './styles/components/vp-code-group.css';\nimport './styles/components/vp-doc.css';\nimport './styles/components/vp-sponsor.css';\nimport VPBadge from './components/VPBadge.vue';\nimport Layout from './Layout.vue';\n// Note: if we add more optional components here, i.e. components that are not\n// used in the theme by default unless the user imports them, make sure to update\n// the `lazyDefaultThemeComponentsRE` regex in src/node/build/bundle.ts.\nexport { default as VPHomeHero } from './components/VPHomeHero.vue';\nexport { default as VPHomeFeatures } from './components/VPHomeFeatures.vue';\nexport { default as VPHomeSponsors } from './components/VPHomeSponsors.vue';\nexport { default as VPDocAsideSponsors } from './components/VPDocAsideSponsors.vue';\nexport { default as VPTeamPage } from './components/VPTeamPage.vue';\nexport { default as VPTeamPageTitle } from './components/VPTeamPageTitle.vue';\nexport { default as VPTeamPageSection } from './components/VPTeamPageSection.vue';\nexport { default as VPTeamMembers } from './components/VPTeamMembers.vue';\nconst theme = {\n Layout,\n enhanceApp: ({ app }) => {\n app.component('Badge', VPBadge);\n }\n};\nexport default theme;\n"],
- "mappings": ";AAAA,OAAO;;;ACAP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO,aAAa;AACpB,OAAO,YAAY;AAInB,SAAoB,WAAXA,gBAA6B;AACtC,SAAoB,WAAXA,gBAAiC;AAC1C,SAAoB,WAAXA,gBAAiC;AAC1C,SAAoB,WAAXA,gBAAqC;AAC9C,SAAoB,WAAXA,gBAA6B;AACtC,SAAoB,WAAXA,gBAAkC;AAC3C,SAAoB,WAAXA,gBAAoC;AAC7C,SAAoB,WAAXA,gBAAgC;AACzC,IAAM,QAAQ;AAAA,EACV;AAAA,EACA,YAAY,CAAC,EAAE,IAAI,MAAM;AACrB,QAAI,UAAU,SAAS,OAAO;AAAA,EAClC;AACJ;AACA,IAAO,wBAAQ;",
- "names": ["default"]
-}
diff --git a/docs/.vitepress/cache/deps/_metadata.json b/docs/.vitepress/cache/deps/_metadata.json
index f44b22e4..cf9e1535 100644
--- a/docs/.vitepress/cache/deps/_metadata.json
+++ b/docs/.vitepress/cache/deps/_metadata.json
@@ -1,17 +1,11 @@
{
- "hash": "02c07141",
- "browserHash": "e1f90fb9",
+ "hash": "6f7e7a0c",
+ "browserHash": "e8cc6d21",
"optimized": {
"vue": {
"src": "../../../node_modules/vue/dist/vue.runtime.esm-bundler.js",
"file": "vue.js",
- "fileHash": "129bee0c",
- "needsInterop": false
- },
- "@theme/index": {
- "src": "../../../node_modules/vitepress/dist/client/theme-default/index.js",
- "file": "@theme_index.js",
- "fileHash": "7f1d5583",
+ "fileHash": "98aba298",
"needsInterop": false
}
},
diff --git a/docs/.vitepress/theme/MyLayout.vue b/docs/.vitepress/theme/MyLayout.vue
new file mode 100644
index 00000000..6137c142
--- /dev/null
+++ b/docs/.vitepress/theme/MyLayout.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js
new file mode 100644
index 00000000..9c8c6528
--- /dev/null
+++ b/docs/.vitepress/theme/index.js
@@ -0,0 +1,10 @@
+// .vitepress/theme/index.js
+import DefaultTheme from 'vitepress/theme'
+import MyLayout from './MyLayout.vue'
+
+export default {
+ ...DefaultTheme,
+ // override the Layout with a wrapper component that
+ // injects the slots
+ Layout: MyLayout
+}
\ No newline at end of file
diff --git a/docs/zh/base/query.md b/docs/zh/base/query.md
index e0828cd7..a76fe250 100644
--- a/docs/zh/base/query.md
+++ b/docs/zh/base/query.md
@@ -2,22 +2,83 @@
## 基础查询
-在 Mybatis-Flex 的 BaseMapper 中,提供了如下的功能用于查询数据库的数据:
+在 Mybatis-Flex 的 `BaseMapper` 中,提供了如下的功能用于查询数据库的数据:
- **selectOneById(id)**:根据主键 id 查询数据
- **selectOneByMap(map)**:根据 `map<字段名,值>` 组成的条件查询 1 条数据,若命中多条数据,则只返回第一条数据。
- **selectOneByCondition(condition)**:根据 condition 组成的条件查询 1 条数据,若命中多条数据,则只返回第一条数据。
- **selectOneByQuery(query)**:根据 QueryWrapper 组成的条件查询 1 条数据,若命中多条数据,则只返回第一条数据。
+- **selectOneByQueryAs(query, asType)**:和 `selectOneByQuery` 方法类似,但是在某些场景下,`query` 可能包含了 `left join` 等多表查询,返回的数据和 entity 字段不一致时,
+可以通过 `asType` 参数来指定接收的数据类型(通常是 dto、vo 等)。
- **selectListByIds(idList)**:根据多个 id 查询,返回多条数据
- **selectListByMap(map)**:根据 `map<字段名,值>` 组成的条件查询数据。
- **selectListByMap(map, count)**:根据 `map<字段名,值>` 组成的条件查询数据,只取前 count 条。
- **selectListByCondition(condition)**:根据 condition 组成的条件查询数据。
- **selectListByCondition(condition, count)**:根据 condition 组成的条件查询数据,只取前 count 条。
- **selectListByQuery(query)**: 根据 QueryWrapper 组成的条件查询数据。
+- **selectListByQueryAs(query, asType)**: 和 `selectListByQuery` 方法类似,但是在某些场景下,`query` 可能包含了 `left join` 等多表查询,返回的数据和 entity 字段不一致时,
+ 可以通过 `asType` 参数来指定接收的数据类型(通常是 dto、vo 等)。
- **selectAll**:查询所有数据。
- **selectCountByCondition**:根据 QueryWrapper 查询数据量。
- **selectCountByQuery**:根据 QueryWrapper 查询数据量。
+## 关联查询(或多表查询)
+
+在 `BaseMapper` 中,提供了 `selectOneByQueryAs`、`selectListByQueryAs` 、`paginateAs` 等方法,用于处理关联查询的场景。
+
+假设有 `tb_account` 用户表和 `tb_article` 文章表,他们的字段分别如下:
+
+```sql
+CREATE TABLE IF NOT EXISTS `tb_account`
+(
+ `id` INTEGER PRIMARY KEY auto_increment,
+ `user_name` VARCHAR(100),
+ `age` Integer,
+ `birthday` DATETIME
+);
+
+CREATE TABLE IF NOT EXISTS `tb_article`
+(
+ `id` INTEGER PRIMARY KEY auto_increment,
+ `account_id` Integer,
+ `title` VARCHAR(100),
+ `content` text
+);
+```
+
+当我们进行关联查询时,可以通过如下代码进行:
+
+1、定义 `ArticleDTO` 类
+```java
+public class ArticleDTO {
+
+ private Long id;
+ private Long accountId;
+ private String title;
+ private String content;
+
+ //以下用户相关字段
+ private String userName;
+ private int age;
+ private Date birthday;
+}
+```
+
+2、使用 `QueryWrapper` 构建 `left join` 查询,查询结果通过 `ArticleDTO` 类型接收。
+```java
+QueryWrapper query = QueryWrapper.create()
+ .select(ARTICLE.ALL_COLUMNS)
+ .select(ACCOUNT.USER_NAME,ACCOUNT.AGE,ACCOUNT.BIRTHDAY)
+ .from(ARTICLE)
+ .leftJoin(ACCOUNT).on(ARTICLE.ACCOUNT_ID.eq(ACCOUNT.ID))
+ .where(ACCOUNT.ID.ge(0));
+
+List results = mapper.selectListByQueryAs(query, ArticleDTO.class);
+System.out.println(results);
+```
+
+
+
## 分页查询
在 Mybatis-Flex 的 BaseMapper 中,提供了如下的分页查询功能:
diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/ArticleDTO.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/ArticleDTO.java
index 8e9f93db..e55d9a9a 100644
--- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/ArticleDTO.java
+++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/ArticleDTO.java
@@ -12,7 +12,6 @@ public class ArticleDTO {
private String content;
-
private String userName;
private int age;