JPA 学习
文章目录
AuditingEntityListener AuditorAware EnableJpaAuditing
@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy
说明
当实体类insert或者save的时候会自动填充 上面的几个值
LastModifiedBy CreatedBy 会根据AuditorAware实现类来决定 怎么赋值
@MappedSuperclass 用在父类上 防止生成Base表
japrespository
Respository-CrudRespository-PagingAndSortingRespository–JpaRespository
JpaSpecificationExcutor
@PersistenceContext(name=“entityManagerFactory”)
EntityManager em
方法命名规则条件查询
@query 注解sql查询 jpql
查询 select
@Modifying
更新 update
@Transactional 事务
@Rollback(false)
find
find属性 默认做相等判断
find属性Is
find属性Equal
find属性Like
一对一
//cascade=CascadeType.PERSIST 开启级联操作
@OneToOne(cascade=CascadeType.PERSIST)
//维护一个外键
@JoinColumn(name=“roles_id”)
private Roles roles
@OntToOne(mappedBy=“roles”)
private Users users
一对多
//cascade=CascadeType.PERSIST 开启级联操作
@ManyToOne(cascade=CascadeType.PERSIST)
//维护一个外键
@JoinColumn(name=“roles_id”)
private Roles roles
@OneToMany(mappedBy=“roles”)
private Set users = new HashSet<>()
多对多
@ManyToMany(cascade=CascadeType.PERSIST,fetch=“FetchType.EAGER”)
//@JoinTable:配置中间表信息
//joinColumns:建立当前表在中间表中的外键字段
@JoinTable(name=“t_roles_menus”,[email protected](name=“role_id”),[email protected](name=“menu_id”))
private Set menus = new HashSet<>();
@ManyToMany(mappedBy=“menus”)
private Set roles = new HashSet<>();
查询前6个
findTop6By…
其他学习
mappedby
只有 @OneToOne, @OneToMany, @ManyToMany上才有 mappedBy 属性,@ManyToOne不存在该属性。
该属性的作用:
设置关联关系。单向关联关系不需要设置,双向关系必须设置,避免双方都建立外键字段。
对于 一对多 的关系,外键总是建立在多的一方(用到@JoinColumn),而 mappedBy 存在相反的一方。
多对多的关系 推荐在被动的一方放弃维护
维护的一方set可以插入数据,放弃维护的一方不可以
用到@JoinColumn可以使用setXXX插入数据
将 “一” 的一方称为 :主表。
将 “多” 的一方称为 :从表。
使用 @JoinColumn
定义外键(在从表上定义,name指的是 外键名(类名+id(主键),本表中的一个字段最好自己创建),
referencedColumnName 默认指向另外一个表的主键,如果不是就需要该字段指定其他表字段)
一主多从,从维护(可以set),维护用再join上
//OrderItem
@Column(name = "id_goods", columnDefinition = "BIGINT COMMENT '商品id'")
private Long idGoods;
@JoinColumn(name = "id_goods", insertable = false, updatable = false, foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))
@ManyToOne(fetch = FetchType.LAZY)
private Goods goods;
//Order
@Column(name="id_user",columnDefinition = "BIGINT COMMENT '用户id'")
private Long idUser;
@JoinColumn(name="id_user", referencedColumnName="id",insertable = false, updatable = false,foreignKey = @ForeignKey(name="none",value = ConstraintMode.NO_CONSTRAINT))
@ManyToOne(fetch = FetchType.LAZY)
private ShopUser user;
//Order
@OneToMany(cascade = {CascadeType.ALL})
@JoinColumn(name = "id_order")
@org.hibernate.annotations.ForeignKey(name="none")
private List<OrderItem> items;
多表查询学习
POJO (DO DTO VO)
POJO Plain Ordinary Java Object
POJO专指只有setter/getter/toString的简单类,包括DO/DTO/BO/VO等
DO Data Object
DTO Data Transfer Object
VO View Object
常用注释
@Column(columnDefinition = "BIGINT COMMENT '栏目id'")
@NotNull(message = "栏目不能为空")
private Long idChannel;
@Column(columnDefinition = "VARCHAR(128) COMMENT '标题'")
@NotBlank(message = "标题不能为空")
private String title;
@Column(columnDefinition = "TEXT COMMENT '内容'")
@NotBlank(message = "内容不能为空")
private String content;
@Column(columnDefinition = "VARCHAR(64) COMMENT '作者'")
private String author
@Column(columnDefinition = "VARCHAR(32) COMMENT '电子邮箱'")
@NotBlank(message = "电子邮箱不能为空")
private String email;
@Column(name = "type", columnDefinition = "VARCHAR(32) COMMENT '消息类型,0:短信,1:邮件'")
private Integer type;
@Column(name = "cfg_name", columnDefinition = "VARCHAR(256) COMMENT '参数名'")
private String cfgName;
@Column(columnDefinition = "INT COMMENT '顺序'", nullable = false)
private Integer num;
@Column(columnDefinition = "tinyint COMMENT '是否隐藏'")
private Boolean hidden = false;
@Column(name = "modify_time", columnDefinition = "DATETIME COMMENT '最后更新时间'")
private Date modifyTime;
jackjson
@JsonManagedReference 放弃维护 只读 反序列化有数据不忽略
@JsonBackReference 维护的一方 只写 序列化的时候忽略
@JsonIgnoreProperties(value = {“age”}) 反序列化和序列化都忽略
上一篇: 基于vue element-ui扩展组件库之(1)搭建框架
下一篇: JPA(学习)