Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >mp对象集合in查询

mp对象集合in查询

作者头像
阿超
发布于 2023-02-28 04:47:40
发布于 2023-02-28 04:47:40
64500
代码可运行
举报
文章被收录于专栏:快乐阿超快乐阿超
运行总次数:0
代码可运行

太重视名誉正是一般人最常犯的错误——叔本华

分享自己写的一个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Test
void testWhereRelation() {
    LambdaQueryWrapper<UserInfo> wrapper = Database.inList(Wrappers.lambdaQuery(UserInfo.class),
            Lists.of(new UserInfo() {{
                         setName("Jon");
                     }},
                    new UserInfo() {{
                        setEmail("test2@baomidou.com");
                    }},
                    new UserInfo() {{
                        setName("Tom");
                    }}));
    List<UserInfo> userInfos = Database.list(wrapper);
    Assertions.assertEquals("Jon", userInfos.get(0).getName());
    Assertions.assertEquals("test2@baomidou.com", userInfos.get(1).getEmail());
    Assertions.assertEquals("Tom", userInfos.get(2).getName());
}

得到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2023-02-27 21:50:34.222 DEBUG 5956 --- [           main] i.g.v.s.p.m.m.d.U.selectList             : ==>  Preparing: SELECT id,name,age,email,version,gmt_deleted FROM user_info WHERE gmt_deleted='2001-01-01 00:00:00' AND ((name IN (?,?) OR email IN (?)))
2023-02-27 21:50:34.236 DEBUG 5956 --- [           main] i.g.v.s.p.m.m.d.U.selectList             : ==> Parameters: Jon(String), Tom(String), test2@baomidou.com(String)

简单说明一下:此处是将入参的list获取到类型,根据表字段和list进行遍历,获取lambda进行取值,然后进行in以及or查询

当前的源码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SuppressWarnings("unchecked")
public static <T> LambdaQueryWrapper<T> inList(LambdaQueryWrapper<T> wrapper, List<T> dataList) {
    if (Lists.isEmpty(dataList)) {
        return wrapper;
    }
    final Class<T> entityClass = getEntityClass(dataList);
    final List<TableFieldInfo> fieldList = TableInfoHelper.getTableInfo(entityClass).getFieldList();
    wrapper.nested(w -> Steam.of(fieldList).forEachIdx((tableField, idx) -> {
        SFunction<T, ?> getterFunction = (SFunction<T, ?>) LAMBDA_GETTER_CACHE.computeIfAbsent(
                entityClass + StringPool.AT + tableField.getProperty(),
                property -> {
                    Method getter = ReflectHelper.getMethod(entityClass,
                            BeanHelper.GETTER_PREFIX +
                                    tableField.getProperty().substring(0, 1).toUpperCase(Locale.ROOT) +
                                    tableField.getProperty().substring(1));
                    return LambdaHelper.revert(SFunction.class, getter);
                });
        final List<?> list = Steam.of(dataList).map(getterFunction).nonNull().toList();
        if (idx != 0) {
            w.or();
        }
        w.in(Lists.isNotEmpty(list), getterFunction, list);
    }));
    return wrapper;
}

