MybatisPlus操作符和运算值

好久没有更新了,这次更新一个当前端需要对运算符和运算值都需要前端传递给后端,动态拼接运算条件时的处理方法。

1、踩雷

查询年龄 >=20,其中>=前端下拉框选择,20值前端下拉框选择

1)用户表:

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `name` varchar(12)  COMMENT '用户名称',
  `hobby` varchar(12) DEFAULT NULL COMMENT '爱好',
  `age`  int(11) DEFAULT NULL COMMENT '用户年龄',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='用户表';

2)定义VO:

import lombok.Data;

@Data
public class UserVO extends User {

	/**
	 * 操作运算符:>=/<=/=
	 */
    private String operateStr;

}

 3)Mapper内容

    <select id="selectUsers" resultType="org.springboot.xg.vo.UserVO">
        select * from user
        <where>
            <if test="userVO.operateStr!= null and userVO.operateStr != '' and  userVO.age!= null">
                and avg_delay ${userVO.operateStr} #{userVO.age}
            </if>
        </where>
    </select>

这样写虽然接受参数没有问题,但是在进入Mapper层查询时出报错,不能识别符号。

2、调整

1)定义枚举

package org.springboot.xg.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public enum OperateEnum {

	// 大于等于
	GREATER_THAN_OR_EQUAL_TO(1, ">="),
	// 等于
	BE_EQUAL_TO(2, "="),
	// 小于等于
	LESS_THAN_OR_EQUAL_TO(3, "<=");

	/**
	 * 操作符对应整数值
	 */
	private final Integer operateIntValue;

	/**
	 * 条件
	 */
	private final String condition;


	/**
	 * 根据值获取条件
	 *
	 * @param value 值
	 * @return 条件
	 */
	public static String getConditionByIntValue(Integer value) {
		for (OperateEnum item : OperateEnum.values()) {
			if (item.getOperateIntValue().equals(value)) {
				return item.getCondition();
			}
		}
		return null;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值