Spring JPA 注解映射关系、lombok

@Id

指定实体的主键。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。

@GeneratedValue

用于标注主键的生成策略,通过strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer对应identity,MySQL 对应 auto increment。
在javax.persistence.GenerationType中定义了以下几种可供选择的策略:

  • IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
  • AUTO: JPA自动选择合适的策略,是默认选项;
  • SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
  • TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Id
    private Integer id;@GeneratedValue(strategy=GenerationType.AUTO)
    @Id
    public Integer getId() {
        return id;
    }
    

@Column注解

用来标识实体类中属性与数据表中字段的对应关系,可置于属性的getter方法之前。

  • name:表中列的名称。默认为属性或字段名。
  • unique:该列是否为唯一键,默认为false。如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table标记中的
  • nullable:数据库列是否为空。默认为true
  • insertable:表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值。
  • updatable:表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值。
    • insertable和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。
  • columnDefinition:(大多数情况,几乎不用)表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。(也就是说,如果DB中表已经建好,该属性没有必要使用。)
  • table:表示当映射多个表时,指定表的表中的字段。默认值为主表的表名。
  • length:表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。
  • precision:十进制(精确数字)列的精度,当字段类型为double时,precision表示数值的总长度,
  • scale:小数点所占的位数。仅当使用十进制列时适用
    @Column(name = "id", length = 20, nullable = false)
    private int id;@Column(name = "id", length = 20, nullable = false)
    public int getId() {
        return id;
    }
    

@JoinTable

指定关联的映射

@JoinColumn

用来指定与所操作实体或实体集合相关联的数据库表中的列字段

@OneToOne(一对一)

@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "address_id")
private Address address;

@OneToMany(一对多)

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "department_id")
private List<Employee> employees;

@ManyToOne(多对一)

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "department_id")
private Department department;

@ManyToMany(多对多)


@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "tbl_employee_role", joinColumns = { @JoinColumn(name = "employee_id") }, inverseJoinColumns = {
@JoinColumn(name = "role_id") })
private List<Role> roles;

@OrderBy

// demo 表中id 升序排列
@OrderBy("id ASC")
private List<Demo> demoList;

lombok

大大提升代码开发效率

@Getter、@Setter

可以替代代码中的getter和setter方法

@ToString

对象的自我描述,实体类上注解,替代toString方法

@Getter
@Setter
public class Student {

    private String name;

    private int age;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor

  • @NoArgsConstructor:注解在类上,为类提供一个无参的构造方法。

    @NoArgsConstructor
    public class Student{
        private String name;
        
    }
     
    // 不使用注解
    public class Student{
        private String name;
     
        public Student(){
        }
    }
    
  • @AllArgsConstructor:为类提供一个全参的构造方法

    • 默认生成的方法是 public 的,如果要修改方法修饰符可以设置 AccessLevel 的值。
      @AllArgsConstructor(access = AccessLevel.PROTECTED)
      public class Student{
          private String name;
      }
       
      // 不使用注解
      public class Student{
          private String name;
       
          protected Student(String name){
              this.name = name;
          }
      }
      
  • @RequiredArgsConstructor:会生成构造方法(可能带参数也可能不带参数)

    • 如果带参数,这参数只能是以 final 修饰的未经初始化的字段或者是以 @NonNull 注解的未经初始化的字段。

    • 该注解还可以用 @RequiredArgsConstructor(staticName=“methodName”) 的形式生成一个指定名称的静态方法,返回一个调用相应的构造方法产生的对象

      // 使用注解
      @RequiredArgsConstructor(staticName = "hangge")
      public class Shape {
          private int x;
          @NonNull
          private double y;
          @NonNull
          private String name;
      }
       
      // 不使用注解
      public class Shape {
          private int x;
          private double y;
          private String name;
       
          public Shape(double y, String name){
              this.y = y;
              this.name = name;
          }
       
          public static Shape hangge(double y, String name){
              return new Shape(y, name);
          }
      }
      

@Data

类加了@Data注解,所有Java代码中不需要生成getters and setters,而在编译的时候会自动生成getters and setters

@Builder

为类生成相对略微复杂的构建器API。@Builder可以让你以下面显示的那样调用你的代码,来初始化你的实例对象:

Student.builder()
               .sno( "001" )
               .sname( "admin" )
               .sage( 18 )
               .sphone( "110" )
               .build();

@Slf4j、@Log4j2、@CommonsLog

  • @Slf4j:日志输出的,一般会在项目每个类的开头加入该注解

    节省如下代码
    private final Logger logger = LoggerFactory.getLogger(当前类名.class);

  • @Log4j2:日志工具
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值