当前位置: 首页 > news >正文

笔记25.9.14(QueryWrapper,Builder ,Stream流处理,forEach)

一,MyBatis-Plus的主要功能

        1,条件构造器查询

                1,QueryWrapper示例
public List<User> complexQuery() {QueryWrapper<User> wrapper = new QueryWrapper<>();// 等于wrapper.eq("age", 25);// 大于wrapper.gt("age", 18);// 模糊查询wrapper.like("name", "张");// 范围查询wrapper.between("age", 18, 30);// 排序wrapper.orderByDesc("create_time");// 分组wrapper.groupBy("age");return userMapper.selectList(wrapper);
}
                        2,LambdaQueryWrapper(类型安全)
public List<User> lambdaQuery() {LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();wrapper.eq(User::getAge, 25).like(User::getName, "张").orderByDesc(User::getCreateTime);return userMapper.selectList(wrapper);
}

2,乐观锁

@Version

@Data
@TableName("product")
public class Product {@TableIdprivate Long id;private String name;private Integer price;@Version // 乐观锁注解private Integer version;
}

3,逻辑删除

@Data
@TableName("user")
public class User {@TableIdprivate Long id;private String name;@TableLogic // 逻辑删除private Integer deleted;
}// 配置
mybatis-plus:global-config:db-config:logic-delete-value: 1 # 逻辑已删除值logic-not-delete-value: 0 # 逻辑未删除值

二,构建器模式(Builder Pattern)

1. 构建器模式基础概念

构建器模式是一种创建型设计模式,它允许你分步骤创建复杂对象,而不是通过一个庞大的构造函数。

// 传统方式 - 参数过多,难以维护
User user = new User("张三", 25, "zhangsan@email.com", "男", "北京", "13800138000");// 构建器模式 - 清晰易读
User user = User.builder().name("张三").age(25).email("zhangsan@email.com").gender("男").address("北京").phone("13800138000").build();

三. Stream流处理

1,什么是Stream?

Stream是Java 8引入的函数式编程特性,用于处理集合数据,支持链式操作。

List<String> names = Arrays.asList("张三", "李四", "王五", "赵六");// 传统方式
List<String> result = new ArrayList<>();
for (String name : names) {if (name.length() > 1) {result.add(name.toUpperCase());}
}// Stream方式
List<String> result = names.stream().filter(name -> name.length() > 1).map(String::toUpperCase).collect(Collectors.toList());

四,Java forEach详解

1. forEach基本概念

forEach是Java中用于遍历集合元素的方法,它接受一个Consumer函数式接口作为参数,对集合中的每个元素执行指定操作。

2. Iterable.forEach() - Java 8新特性

        基本使用示例

List<String> names = Arrays.asList("张三", "李四", "王五", "赵六");// 传统for-each循环
for (String name : names) {System.out.println(name);
}// forEach方法
names.forEach(name -> System.out.println(name));// 方法引用
names.forEach(System.out::println);// 使用自定义方法
names.forEach(this::printName);

3. 不同集合类型的forEach

List.forEach()

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);// Lambda表达式
numbers.forEach(num -> System.out.println("数字: " + num));// 方法引用
numbers.forEach(System.out::println);// 匿名内部类
numbers.forEach(new Consumer<Integer>() {@Overridepublic void accept(Integer num) {System.out.println("数字: " + num);}
});

Map.forEach()

Map<String, Integer> scores = new HashMap<>();
scores.put("张三", 85);
scores.put("李四", 92);
scores.put("王五", 78);// Map特有的forEach,接受BiConsumer
scores.forEach((name, score) -> {System.out.println(name + "的分数是: " + score);
});// 等价的传统方式
for (Map.Entry<String, Integer> entry : scores.entrySet()) {System.out.println(entry.getKey() + "的分数是: " + entry.getValue());
}

Stream.forEach()

List<String> names = Arrays.asList("张三", "李四", "王五");// Stream中的forEach
names.stream().filter(name -> name.length() > 1).forEach(System.out::println);

实际应用示例

数据处理和转换

