mp对象集合in查询

简介: mp对象集合in查询

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

分享自己写的一个函数:

@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());
}


得到:

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查询

当前的源码如下:

@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

相关文章
|
12月前
|
安全 Java
Map接口映射集合
Map接口映射集合
|
3月前
|
存储 语音技术 索引
语音识别,列表的定义语法,列表[],列表的下标索引,从列表中取出来特定的数据,name[0]就是索引,反向索引,头部是-1,my[1][1],嵌套列表使用, 列表常用操作, 函数一样,需引入
语音识别,列表的定义语法,列表[],列表的下标索引,从列表中取出来特定的数据,name[0]就是索引,反向索引,头部是-1,my[1][1],嵌套列表使用, 列表常用操作, 函数一样,需引入
|
3月前
|
前端开发
let array = [{id:‘001‘,name:‘小新‘,age:5},{ id:‘002‘,name:‘小葵‘]这样数据如何遍历,拿到其中一个值,数组中装对象如何获取其中一个固定的值
let array = [{id:‘001‘,name:‘小新‘,age:5},{ id:‘002‘,name:‘小葵‘]这样数据如何遍历,拿到其中一个值,数组中装对象如何获取其中一个固定的值
List 集合通过创建stream 流的方式转成map集合
List 集合通过创建stream 流的方式转成map集合
81 0
|
11月前
jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法
jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法
151 5
|
5月前
Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等12种最常用方法
Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等12种最常用方法
109 0
|
10月前
三大集合--Map集合 -- 详细完整加案例分析
三大集合--Map集合 -- 详细完整加案例分析
|
人工智能 Java 机器人
实现Map批量赋值,我只需24秒搞定!
函数的功能是将一组键值对批量赋值给Map中的键。在Java中,通常使用Map的put方法逐个将键值对赋值给Map,但在某些场景下,可能需要一次性将多个键值对赋值给Map。
|
Java
java8 List根据对象中属性去重-多属性去重-去除重复字符串
java8 List根据对象中属性去重-多属性去重-去除重复字符串
851 0
|
数据库
List中对象去重和List 根据对象的属性去重
有这么一个需求,需要将从数据库查出来的数据进行去重。
95 0