java执行 mybatisplus+lambda表达式 完成请求参数age为13,name为list<String> 参数值为长度不定的 如“张,王,李,赵”等,对于user 表中age为13 ,name like 的模糊匹配查询
时间: 2024-10-09 07:00:54 浏览: 25
在MyBatisPlus中,结合Lambda表达式和模糊匹配可以实现动态的SQL查询。假设我们有一个User实体类,包含age和name字段,我们可以创建一个`QueryWrapper`对象,使用`lambda expressions`来构建复杂的条件。例如,你想要查找年龄为13并且名字包含指定字符串的用户,可以这样做:
```java
List<String> names = Arrays.asList("张", "王", "李", "赵");
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 13); // 筛选age为13
wrapper.lambda().in("name", name -> names.contains(name)) // 使用lambda表达式,筛选名字在names列表中的
.or().like("name", "%{}%", String.join("%, %", names)); // 或者模糊匹配,这里用字符串连接每个name
List<User> users = userMapper.selectList(wrapper); // 执行查询
```
在这个例子中,`%`是一个通配符,用于表示任意字符。`String.join("%, %", names)`将names列表转换为字符串数组,每个元素之间插入`%, %`作为模糊匹配的分隔符。
相关问题
java List<Map<String, Object>> lambda表达式 查询
Lambda表达式可以用于Java 8中的List<Map<String, Object>>查询中。具体实现步骤如下:
1. 导入必要的包:
```
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
```
2. 在List<Map<String, Object>>中使用Lambda表达式进行查询。
例如,假设我们有如下的List<Map<String, Object>>:
```
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("name", "Alice");
map1.put("age", 20);
Map<String, Object> map2 = new HashMap<>();
map2.put("name", "Bob");
map2.put("age", 25);
list.add(map1);
list.add(map2);
```
我们想要查询年龄大于等于22的元素,可以使用Lambda表达式如下:
```
List<Map<String, Object>> result = list.stream()
.filter(m -> (int)m.get("age") >= 22)
.collect(Collectors.toList());
```
这里使用了filter()方法来过滤元素,只保留年龄大于等于22的元素,然后使用collect()方法将结果收集到一个新的List中。
最终的result结果为:
```
[{name=Bob, age=25}]
```
说明查询结果只包含年龄大于等于22的元素。
java8的lambda表达式,将List<entity> 转为 List<dto>
假设你有以下的实体类 Entity 和数据传输对象 DTO:
```java
class Entity {
private String name;
private int age;
// 省略 getter 和 setter 方法
}
class DTO {
private String name;
private int age;
public DTO(String name, int age) {
this.name = name;
this.age = age;
}
// 省略 getter 和 setter 方法
}
```
你可以使用 Java 8 的 Lambda 表达式将 List\<Entity\> 转换为 List\<DTO\>,示例代码如下:
```java
List<Entity> entityList = new ArrayList<>();
entityList.add(new Entity("Alice", 18));
entityList.add(new Entity("Bob", 20));
List<DTO> dtoList = entityList.stream()
.map(entity -> new DTO(entity.getName(), entity.getAge()))
.collect(Collectors.toList());
```
以上代码中,首先创建了一个 `List<Entity>` 对象 `entityList`,并向其中添加了两个实体对象。然后使用 `entityList.stream()` 方法将其转换为一个流对象,使用 `map` 方法将 `Entity` 对象映射为 `DTO` 对象,并使用 `collect` 方法将 `DTO` 对象收集到一个新的 `List<DTO>` 对象 `dtoList` 中。
值得注意的是,上述代码中使用了构造方法 `new DTO(entity.getName(), entity.getAge())` 来创建新的 `DTO` 对象,也可以使用其他方式来创建 `DTO` 对象,例如使用 `DTO` 对象的 `Builder` 模式或者静态工厂方法等。
阅读全文