四个常见注解
1、@Table
作用:建立实体类和数据库表之间的对应关系。
默认规则:实体类类名首字母小写作为表名,如 Employee -> employee 表
用法:在 @Table 注解的 name 属性中指定目标数据库的表名;
案例:
2、@Column
作用:建立实体类字段和数据库表字段之间的对应关系
默认规则:实体类字段,驼峰式命名,数据库表字段,使用"_" 区分各个单词;
用法:在 @Column 注解的 name 属性中指定目标字段的字段名
案例:
3、@Id
通用 Mapper 在执行 xxxByPrimaryKey(key) 方法时,有两种情况:
情况 1:没有使用 @Id 注解明确指定主键字段
SELECT emp_id,emp_name,emp_salary,emp_age FROM tabple_emp
WHERE emp_id = ? AND emp_name = ? AND emp_salary = ? AND emp_age = ?
之所以会生成上面的 where 子句是因为通用 Mapper 将实体类的所有字段都拿来放在一起作为联合主键。
情况 2:使用@Id 注解明确标记和数据库表中主键字段对应的实体类字段。
如:
SELECT emp_id,emp_name,emp_salary,emp_age FROM tabple_emp WHERE emp_id = ?
注意:如果是多个字段作为联合主键,需要在每个字段上面都加上 @Id 注解。
4、@GeneratedValue
作用:让通用 Mapper 在执行 insert 操作之后将数据库自动生成的主键值回写到实体类对象中。
自增主键用法(MySQL):
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer empId;
序列主键用法(Oracle)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator="select SEQ_ID.nextval from dual")
private Integer empId;
5、@Transient
一般实体类中字段和数据库表中字段一一对应的,但是也有很多情况会在实体类中增加一些额外的属性,这种情况,需要使用@Transient 注解告诉通用 Mapper 这不是表中的字段。
对于类中复杂对象,以及 Map、List 等属性不需要配置这个注解。
配置实例:
@Transient
private String otherThings; //非数据库字段
代码举例
import lombok.Data;
import javax.persistence.Id;
import javax.persistence.Table;
@Data
@Table(name = "user")
public class User {
@Id
private Integer id;
private String name;
private Integer age;
}