Lombok创建对象+动态sql中的foreach标签

1.Lombok创建对象

 OrderSubmitVO orderSubmitVO = OrderSubmitVO.builder()
                .id(orders.getId())
                .orderTime(orders.getOrderTime())
                .orderNumber(orders.getNumber())
                .orderAmount(orders.getAmount())
                .build();

**这段代码是Java中使用Lombok库和它的@Builder注解来创建一个OrderSubmitVO对象的示例。**我会为你逐步解释这段代码:

Lombok库:Lombok是一个Java库,它通过注解自动添加getter、setter、equals、hashCode、toString等方法,从而简化Java类的编写。其中,@Builder注解允许你使用“构建者模式”来创建一个对象。
OrderSubmitVO:这是一个Java类,它可能是一个数据传输对象(DTO),用于在服务的不同层之间传递数据。这个类有一个@Builder注解(或它可能是从某个具有此注解的父类或接口继承的)。
OrderSubmitVO.builder():通过调用静态的builder()方法,你开始了一个新的OrderSubmitVO对象的构建过程。这个方法会返回一个OrderSubmitVO.OrderSubmitVOBuilder对象(这通常是Lombok自动生成的内部类),你可以使用这个构建者对象来设置OrderSubmitVO的各个属性。
链式调用:在构建者对象上,你可以使用链式调用来设置多个属性。每个设置方法(如.id(), .orderTime(), 等)都会返回构建者对象本身,所以你可以连续调用它们,而不需要在每次调用后都重新获取构建者对象。
.id(orders.getId()):设置OrderSubmitVO的id属性,其值来自orders对象的getId()方法。
.orderTime(orders.getOrderTime()):设置OrderSubmitVO的orderTime属性,其值来自orders对象的getOrderTime()方法。
类似地,.orderNumber(orders.getNumber())和.orderAmount(orders.getAmount())分别设置orderNumber和orderAmount属性。
.build():最后,调用build()方法来完成对象的构建并返回一个新的OrderSubmitVO对象。这个对象具有你在链式调用中设置的所有属性值。
总之,这段代码的目的是从orders对象中提取数据,并使用这些数据来创建一个新的OrderSubmitVO对象。

使用Lombok的@Builder注解以及构建者模式(Builder Pattern)来创建对象有多个优点,尤其是在复杂的对象创建场景中:

代码简洁性:使用构建者模式可以避免冗长的构造函数,特别是当对象具有多个参数时。传统的构造函数可能会导致参数列表变得很长且难以管理。而使用构建者模式,你可以使用链式调用(fluent API)来设置对象的各个属性,使得代码更加易读和简洁。
可读性:链式调用允许你以一种更加直观的方式设置对象的属性。每个调用都明确地指出了正在设置的属性及其值,这使得代码更具可读性。
可选参数:在构建者模式中,属性的设置是可选的。这意味着你可以只设置你关心的属性,而忽略其他属性。这在处理具有大量可选属性的对象时特别有用。
灵活性:构建者模式允许你在对象创建过程中进行更复杂的操作,比如验证属性值的有效性或在设置属性时执行其他逻辑。这些操作可以在构建者方法的实现中进行,而无需修改对象本身的构造函数或setter方法。
可维护性:当对象的属性发生变化时(例如,添加新属性或删除现有属性),使用构建者模式通常比修改构造函数或setter方法更容易。你只需要更新构建者类,而无需修改使用对象的代码。
线程安全:虽然Lombok的@Builder注解本身并不直接提供线程安全性,但构建者模式通常可以更容易地实现线程安全的对象创建。你可以通过确保每个线程都使用其自己的构建者实例来避免线程间的竞态条件。
可测试性:构建者模式允许你更容易地为对象的创建编写测试。你可以创建一个构建者实例,并使用它来设置不同的属性值组合,然后验证生成的对象是否符合预期。
总之,使用Lombok的@Builder注解和构建者模式来创建对象可以提高代码的简洁性、可读性、灵活性和可维护性,同时也有助于实现线程安全和可测试性。这些优点使得构建者模式成为处理具有多个属性的复杂对象时的常用技术。

2.xml文件中的foreach标签

<insert id="insertBatch">
        insert into order_detail (name, image, order_id, dish_id, setmeal_id, dish_flavor,number, amount)
        values
        <foreach collection="orderDetailList" item="od" separator=",">
            (#{od.name},#{od.image},#{od.orderId},#{od.dishId},#{od.setmealId},
             #{od.dishFlavor},#{od.number},#{od.amount})
        </foreach>
    </insert>

这段 MyBatis 的 XML 映射文件中的 标签是用于批量插入 order_detail 表中多行数据的。它使用了 标签来迭代 orderDetailList 集合,并为集合中的每个元素生成一个插入语句的值部分。

下面是这段代码的详细解释:

<insert id="insertBatch">:定义一个名为 insertBatch 的插入操作。
insert into order_detail (name, image, order_id, dish_id, setmeal_id, dish_flavor,number, amount):指定要插入的表(order_detail)和要插入的字段(name, image, order_id, dish_id, setmeal_id, dish_flavor, number, amount)。
<foreach collection="orderDetailList" item="od" separator=",">:使用 标签迭代 orderDetailList 集合。collection 属性指定了要迭代的集合名称,item 属性指定了每次迭代时的元素变量名(这里为 od),separator 属性指定了每次迭代结果之间的分隔符(这里为逗号 ,)。
在 标签内部,为每个元素生成了一个插入语句的值部分,使用了 MyBatis 的动态 SQL 语法 #{od.propertyName} 来引用元素对象的属性。这里的 propertyName 是 od 对象的属性名,如 name, image, orderId, dishId, setmealId, dishFlavor, number, amount。
最后,整个 标签的内容会被插入到 values 关键字之后,形成一个完整的 SQL 插入语句。
这样,当调用这个 insertBatch 插入操作时,MyBatis 会将 orderDetailList 集合中的每个元素作为一行数据插入到 order_detail 表中。

请注意,这个 SQL 语句的执行效率和数据库的性能有关。对于大量数据的批量插入,可能需要考虑数据库的性能优化措施,如使用事务、调整批处理大小等。此外,还需要确保 orderDetailList 集合中的每个元素都正确设置了属性值,以避免插入空值或无效数据。

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北国137

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值