欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JPA 学习

程序员文章站 2022-03-02 15:23:07
...

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;
多表查询学习

join

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”}) 反序列化和序列化都忽略