完整代码:https://gitee.com/VampireAchao/stream-query/blob/master/stream-plugin/stream-plugin-mybatis-plus/src/main/java/io/github/vampireachao/stream/plugin/mybatisplus/Database.java

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
mybatis-plus随机查询工具类
这里的USER_MAPPER我们可以使用任意一个mapper,我这里使用的是静态注入的方式
阿超
2022/08/16
1.5K0
mybatis-plus随机查询工具类
mp wrapper小技巧
别让你的舌头超越你的思想。——第欧根尼 对于mp的wrapper,直接使用nested+or是可以正确执行的 例如: Db.list(Wrappers.lambdaQuery(UserInfo.class).or().eq(UserInfo::getName, "Jon")); 生成 2023-04-13 22:39:54.858 DEBUG 20668 --- [ main] o.d.s.s.p.m.m.UserInfoMapper.selectList : ==> Prepa
阿超
2023/04/17
2590
Mybatis-plus常用API全套教程,看完没有不懂的
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)整理了一份272页MybatisPDF文档
程序员白楠楠
2021/01/19
7220
stream-query
弄了好几天,终于成功上传到maven中央仓库了 使用方式: <dependency> <groupId>io.github.vampireachao</groupId> <artifactId>stream-plugin-mybatis-plus</artifactId> <version>1.0.5</version> </dependency> <dependency> <groupId>io.github.vampireachao</groupId> <arti
阿超
2022/08/21
6910
filterTree递归树过滤实现
二人同心,其利断金;同心之言,其臭如兰——《周易·系辞上》 引入依赖: <!-- https://search.maven.org/artifact/io.github.vampireachao/stream-query --> <dependency> <groupId>io.github.vampireachao</groupId> <artifactId>stream-core</artifactId> <version>${stream-query-version}</
阿超
2022/11/18
3980
mp方法注入支持typeHandler
#{et.name,typeHandler=org.dromara.streamquery.stream.plugin.mybatisplus.JsonFieldHandlerTest$JsonFieldHandler} 即可直接指定typeHandler
阿超
2023/06/23
2520
批量分页
今天分享一个装一个分批分页,传入页码、分页条数,然后查询分页条数+1条数据,这里的+1是为了判断还有下一页数据,然后查询到后,再按照传入的lambda条件筛选,筛选完后的数据添加进集合,添加到集合后如果满足当前分页所需条数,就返回数据
阿超
2024/01/01
1680
mp自定义sql注入
以mysql语法INSERT INTO user_info (name,age,email) VALUES ( ?,?,? ),( ?,?,? )举例: 首先注入自定义策略 package io.gi
阿超
2022/08/21
2900
关联更新封装(三)
目前仍然处于完善中,所以还没有集成进stream-query,临时放到另一个仓库里
阿超
2023/03/20
1580
关联表更新封装
凭自己的本事和正当手段挣来的钱财,可以使我们赢得道义和幸福——阿基兰 分享一个关联更新函数 package com.ruben.simplestreamquery.util; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.ruben.simplestreamquery.pojo.bo.RelationBO; import io.g
阿超
2023/03/16
1.2K0
stream实现递归封装
分享一个封装的树处理,源码在这:https://gitee.com/VampireAchao/stream-query
阿超
2022/09/23
2650
spring获取AliasFor增强的注解
此处是关于issue:https://gitee.com/dromara/stream-query/issues/I7BSNV
阿超
2023/06/23
2270
​MyBatis-plus 从入门到入土
MyBatis-plus 是一款 Mybatis 增强工具,用于简化开发,提高效率。下文使用缩写 mp 来简化表示 MyBatis-plus,本文主要介绍 mp 搭配 Spring Boot 的使用。
Java旅途
2021/06/08
1.7K0
Mybatis-Plus条件构造器
排序:ORDER BY 字段, … DESC 例: orderByDesc("id", "name")—>order by id DESC,name DESC
别团等shy哥发育
2023/02/25
1.2K0
Mybatis-Plus条件构造器
【MyBatis-plus】条件构造器详解
以下出现的第一个入参boolean condition表示该条件是否加入最后生成的SQL中,例如:
JavaEdge
2021/12/07
1.8K0
【MyBatis-plus】条件构造器详解
肝九千字长文 | MyBatis-Plus 码之重器 lambda 表达式使用指南,开发效率瞬间提升80%
现在越来越流行基于 SpringBoot 开发 Web 应用,其中利用 Mybatis 作为数据库 CRUD 操作已成为主流。楼主以 MySQL 为例,总结了九大类使用 Mybatis 操作数据库 SQL 小技巧分享给大家。
猿芯
2021/05/27
2.6K0
肝九千字长文 | MyBatis-Plus 码之重器 lambda 表达式使用指南,开发效率瞬间提升80%
一篇文章带你掌握MyBatis简化框架——MyBatisPlus
类似于我们所学习的SpringBoot框架用于简化Spring开发,我们的国人大大也开发了一款MyBatisPlus框架用来简化MyBatis开发
秋落雨微凉
2022/10/25
7050
一篇文章带你掌握MyBatis简化框架——MyBatisPlus
进阶!MyBatis-Plus(基于 Springboot 演示)
这一篇从一个入门的基本体验介绍,再到对于 CRUD 的一个详细介绍,在介绍过程中将涉及到的一些问题,例如逐渐策略,自动填充,乐观锁等内容说了一下,只选了一些重要的内容,还有一些没提及到,具体可以参考官网,简单的看完,其实会发现,如果遇到单表的 CRUD ,直接用 MP 肯定舒服,如果写多表,还是用 Mybatis 多点,毕竟直接写 SQL 会直观一点,MP 给我的感觉,就是方法封装了很多,还有一些算比较是用的插件,但是可读性会稍微差一点,不过个人有个人的看法哇
BWH_Steven
2020/10/10
6580
Mybatis-Plus常用API教程,看这一篇就够了
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)。
码神联盟
2021/11/10
9811
Mybatis-Plus常用API教程,看这一篇就够了
MyBatis-Plus(实用篇)
创建MyMetaObjectHandler配置类,实现MetaObjectHandler接口
冬天vs不冷
2025/01/21
4320
MyBatis-Plus(实用篇)
相关推荐
mybatis-plus随机查询工具类
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验