Mybatis条件if test如何使用枚举值

目录
  • Mybatis条件if test使用枚举值
    • 1.正确
    • 2.错误
  • Mybatis里使用枚举Enum判断
    • TestTypeEnum定义如下

Mybatis条件if test使用枚举值

1.正确

package com.weather.weatherexpert.common.utils;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 *
 * @Author
 * @CreateTime
 */
public enum City {
    XINZHOU(100002,"忻州"),
    DATONG(100003,"大同"),
    TAIYUAN(100001,"太原");

    private final Integer code;
    private final String name;

    City(Integer value, String desc) {
        this.code = value;
        this.name = desc;
    }

    public Integer getCode() {
        return code;
    }

    public String getName() {
        return name;
    }
}

xml:

<!--<if test="cityName == @com.weather.weatherexpert.common.utils.City.XINZHOU@getName">&lt;!&ndash;wrong,java.lang.ClassNotFoundException: Unable to resolve class: com.weather.weatherexpert.common.utils.City.XINZHOU&ndash;&gt;-->
<!--<if test="cityName == @com.weather.weatherexpert.common.utils.City@XINZHOU@getName">&lt;!&ndash;wrong,[org.apache.ibatis.ognl.ParseException: Encountered " "@" "@ "" at line 1, column 65.&ndash;&gt;-->
<if test="cityName == @com.weather.weatherexpert.common.utils.City@XINZHOU.getName"><!--right-->
	area_table
</if>

where 1=1
<if test="cityName == @com.weather.weatherexpert.common.utils.City@XINZHOU.getName"><!--right-->
	and city_name=#{cityName}
</if>	

2.错误

package com.weather.weatherexpert.common.utils;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 *
 * @Author
 * @CreateTime
 */
public class CityClass {
    public static enum CityEnum {

        XINZHOU(100002, "忻州"),
        DATONG(100003, "大同"),
        TAIYUAN(100001, "太原");

        private final Integer code;
        private final String name;

        CityEnum(Integer value, String desc) {
            this.code = value;
            this.name = desc;
        }

        public Integer getCode() {
            return code;
        }

        public String getName() {
            return name;
        }
    }
}

xml:

/*        Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression
        'cityName == @com.weather.weatherexpert.common.utils.CityClass@CityEnum.XINZHOU.getName'. Cause: org.apache.ibatis.ognl.OgnlException:
        Could not get static field CityEnum from class com.weather.weatherexpert.common.utils.CityClass [java.lang.NoSuchFieldException: CityEnum]*/
        <if test="cityName == @com.weather.weatherexpert.common.utils.CityClass@CityEnum.XINZHOU.getName"><!--wrong-->
            area_table
        </if>	

可见,直接定义的枚举类可以正常使用,在类中定义的枚举类这样使用会报错,可能方法还没有找到。

如下正确:

 <if test="cityName == @com.a.b.c.CityClass$CityEnum@XINZHOU.getName"><!--right-->
  name = #{username}
 </if>

Mybatis里使用枚举Enum判断

<if test="dtEnum == @com.xxx.xxx.TestTypeEnum@HOUR">
  DATE_FORMAT(TM,'%Y-%m-%d %H') as keyStr,
</if>

TestTypeEnum定义如下

  • HOUR("hour"),
  • DAY("day"),
  • MONTH("month"),
  • YEAR("year");

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis处理枚举类的简单方法

    mybatis自带对枚举的处理类 org.apache.ibatis.type.EnumOrdinalTypeHandler<E> :该类实现了枚举类型和Integer类型的相互转换. 但是给转换仅仅是将对应的枚举转换为其索引位置,也就是"ordinal()"方法获取到的值.对应自定义的int值,该类无能为力. org.apache.ibatis.type.EnumTypeHandler<E> :该类实现了枚举类型和String类型的相互转换. 对于想将枚举在数

  • MyBatis中如何优雅的使用枚举详解

    问题 本文主要给大家介绍的是关于MyBatis使用枚举的相关内容,我们在编码过程中,经常会遇到用某个数值来表示某种状态.类型或者阶段的情况,比如有这样一个枚举: public enum ComputerState { OPEN(10), //开启 CLOSE(11), //关闭 OFF_LINE(12), //离线 FAULT(200), //故障 UNKNOWN(255); //未知 private int code; ComputerState(int code) { this.code =

  • Mybatis-Plus通用枚举的使用详解

    解决了繁琐的配置,让 mybatis 优雅的使用枚举属性! 修改表结构 ALTER TABLE `tb_user` ADD COLUMN `sex` INT ( 1 ) NULL DEFAULT 1 COMMENT '1-男,2-女' AFTER `deleted`; 定义枚举 public enum SexEnum implements IEnum<Integer> { MAN(1, "男"), WOMAN(2, "女"); private int v

  • Mybatis条件if test如何使用枚举值

    目录 Mybatis条件if test使用枚举值 1.正确 2.错误 Mybatis里使用枚举Enum判断 TestTypeEnum定义如下 Mybatis条件if test使用枚举值 1.正确 package com.weather.weatherexpert.common.utils; /** * <p>Title: </p> * <p>Description: </p> * * @Author * @CreateTime */ public enum

  • vue三元运算之多重条件判断方式(多个枚举值转译)

    目录 vue多重条件判断(多个枚举值转译) vue标签中使用三元运算符 vue多重条件判断(多个枚举值转译) 直接上代码: div class="msgLi">      <p>组织设置:</p>      <p>{{ organInfo.partySetup=="1"?"撤销":organInfo.partySetup=="2"?"调整":organInfo.pa

  • 关于mybatis if else if 条件判断SQL片段表达式取值和拼接问题

    前言 最近在开发项目的时候涉及到复杂的动态条件查询,但是mybaits本身不支持if elseif类似的判断但是我们可以间接通过 chose when otherwise 去实现其中choose为一个整体 when是if otherwise是else 快速使用 以前我们进行条件判断时候使用if标签进行判断,条件并列存在 <if test="seat_no != null and seat_no != '' "> AND seat_no = #{seat_no} </i

  • Mybatis多个字段模糊匹配同一个值的案例

    需求: 搜索框中可输入手机号,姓名,地址查询,后台需要对一个框中的多个字段做匹配查询. 搜索 可以在sql语句中做拼接条件查询: <if test="condition!=null and condition!=''"> AND CONCAT(r.name,a.name,a.phone,a.addr_detail) LIKE '%' #{condition} '%' </if> 补充知识:在Mybatis xml使用mysql数据库进行多字段模糊查询(Like)

  • mybatis的if判断不要使用boolean值的说明

    mybatis的if判断里面最好不要使用boolean值: mybatis会默认把空值转为false.所以如果遇见前段传空值,这个字段在mybatis里面永远就是false了, 可以使用数字类型代替,但是不要使用0作为参数: 补充知识:[MyBatis]<if test=""></if>标签的条件判断(Boolean类型参数) 在MyBatis 中,动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似. 在 MyBatis 3 之前的版本中,有很

  • mybatis Mapper的xml文件中resultType值的使用说明

    目录 Mapper的xml文件中resultType值 ①返回一般数据类型的值 ②当返回类型是javaBean ③当返回是List类型 ④返回类型数Map结构 ⑤说一下关于mybatis里面mapper层中传入多个参数的方法 mybatis学习之resultType解析 总结 1.对象类型 2.List类型 3.Map类型 Mapper的xml文件中resultType值 ①返回一般数据类型的值 比如根据id或者字段条件查询获取表中的某一个字段值 User Sel(int id); //根据id

  • mybatis条件构造器(EntityWrapper)的使用方式

    目录 mybatis条件构造器(EntityWrapper)使用 需求 直接看几个案例体会EntityWrapper的使用 Wrappers使用的坑点 mybatis条件构造器(EntityWrapper)使用 基本的 CRUD 操作,我们仅仅需要继承一个 BaseMapper 即可实现大部分单表 CRUD 操作.BaseMapper 提供了多达 17 个方法供使用, 可以极其方便的实现单一.批量.分页等操作,极大的减少开发负担. 但是mybatis-plus的强大不限于此,请看如下需求该如何处

  • C# 从枚举值获取对应的文本描述详解

    C# 从枚举值获取对应的文本描述详解 有时枚举值在显示时,需要显示枚举值对应的文本串.一种方案是在调用的地方使用switch或者if来判断枚举值,然后赋给不同的文本串,但这样一来,如果有较多的地方都用到的时候就会比较麻烦.当然有人说,这种情况下,可以针对这种枚举值封装一个方法,然后来调用.那如果有多个枚举类型都有这样的需求呢?有没有什么比较通用的解决办法?有的. 这里需要用到Description属性,给每个枚举值都赋上一个该属性,然后在该属性中赋上要描述的文本串.比如 #region YesN

  • Mybatis 条件查询 批量增删改查功能

    模糊查询: @Select({ "SELECT * FROM account where account like CONCAT('%',#{query},'%') or email like CONCAT('%',#{query},'%')" }) Account findAccountByAccountOrMail(@Param("query") String query); 批量添加: @Insert({ "<script>"

随机推荐