# MyBatis-Plus 通用枚举 数据库添加字段sex 创建通用枚举类型 配置扫描通用枚举 测试 结果 表中的有些字段值是固定的,例如性别(男或女),此时我们可以使用MyBatis-Plus的通用枚举来实现 # 数据库添加字段sex ALTER TABLE t_user ADD sex INT(11) # 创建通用枚举类型 /** * @author frx * @version 1.0 * @date #配置mybatis日志 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #设置mybatis-plus的全局配置 global-config: db-config: # 配置MyBatis-Plus操作表的默认前缀 table-prefix : t_ # 配置MyBatis-Plus的主键策略 id-type: auto # 配置类型别名所对应的包 type-aliases-package: com.frx01
创建通用枚举类型 package com.atguigu.mp.enums; import com.baomidou.mybatisplus.annotation.EnumValue; import SexEnum(Integer sex, String sexName) { this.sex = sex; this.sexName = sexName; } } 配置扫描通用枚举 mybatis-plus: configuration: # 配置MyBatis日志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: # 配置MyBatis-Plus操作表的默认前缀 table-prefix: t_ # 配置MyBatis-Plus void testSexEnum(){ User user = new User(); user.setName("Enum"); user.setAge(20); //设置性别信息为枚举项
MyBatis-Plus之枚举 博主 默语带您 Go to New World. 在MyBatis-Plus中,对枚举(Enum)的支持相对比较方便,可以更容易地将枚举类型映射到数据库中的字段。 以下是关于MyBatis-Plus中枚举的一些要点: 枚举映射: MyBatis-Plus允许将Java中的枚举类型映射到数据库中的字段。 通过@EnumValue和@EnumValue注解,您可以指定枚举的值和数据库字段之间的映射关系。 枚举类型: 在MyBatis-Plus中,枚举类型可以用于作为实体类中的字段类型。 代码示例: 假设您有一个订单实体类,其中包含一个枚举类型的支付状态。您可以使用MyBatis-Plus来映射这个枚举字段到数据库中。
MyBatis自带的EnumTypeHandler转换为文字保存在数据库,EnumOrdinalTypeHandler使用的是序号,它们的一致性都可能被轻易地破坏,所以最好的办法是自定义一个int类型 自定义公共父接口 package com.tenmao.utils.mybatis; import java.util.Arrays; import java.util.Optional; public " /> </bean> 自定义枚举 package com.tenmao.utils.model; import com.tenmao.utils.mybatis.CodedEnum; public getCode() { return code; } } ps: 参考资料写得特别好,我之所以重新写了一下,是资料写得有点啰嗦,比如子类的注册,其实都是自动的,不需要再额外配置 自定义枚举系列 自定义枚举 --- Gson转换 自定义枚举 --- Swagger文档展示 参考 如何在MyBatis中优雅的使用枚举
在和前端开发对接接口过程中经常发现需要一些枚举类的字典参数,虽然可以通过swagger在线文档给前端开发,不过可以直接返回枚举的编码和字典值就可以更直观,所以在项目里怎么实现? 可以通过Mybatis的一些接口,自定义枚举类的处理器实现 环境准备 开发环境 JDK 1.8 SpringBoot2.2.1 Maven 3.2+ 开发工具 IntelliJ IDEA smartGit shape = JsonFormat.Shape.OBJECT) public interface IEnum { String getCode(); String getName(); } 枚举工具类 写一个枚举工具类,根据code和name返回对应枚举类,根据反射获取getEnumConstants,循环匹配 package com.example.springboot.mybatis.common.enumhandler : true 项目中使用 需要的枚举类就继承IEnum接口 package com.example.springboot.mybatis.bean; import com.example.springboot.mybatis.common.enumhandler.IEnum
在 Mybatis-Plus 中我们可以使用枚举类型来完成这一操作,他能自动将数据库里的字段映射成我们需要的字段,例如性别,新建枚举类如下: @Getter public enum GenderType EnumValue:标注哪一个字段是数据库里的字段; @JsonValue:标注要开启自定义序列化返回值; toString:具体的返回值; 同时我们需要在与数据库关联的实体类中修改类型,将性别字段改为枚举类型 private String name; /** * 性别 */ private GenderType gender; } 在配置文件中配置扫描注解类型: #mybatis-plus 配置 mybatis-plus: type-enums-package: com.demo.test.enums 这个时候再去查询,返回的结果就直接是我们在枚举类型中定义的 name 值了。
有时候我们需要将数据库的字段对Java的枚举类型进行映射,比如说我们有一个汽车配件类型的枚举 public enum ProductType implements Localisable { TYPE1 this.value = value; } @Override public String getValue() { return this.value; } } 该枚举类型实现了一个接口 public interface Localisable { String getValue(); } 有一个配件分类的实体类,包含了该枚举字段(此处只包含部分字段属性) /** * 配件分类 DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-
EmpStatus empStatus=EmpStatus.LOGOUT; private Department dept; EmpStatus.java package com.gong.mybatis.bean ; import com.gong.mybatis.bean.Employee; import com.gong.mybatis.dao.EmployeeMapper; import com.gong.mybatis.mapper.EmployeeMapperDynamicSql BaseJdbcLogger.java:145) DEBUG 01-23 15:27:43,472 <== Updates: 1 (BaseJdbcLogger.java:145) 保存成功:9 数据库中: 插入的是枚举类型的值 我们也可以在mybatis全局配置文件中处理枚举类型的Handler: <typeHandlers> <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler " javaType="com.gong.<em>mybatis</em>.bean.EmpStatus"/> </typeHandlers> 再进行测试,输出结果为: DEBUG 01-23
:Swift枚举在创建时未分配默认整数值。 原始值是在定义枚举时被预先填充的值。对于一个特定的枚举成员,它的原始值始终不变。关联值是创建一个基于枚举成员的常量或变量时才设置的值,枚举成员的关联值可以变化。 autumn case winter } 当使用字符串作为枚举类型的原始值时,每个枚举成员的隐式原始值为该枚举成员的名称 enum Season:String { case spring ) 使用原始值初始化枚举实例 可以通过rawValue初始化一个枚举成员,返回值则是枚举成员或nil 可以通过这个来判断这个新枚举成员是否在枚举值中 enum Season:Int { case 递归枚举是一种枚举类型 有一个或多个枚举成员使用该枚举类型的作为枚举成员 在枚举成员前加上indirect来表示该成员可递归 enum ArithmeticExpression { case
自定义 MyBatis 通用枚举类型解析器 在使用MyBatis的过程中,我们经常会使用到枚举类型的数据, 一般在保存数据时只是想将枚举类型的code值存入到数据库中,查询时希望能自动根据code值映射出对应的枚举对象出现 ,而不是查询出code值然后再手动根据code值找到对应的枚举对象的转换 官方注册方案 官方方案:https://mybatis.org/mybatis-3/zh_CN/configuration.html 为了实现所有的枚举都自动注册通用类型转换器,这里需要自定义一个配置类CustomizeMyBatisConfiguration.java并实现org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer 获取所有需要注册到通用枚举类型处理器中的枚举类 1. 自定义一个类型过滤器com.kws.mybatis.config.CustomizeMyBatisConfiguration.EnumTypeFilter,用于在类路径扫描时,过滤出需要处理的枚举类(1
全局配置: <typeHandlers> <typeHandler handler="com.gong.<em>mybatis</em>.typeHandler.MyEnumEmpStatusTypeHandler " javaType="com.gong.<em>mybatis</em>.bean.EmpStatus"/> <! throws SQLException { // TODO Auto-generated method stub //需要根据从数据库中拿到的枚举的状态码返回一个枚举对象 ; import com.gong.mybatis.bean.Employee; import com.gong.mybatis.dao.EmployeeMapper; import com.gong.mybatis.mapper.EmployeeMapperDynamicSql 存储的是自己定义的枚举类型中的code。
// 递归实现指数型枚举 vector<int> chosen; void calc(int x) { if (x == n + 1) { for (int i = 0; i < chosen.size "); return; } calc(x + 1); chosen.push_back(x); calc(x + 1); chosen.pop_back(); } // 递归实现组合型枚举 "); return; } calc(x + 1); chosen.push_back(x); calc(x + 1); chosen.pop_back(); } // 递归实现排列型枚举 order[k] = i; chosen[i] = 1; calc(k + 1); chosen[i] = 0; order[k] = 0; } } // 模拟机器实现,把组合型枚举改为非递归
枚举就是尝试所有的可能性,尤其是当我们在确定一个问题是不是的这一类问题中尤其有用,例如说给一堆数,让我我们判断他们是不是素数,或者素数的数量的时候,这里他们就是判断类问题我们就可以使用枚举。 但是注意这里我们需要考虑的就是枚举的方式,也就是枚举的角度。这里有一个小的例子就是最长回文子串的问题。 首先我们就是用一个最简单的方式就是枚举出所有的字串,然后在这些字串里面找回文串。 然后上面的方式枚举的对象就是所有的字串,但是我们仔细就会发现重点在于回文子串的中心,如果我们枚举的是回文子串的中心以及回文的长度,我们就更简单的找到最长回文子串。 这里是从 n 三次方降到了 n 平方的复杂度,这样的原因在于我们去掉了很多的无用的字串,第一个枚举的方法就是枚举所有的字串,然后第二个就是仅仅找出那些具有回文形式的字串,这样就少了一个 n 。 其实在枚举的过程中有的枚举并没有必要,因为这些就是用来占用了时间复杂度但是没有给程序带来多大的帮助。
参考链接: 使用Java枚举 C 语言中可以这样来定义枚举 enum color { RED=0, GREEN, BLUE, YELLOW } col; 关键字 enum 定义枚举, 在定义枚举的同时,声明该枚举变量 col. 注意:C 语言中枚举成员的值是根据上下文自动加 1 的(GREEN = 1, BLUE = 2 等)。 Java 语言中定义枚举也是使用关键字 enum public enum Color { RED, GREEN, BLUE, YELLOW; } 上述定义了一个枚举类型 Color(可以说是类 其实,枚举的成员就是枚举对象,只不过他们是静态常量而已。
1.如果自己不去给枚举值赋初值,就自动从0开始定义 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include <string.h> //枚举 enum WEEKDAY { ri, yi,er,sa,si,wu,li }; void test() { printf("%d ",ri); printf(" printf("%d ", si); printf("%d ", wu); printf("%d ", li); } int main() { test(); return 0; } 2.匿名枚举类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> //枚举 //匿名枚举 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> //枚举 enum aa
上面案例紧紧只是封装了new ResultCodeEnum(0,”未知异常”)的作用。
一、什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二、为什么不用静态常量来替代枚举类呢? 三、枚举类入门 先看一个简单的枚举类。 枚举类可以实现一个或多个接口。 枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。 使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承。 枚举类的构造器只能是私有的。 四、枚举类介绍 枚举类内也可以定义属性和方法,可是是静态的和非静态的。 枚举类通常应该设计成不可变类,它的Field不应该被改变,这样会更安全,而且代码更加简洁。所以我们将Field用private final修饰。 五、枚举类实现接口 枚举类可以实现一个或多个接口。
深入了解MyBatis-Plus中的枚举处理器及实例演示 介绍: 在开发中,数据库表中的字段很常见会使用枚举类型来表示一些固定的取值范围。 为了方便在MyBatis-Plus中处理这些枚举类型的映射,MyBatis-Plus提供了专门的枚举处理器。 本文将详细讲解MyBatis-Plus中的枚举处理器的用法,并结合一个具体案例进行演示和说明。 枚举处理器的应用 接下来,我们将演示如何在MyBatis-Plus中使用枚举处理器进行数据库字段与枚举类型之间的映射。 通过编写和运行这些测试用例,我们可以验证枚举处理器在MyBatis-Plus中的正常工作。以上示例展示了如何查询和更新枚举类型字段,并验证了枚举处理器对于数据库字段与枚举类型的正确映射。
枚举类:就是对象的实例个数是确定的(例如:单例模式),也就说我们在创建枚举类的时候,会对构造器进行设置 一、自定义创建枚举类 ---- package com.atguigu.java1; public return seasonName; } public String getSeasonDesc() { return seasonDesc; } //4.创建枚举类的对象 //枚举类 enum Season1{ SPRING("spring", "春暖花开"), SUMMER("summer", "夏日炎炎"), AUTUMN("autumn", ;i++){ System.out.println(seasons[i]); } //2.valueOf(String name):要求传入的形参name是枚举类对象的名字,获取枚举对象。 interface Info{ void show(); } //枚举类 enum Season1 implements Info{ SPRING("spring", "春暖花开"){
什么是枚举?枚举是一种特殊的数据类型,用于定义具有固定个数的常量集。它可以帮助我们更好地管理常量,使代码更易于阅读和维护。Java枚举是一种高效、可读性强的常量管理方式,它可以使代码更易于维护和扩展。 使用Java枚举可以帮助我们有效地组织常量,并将其用于多种场景,提高代码的易用性和可重用性。如何使用Java枚举? 在Java中,定义枚举使用enum关键字,其基本语法结构如下:其中,EnumName表示枚举类型的名称,CONSTANT1、CONSTANT2、……、CONSTANTN表示枚举类型中的常量值。 如何使用Java枚举中的常量值? ,并为枚举类型定义了一个getChineseName()方法,它可以返回当前枚举常量的中文名称。