From f404e5c6f2ff6ce7b1baa32a32f678d2479d6af2 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Sat, 1 Jul 2023 22:54:24 +0800 Subject: [PATCH] =?UTF-8?q?remove:=20=E5=88=A0=E9=99=A4=20as.md=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/core/as.md | 121 --------------------------------------------- 1 file changed, 121 deletions(-) delete mode 100644 docs/zh/core/as.md diff --git a/docs/zh/core/as.md b/docs/zh/core/as.md deleted file mode 100644 index f87ef595..00000000 --- a/docs/zh/core/as.md +++ /dev/null @@ -1,121 +0,0 @@ -# @As 注解的使用 - -MyBatis-Flex 提供了 `@As` 用来解决多表查询时列名重复的问题,以下是 `@As` 的代码定义: - -```java -public @interface As { - - /** - * 列的别名。 - * - * @return 别名 - */ - String value(); - -} -``` - -## 使用示例 - -现在有用户表和角色表两个表,对应用户类和角色类,它们两个表的主键相同,对应类的属性也相同。假设一个用户只对应一个角色,现在要查出 -id 的值为 1 的用户及其角色,并用 VO 对象返回。 - -由于嵌套对象也有 id 属性,所以要用 `@As` 注解起别名区分一下,因为只有两个一样的属性名,所以随便给其中一个设置别名就可以了,或者两个都设置也行。 - -::: tip 特别注意 -如果是继承的属性,需要把 `@As` 注解放到对应的 `setter` 方法上。 -::: - -```java -@Table("sys_user") -public class User { - @Id - private Integer id; - private String userName; -} - - -@Table("sys_role") -public class Role { - @Id - private Integer id; - private String roleKey; - private String roleName; -} - -public class UserVO { - @As("user_id") - private String id; - private String userName; - private Role role; -} -``` - -这样在查询的时候使用 `AS` 关键字指定列的别名就可以了。 - -```java -class UserMapperTest { - - @Autowired - private UserMapper userMapper; - - @Test - void testAsAnnotation() { - QueryWrapper queryWrapper = QueryWrapper.create() - .select(USER.USER_ID.as("user_id"), // 注意别名一定要和配置的一模一样 - USER.USER_NAME, - ROLE.ALL_COLUMNS) - .from(USER.as("u")) - .leftJoin(USER_ROLE).as("ur").on(USER_ROLE.USER_ID.eq(USER.USER_ID)) - .leftJoin(ROLE).as("r").on(USER_ROLE.ROLE_ID.eq(ROLE.ROLE_ID)) - .where(USER.USER_ID.eq(1)); - System.out.println(queryWrapper.toSQL()); - UserVO userVO = userMapper.selectOneByQueryAs(queryWrapper, UserVO.class); - System.err.println(userVO); - } - -} -``` - -## 与 `@Column` 的区别 - -- `@As` 注解设置的别名 **只对** 查询有效。 -- `@Column` 注解设置的 `value` 是确切的列名,不仅对查询有效,而且对插入、更新都有效。 -- `@Column` 的优先级要大于 `@As`,也就是说如果使用 `@Column(ignore = true)` 那么 `@As` 将不会生效。 - -## 其他功能 - -用于拓展 `` 映射,自定义列别名映射,例如: - -```java -public class Entity { - - @As("role_id") - @As("user_id") - private String id; - -} -``` - -这样 `SELECT` 查询的时候,只要用 `AS` 指定 `role_id`、`user_id` 别名,都会映射到 `id` 属性上。 - -```java -class Test { - - @Test - void test() { - QueryWrapper qw1 = QueryWrapper.create() - .select(USER.ID.as("user_id")) - .from(USER); - - Entity e1 = userMapper.selectOneByQueryAs(qw1, Entity.class); - - QueryWrapper qw2 = QueryWrapper.create() - .select(ROLE.ID.as("role_id")) - .from(ROLE); - - Entity e2 = roleMapper.selectOneByQueryAs(qw2, Entity.class); - } - -} -```