开发喵星球

MyBatis 是否可以映射 Enum 枚举类?

是的,MyBatis 可以映射枚举类(Enum)。在 MyBatis 中,可以使用 EnumTypeHandler 将数据库中的值映射到对应的 Java 枚举类。

要在 MyBatis 中映射枚举类,可以按照以下步骤进行配置:

1. 创建枚举类:

public enum UserType {
    ADMIN,
    USER,
    GUEST
}

2. 编写 TypeHandler 类:

创建一个继承自 BaseTypeHandler 的枚举类型处理器:

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserTypeHandler extends BaseTypeHandler {
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, UserType userType, JdbcType jdbcType) throws SQLException {
        preparedStatement.setString(i, userType.name());
    }

    @Override
    public UserType getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return UserType.valueOf(resultSet.getString(s));
    }

    @Override
    public UserType getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return UserType.valueOf(resultSet.getString(i));
    }

    @Override
    public UserType getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return UserType.valueOf(callableStatement.getString(i));
    }
}

3. 配置映射文件或注解:

在映射文件或注解中配置枚举类的字段对应的 TypeHandler:


    
    
    

或者使用注解:

@Results({
    @Result(property = "userType", column = "user_type", javaType = UserType.class, typeHandler = UserTypeHandler.class)
})

以上配置指定了枚举类 UserType 对应的 TypeHandler,可以将数据库中存储的字符串值映射到 UserType 枚举类型,并在查询时进行相应的转换。

Proudly powered by WordPress