基本注解
注解都是import javax.persistence 包下的
1.@Entity 在实体类上标此注解说明是jpa实体类
2.@Table(name=“表名”)类和数据库表名的关联
3.@Id 主键 主键生成策略 @GeneratedValue(strategy=GenerationType.AUTO)
- IDENTITY:数据库id自动增长的方式
- AUTO:jpa自动选择合适的策略
- SEQUENCE:通过序列产生
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long accountId;
@GenericGenerator(
name = "cargoCategorySequenceGenerator",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters ={@Parameter(name = "sequence_name", value = "cargo_categorys_seq"),
@Parameter(name = "initial_value", value = "1"),
@Parameter(name = "increment_size", value = "1")
})
@GeneratedValue(generator = "cargoCategorySequenceGenerator")
private Integer cargoCategoryId;
//两种BigDecimal响应json数据含有.00的方式设置
@ApiModelProperty("账户余额")
@JsonSerialize(using= ToStringSerializer.class)
@Column(precision = 19, scale = 2)
private BigDecimal account;
@ApiModelProperty("账户返利")
@JsonFormat(shape = JsonFormat.Shape.STRING)
@Column(precision = 15, scale = 2)
private BigDecimal rebate;
4.@Column 字段和属性关联
缓存
一级缓存 session级别
二级缓存 sessionFactory 级别(多session共享)
关联关系
①使用双向一对多关联,不使用单向一对多
②表字段要少,表关联不要怕多,有二级缓存撑腰,设计表尽量达到第三方式
③组合关系集合使用list(顺序,重复),多对多集合使用set
④配置对象二级缓存,不使用集合二级缓存,如果使用了集合二级缓存,集合里面的对象也必须二级缓存;查询缓存(jpql查询),没有查询条件才使用查询缓存
⑤不用一对一,用多对一取代(不要使用共享主键一对一,使用唯一外键一对一)
⑥灵活使用单向多对一关联
1.一对一
2.一对多单向关联
3.多对一单向关联
4.一对多双向
4.多对多单方维护
4.多对多双向关联(开发中使用会造成递归式的数据产生) 不能用
多对多时最好用
// 用户和角色是多对多的关系,上一种查询的时候会循环查询,有问题
class User{
@ManyToMany(cascade = CascadeType.REFRESH,fetch = FetchType.EAGER)
@JoinTable(name = "user_has_role",
joinColumns =@JoinColumn(name = "user_id",referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "role_id",referencedColumnName = "id"))
private Set<SysRole> sysRoles=new HashSet<>();
}
class Roles{
@ManyToMany(mappedBy = "sysRoles")
private Set<SysUser> users=new HashSet<>();
}