首页 > 其他分享 >MyBatisPlus中IN的使用

MyBatisPlus中IN的使用

时间:2023-09-01 17:12:54浏览次数:31  
标签:java CCJSqlParser parser jar jsqlparser 使用 MyBatisPlus net

原java代码块

 Page<CrmCustomer> customerPage = baseMapper.selectPage(page, Wrappers.lambdaQuery(crmCustomer)
                .eq(CrmCustomer::getOpenSeaFlag, CommonConstants.ZERO)
                .in(CrmCustomer::getUserId, userIdList));

查询条件userList,当userList为空的时候会报错误

Encountered unexpected token: "IN" "IN"
    at line 7, column 14.

Was expecting one of:

    "&"
    ")"
    "::"
    "<<"
    ">>"
    "COLLATE"
    "["
    "^"
    "|"

	at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:31468) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:31301) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParser.AndExpression(CCJSqlParser.java:9818) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParser.OrExpression(CCJSqlParser.java:9696) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParser.XorExpression(CCJSqlParser.java:9678) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParser.Expression(CCJSqlParser.java:9649) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParser.WhereClause(CCJSqlParser.java:9037) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParser.PlainSelect(CCJSqlParser.java:5667) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:5867) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:5516) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParser.Select(CCJSqlParser.java:5511) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParser.SingleStatement(CCJSqlParser.java:232) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:153) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatement(CCJSqlParserUtil.java:188) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:63) ~[jsqlparser-4.4.jar:na]
	at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:38) ~[jsqlparser-4.4.jar:na]
	at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserSingle(JsqlParserSupport.java:49) ~[mybatis-plus-extension-3.5.3.1.jar:3.5.3.1]
	... 160 common frames omitted

MyBatisPlus中in的源码如下

    protected ISqlSegment inExpression(Object[] values) {
        if (ArrayUtils.isEmpty(values)) {
            return () -> "()";
        }
        return () -> Arrays.stream(values).map(i -> formatParam(null, i))
            .collect(joining(StringPool.COMMA, StringPool.LEFT_BRACKET, StringPool.RIGHT_BRACKET));
    }

可以看到当数据为空的时候直接返回了一个“()”,解析到sql执行的时候就是

select * from crm_customer where user_id in ()

显然这样sql是无法解析的,因此在使用in传入集合参数的时候要判断是否为空。

标签:java,CCJSqlParser,parser,jar,jsqlparser,使用,MyBatisPlus,net
From: https://www.cnblogs.com/leepandar/p/17672415.html

相关文章

  • 如何使用UC网盘分享传输的内容
    UC网盘是一款由阿里巴巴旗下的UC浏览器推出的云存储服务,它可以让用户在不同的设备上方便地存储和管理文件,大文件分享助手,同时也支持文件的分享和传输功能。使用UC网盘分享内容的方法很简单,只需要几个步骤就可以完成。下面就来详细介绍一下使用UC网盘分享内容的步骤。打开UC浏览器......
  • ORA-28007:无法重新使用口令
    错误信息【汉】ORA-28007:无法重新使用口令【英】ORA-28007:thepasswordcannotbereused环境介绍操作系统数据库版本备注CentOS7Oracle11G报错在修改用户的密码时报错。原因报错的原因主要是有配置密码的profile文件,其主要是一些资源限制等参数。跟本次报错有关的参数是:PASSW......
  • hashcat 详细命令及使用
    一、常用-m,—hash-type=NUM哈希类别,其NUM值参考其帮助信息下面的哈希类别值,其值为数字。如果不指定m值则默认指md5,例如-m1800是sha512Linux加密。-a,–attack-mode=NUM攻击模式,其值参考后面对参数。“-a0”字典攻击,“-a1”组合攻击;“-a3”掩码攻击。-V......
  • el-dialog的js使用方式
    this.$confirm("提交后不允许编辑,是否继续提交?","提示",{confirmButtonText:"确定提交",cancelButtonText:"取消",type:"warning",}).then(()=>{......
  • kafka在工作中的使用
    @KafkaListener(topics={KafkaInitialConfig.TOPIC_RECHARGE_YTK},groupId=KafkaInitialConfig.GROUP_ID_STORE_BFF,containerFactory="kafkaListenerContainerFactory",autoStartup="${kafka.listener.autoStartup}")publicvoidre......
  • 使用全套开源工具构建 LLM 应用实战:在 Dify 调用 Baichuan 开源模型能力
    背景在当下开源大语言模型火热的背景下,有很大一部分开发者希望本地部署开源LLM,用于研究LLM或者是基于开源LLM构建自己的LLM应用。笔者也正在尝试通过开源社区的一系列相关优秀项目,通过本地化部署服务来构建自己的LLM应用。那么本地部署一个开源LLM来构建一个聊天应用需......
  • 【团队协作】都2022年了,前后端合作开发还不使用Apifox?
    文章目录前言一、Apifox介绍二、安装使用三、创建接口文档......
  • 使用css3给网页元素出场动画让页面动起来
    使用css3给网页元素出场动画让页面动起来一般情况下网页元素都是静态显示的,能不能做一个幻灯片那样增加个动画出场效果呢这里使用css实现简单效果css样式test.css*,*:after,*::before{ -moz-box-sizing:border-box; box-sizing:border-box; }body,h1,h2,h3,h4,h5,h......
  • 使用API调用获取商品数据的完整方案
    在电子商务应用程序中,商品详情接口是不可或缺的一部分。它用于从电商平台或自己的数据库中获取商品数据,并将其提供给应用程序的其他部分使用。本文将详细介绍如何设计一个完整的商品详情接口方案,其中包括使用API调用来获取商品数据的过程。我们将使用Python语言示例代码来阐述该过......
  • Java是一种广泛使用的面向对象编程语言
    Java是一种广泛使用的面向对象编程语言,具有以下特性:平台无关性:Java语言编写的程序可以在不同的操作系统和硬件平台上运行,因为Java语言通过Java虚拟机(JVM)实现了平台无关性。面向对象:Java是一种完全面向对象的编程语言,支持封装、继承和多态等面向对象的基本特性。强类型语言:Java是一......