From d5342f3792913c4fef4c6e37114ef7bd76664376 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Mon, 17 Apr 2023 12:01:44 +0800 Subject: [PATCH] update docs --- docs/.vitepress/config.ts | 1 + docs/zh/enum-property.md | 44 +++++++++++++++++++ .../java/com/mybatisflex/test/TypeEnum.java | 13 +++++- 3 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 docs/zh/enum-property.md diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 769dc18a..b11e1340 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -63,6 +63,7 @@ export default defineConfig({ {text: '字段权限', link: '/zh/columns-permission'}, {text: '字段加密', link: '/zh/columns-encrypt'}, {text: '字典回显', link: '/zh/columns-dict'}, + {text: '枚举属性', link: '/zh/enum-property'}, {text: '多租户', link: '/zh/multi-tenancy'}, ] }, diff --git a/docs/zh/enum-property.md b/docs/zh/enum-property.md new file mode 100644 index 00000000..ab26803f --- /dev/null +++ b/docs/zh/enum-property.md @@ -0,0 +1,44 @@ +# 枚举属性 + +在某些场景下,我们希望在 Entity 中定义的属性是某一个枚举类,而非基本的数据类型,例如: + +```java 7 +@Table(value = "tb_account") +public class Account{ + + @Id(keyType = KeyType.Auto) + private Long id; + + private TypeEnum typeEnum; +} +``` +在默认情况下,Mybatis 内置了一个名为:`EnumTypeHandler` 的处理器,用于处理这种场景。通过 `EnumTypeHandler` 处理后,数据库保存的是 `TypeEnum` 对应的属性名称, +是一个 String 类型。例如 `TypeEnum.TYPE1` 保存到数据库的内容为 `TYPE1` 这个字符串。 + +## @EnumValue 注解 + + +但很多时候,我们希望保存到数据库的,是 `TypeEnum` 枚举的某个属性值,而非 `TYPE1` 字符串,那么,我就需要用到 Mybatis-Flex 提供的注解 `@EnumValue`,以下是示例代码: + +```java 8,9 +public enum TypeEnum { + TYPE1(1, "类型1"), + TYPE2(2, "类型2"), + TYPE3(3, "类型3"), + + ; + + @EnumValue + private int code; + + private String desc; + + TypeEnum(int code, String desc) { + this.code = code; + this.desc = desc; + } +} +``` + +通过注解 `@EnumValue` 为 `code` 属性标注后,当我们保存 Account 内容到数据库时,Mybatis-Flex 会自动使用 `code` 属性值进行保存,同时在读取数据库内容的时候,Mybatis-Flex 自动把数据库的值转换为 +`TypeEnum` 枚举。 diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/TypeEnum.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/TypeEnum.java index f33463d0..d7df7166 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/TypeEnum.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/TypeEnum.java @@ -1,12 +1,21 @@ package com.mybatisflex.test; +import com.mybatisflex.annotation.EnumValue; + public enum TypeEnum { - AGE(0); + TYPE1(1,"类型1"), + TYPE2(2,"类型2"), + TYPE3(3,"类型3"), + ; + @EnumValue private int code; - TypeEnum(int code) { + private String desc; + + TypeEnum(int code, String desc) { this.code = code; + this.desc = desc; } }