MyBatis 中如何调用 Java 的 enum (枚举) 字段

事先作成一 enum,如下:

public enum CityCode {

    ALL("000"),
    BEIJING("010"),
    SHANGHAI("021"),

    private String code;

    CityCode(String code) {
        this.code = code;
    }

    public String val() {
        return this.code;
    }
}

在mapper文件中,想判断一个参数的值是否跟 CityCode.ALL 的值一致的时候,我想当然的像下面这么写了:

<if test="area != com.test.constant.CityCode.ALL.val" >
  AND
  p.`city`=#{area}
</if>

我为什么会这么写?

因为之前有在 mapper 文件中判断过 List 对象的size 是不是为 0的,就是下面这么写的:

<if test="statusList.size > 0" >
  // to do sth.
</if>con

但是,结果是行,mybatis 报了下面的错:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'com' not found. Available parameters are [area, param1, param2, now]
    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:79) ~[mybatis-spring-1.3.0.jar:1.3.0]
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447) ~[mybatis-spring-1.3.0.jar:1.3.0]
    at com.sun.proxy.$Proxy22.selectList(Unknown Source) ~[?:?]
    at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:231) ~[mybatis-spring-1.3.0.jar:1.3.0]
    at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:128) ~[mybatis-3.4.0.jar:3.4.0]
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:68) ~[mybatis-3.4.0.jar:3.4.0]
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53) ~[mybatis-3.4.0.jar:3.4.0]
    at com.sun.proxy.$Proxy38.performance(Unknown Source) ~[?:?]

后来,又想起来,之前有过在 mybatis 中访问静态方法的示例,试了一下,果然可以,enum 修改如下:

public enum CityCode {

    ALL("000"),
    BEIJING("010"),
    SHANGHAI("021"),

    private String code;

    CityCode(String code) {
        this.code = code;
    }

    public String val() {
        return this.code;
    }

    public static boolean isAll(String code) {
        return ALL.val().equals(code);
    }
}

然后,mapper 文件修改如下:

<if test="!@com.test.constant.CityCode@isAll(area)" >
  AND
  p.`city`=#{area}
</if>

请注意一下语法:
@xxxxClass@method(parameter)
我上面那个test部分的第一个 ! 是用来对结果取反的,它不属于语法的一部分。当然,你可以不用 ! 改用 not 也一样的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Mybatis-Plus枚举类主要有两种使用方式。第一种是通过使用@EnumValue注解来处理枚举类型。这种方式需要在实体属性上使用@EnumValue注解,并且在数据库对应的字段上添加EnumValue注解,用于标识该字段枚举类型的存储字段。示例代码如下所示: ```java public class User { // ... @EnumValue private AgeEnum age; // ... } public enum AgeEnum implements IEnum<Integer> { // ... } ``` 第二种方式是直接在实体属性使用原生的枚举类型,并且在枚举使用@EnumValue注解来标识对应的数据库字段。示例代码如下所示: ```java public class User { // ... private GradeEnum grade; // ... } public enum GradeEnum { // ... @EnumValue GRADE_A(1), // ... } ``` 在配置方面,需要注意在扫描枚举包时,需要配置相关的扫描路径,以确保Mybatis-Plus能够正确地扫描到枚举类。具体的配置方式可以根据使用的框架进行相应的配置,例如在Spring Boot可以参考如下的配置方式: ```java @Configuration public class MybatisPlusConfig { @Bean public ConfigurationCustomizer configurationCustomizer() { return configuration -> { // 扫描枚举包 configuration.getTypeHandlerRegistry().register("com.example.enums"); }; } } ``` 总之,Mybatis-Plus枚举类使用可以通过使用@EnumValue注解或者原生枚举类型配合@EnumValue注解来处理。在配置方面,需要确保正确配置枚举包的扫描路径。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值