@NoArgsConstructor 与@EqualsAndHashCode(callSuper = false) 的区别
时间: 2023-10-26 20:33:05 浏览: 46
`@NoArgsConstructor` 和 `@EqualsAndHashCode(callSuper = false)` 是两个不同的注解,用于不同的目的。
`@NoArgsConstructor` 是 Lombok 提供的注解,用于自动生成一个无参构造方法。当一个类没有显式定义构造方法时,Java 编译器会自动生成一个默认的无参构造方法。但是如果类中定义了有参构造方法,Java 编译器就不会自动生成无参构造方法了。使用 `@NoArgsConstructor` 注解可以让 Lombok 自动生成一个无参构造方法,无需手动编写。
`@EqualsAndHashCode(callSuper = false)` 是 Lombok 提供的注解,用于自动生成 `equals()` 和 `hashCode()` 方法。该注解的参数 `callSuper` 默认为 `false`,表示不调用父类的 `equals()` 和 `hashCode()` 方法。如果需要调用父类的 `equals()` 和 `hashCode()` 方法,可以将参数设置为 `true`。
因此,`@NoArgsConstructor` 和 `@EqualsAndHashCode(callSuper = false)` 的作用是不同的,前者用于生成无参构造方法,后者用于生成 `equals()` 和 `hashCode()` 方法,并且可以控制是否调用父类的方法。
相关问题
这是query类 @Data @SuperBuilder @AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode(callSuper = false) public class WmsInterOrderQuery extends BasePage { private Long id; //入库单号 private String interOrderNo; private String[] dateRange; } dateRange代表入库时间:interTime和出库时间:outTime, 需求:查询最新入库订单, 用mybatis-plus写,不要写mapper和sql
可以尝试使用 Mybatis-Plus 提供的 LambdaQueryWrapper 来实现这个需求。具体代码如下:
```java
public WmsInterOrderQuery getLatestInterOrder() {
LambdaQueryWrapper<WmsInterOrderQuery> wrapper = new LambdaQueryWrapper<>();
wrapper.select(WmsInterOrderQuery::getId, WmsInterOrderQuery::getInterOrderNo)
.orderByDesc(WmsInterOrderQuery::getId)
.last("LIMIT 1");
return wmsInterOrderQueryMapper.selectOne(wrapper);
}
```
其中,LambdaQueryWrapper 用于构建查询条件,select 方法用于指定查询的字段,orderByDesc 方法用于按照 id 字段降序排序,last 方法用于指定查询的数量为 1。最后,通过 selectOne 方法执行查询并返回结果。需要注意的是,这里的 wmsInterOrderQueryMapper 应该是 WmsInterOrderQuery 对应的 Mapper 接口,你可以根据自己的情况进行更改。
@NoArgsConstructor(force = true) 和@NoArgsConstructor 的区别
@NoArgsConstructor(force = true) 和@NoArgsConstructor 的区别在于是否强制生成无参构造方法。
@NoArgsConstructor(force = true) 声明在类上时,表示强制生成一个无参构造方法,无论类中是否有其他构造方法。
@NoArgsConstructor 声明在类上时,表示如果类中没有显式定义其他构造方法,则会生成一个默认的无参构造方法。如果类中已经有了其他构造方法,则不再自动生成无参构造方法。
总结来说,@NoArgsConstructor(force = true) 强制生成无参构造方法,而@NoArgsConstructor 只有在类中没有其他构造方法时才生成无参构造方法。