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”,joinColumns=@JoinColumn(name=“role_id”),inverseJoinColumns=@JoinColumn(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;
Projection (投影映射)
/**
 * 使用spring data jpa 的 Projection (投影映射)
 * 该部分是很有趣的一部分,简单容易操作, Projection 是要解决什么问题呢?
 * <p>
 * 当我们使用 spring data jpa 查询数据的时候,有时候不需要返回所有字段的数据,我们只需要个别字段数据,这样使用 Projection 也是不错的选择
 */
public interface StudentProjection {
    String getName();

    Integer getAge();

    @Value("#{target.name+'and age is'+target.age}")
    String getName2();
}
jackjson

@JsonManagedReference 放弃维护 只读 反序列化有数据不忽略
@JsonBackReference 维护的一方 只写 序列化的时候忽略
@JsonIgnoreProperties(value = {“age”}) 反序列化和序列化都忽略

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值