@Data
class User {private String name;private Integer age;private String email;public User(String name, Integer age, String email) {this.name = name;this.age = age;this.email = email;}
}List<User> users = Arrays.asList(new User("张三", 25, "zhangsan@example.com"),new User("李四", 30, "lisi@example.com"),new User("王五", 35, "wangwu@example.com")
);// 打印所有用户信息
users.forEach(user -> {System.out.println("姓名: " + user.getName() + ", 年龄: " + user.getAge() + ", 邮箱: " + user.getEmail());
});// 发送邮件给所有用户
users.forEach(user -> sendEmail(user.getEmail(), "系统通知"));private void sendEmail(String email, String message) {System.out.println("发送邮件到: " + email + ", 内容: " + message);
}


文章转载自:

http://DpBtri3Y.byshd.cn
http://WQZFXFS3.byshd.cn
http://bQbN4GLT.byshd.cn
http://NEFw20p8.byshd.cn
http://qWX8UD2P.byshd.cn
http://niH5b9Tk.byshd.cn
http://bw80my6K.byshd.cn
http://aumLaczq.byshd.cn
http://f8FPo0Wy.byshd.cn
http://gGVmSY19.byshd.cn
http://7hSmCrFk.byshd.cn
http://x5UFtQ1H.byshd.cn
http://9nouNWZy.byshd.cn
http://3QBev1Wr.byshd.cn
http://ZEdEjoUb.byshd.cn
http://0kdwf3uI.byshd.cn
http://NWEu5LIO.byshd.cn
http://1xFxPvWg.byshd.cn
http://FvvpSjxo.byshd.cn
http://SxKCXmDc.byshd.cn
http://96KBm99S.byshd.cn
http://94TwGioc.byshd.cn
http://jM48VTQS.byshd.cn
http://6nkdM2hb.byshd.cn
http://KZargncq.byshd.cn
http://vFxfmxur.byshd.cn
http://sOw2m0CT.byshd.cn
http://hnhPbpLX.byshd.cn
http://DZfR5SD5.byshd.cn
http://hGGXZrGD.byshd.cn
http://www.dtcms.com/a/383657.html

相关文章:

  • 深入理解MySQL主从架构中的Seconds_Behind_Master指标
  • systemverilog如何解决不能使用变量索引来进行位选择的范围指定
  • 多语言编码Agent解决方案(1)-项目概述与架构
  • 【深度学习踩坑实录】从 Checkpoint 报错到 TrainingArguments 精通:QNLI 任务微调全流程复盘
  • 【愚公系列】《人工智能70年》019-语音识别的历史性突破(铲平技术高门槛)
  • webpack 配置文件中 mode 有哪些模式?
  • AI推理范式:从CoT到ReAct再到ToT的进化之路
  • webpack和Module Federation区别分析
  • Knockout.js Virtual Elements 详解
  • 【JavaSE五天速通|第三篇】常用API与日期类篇
  • JavaWeb-Session和ServletContext
  • HTML 编码规范
  • 深度学习(九):逻辑回归
  • 【LeetCode 每日一题】36. 有效的数独
  • 单表查询要点概述
  • 【Trans2025】计算机视觉|即插即用|WSC:即插即用!WSC模块,高光谱图像分类新SOTA!
  • Java面试小册(3)
  • 微服务项目测试接口一次成功一次失败解决办法
  • GPIO 之 EMIO 按键控制 LED 实验
  • centos安装 GNOME 桌面环境
  • 高并发投票功能设计
  • (B2B/工业/医疗行业)GEO优化服务商有哪些?哪家好?供应商推荐
  • unordered_map使用MFC的CString作为键值遇到C2056和C2064错误
  • MFC_Install_Create
  • 大数据知识框架思维导图(构造知识学习框架)
  • Spring Boot 集成第三方 API 时,常见的超时与重试机制设计
  • 设计模式——创建型模式
  • Nginx_Tomcat综合案例
  • Java常见类类型与区别详解:从实体类到异常类的全面指南
  • MOS管驱动栅极出现振铃现象