一、在用mybatis框架编写实体类时尽可能用以下组合注解
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
1、@Data 会提供 get、set、hashCode 、toString方法
2、此时我们肯定喜欢用建造者模式方便创建对象@Builder 现在实体类有了全参构造
3、那么对象默认的无参构造就会消失。但是mybatis底层在对象映射时使用无参构造创建对象然后用set方法完成映射工作,所以还需要@NoArgsConstructor 此时全参构造又会消失。
4、但是建造者模式需要全参构造用来最终创建对象,所以还要加上@AllArgsConstructor 基本上就不会有问题了。
我们可以看下建造者模式最后的build方法
实体类
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
String name;
String address;
}
编译后的文件
public class Student {
String name;
String address;
//get、set 无参、有参省略
public static class StudentBuilder {
private String name;
private String address;
StudentBuilder() {
}
public Student.StudentBuilder name(String name) {
this.name = name;
return this;
}
public Student.StudentBuilder address(String address) {
this.address = address;
return this;
}
public Student build() {
return new Student(this.name, this.address);
}
public String toString() {
return "Student.StudentBuilder(name=" + this.name + ", address=" + this.address + ")";
}
}
}
可以看到调用全参来生成对象了。