springboot jpa使用小结

springboot jpa使用小结

实体类注解

  • @Entity(name="表名")
  • @Id+@GeneratedValue 主键
  • @Column(name = "create_time", columnDefinition = " datetime(0) NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'") 指定列名、列类型、列描述
  • @Transient 该属性不是表中字段
  • @JsonInclude(JsonInclude.Include.NON_NULL) 空属性不映射到json
  • @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) 字段不映射到json

一对多

比如一个用户多个一行卡,user表中:

    @OneToMany(mappedBy = "fid", fetch = FetchType.EAGER)
    private List<Card> data;

fid是card表中的外键。fetch涉及到懒加载等方面的知识,遇错自明。

排序

    xx.findByPersonOrderByCreateTimeDesc(String person);//需要在repository中定义
    Sort sort = new Sort(Sort.Direction.DESC, "id");
    xxx.findAll(sort);//不需要再repository中定义就可以用

自定义sql

普通查询:

    @Query(value = "select * from xxx order by id desc limit 1", nativeQuery = true)

查询条件为集合

    @Query(value = "select * from xxx where id in ?1", nativeQuery = true)
    List<Xxx> findByIdList(List<Integer> list);

修改表记录:

    @Query(value = "UPDATE xxx SET x = ?1 WHERE y = ?2", nativeQuery = true)
    @Modifying
    void updateByLayers(String x, String y);//注意调用时要加事务注解@Transactional

批量查询:

    @Query(value = "SELECT id,create_time FROM Xxx WHERE id IN ?1", nativeQuery = true)
    List<Xxx> findXxxByIds(List<Integer> idList);

批量插入

    for(X x:list){
        xRepository.save(x);
    }

好吧,你看出来了,就是一个循环插入罢了,哈哈。

注意坑

  • repository中自定义方法,如果是修改数据库数据的,要加@Modifying注解,然后后面调用时最好加上@Transactional,不过具体回滚操作倒是看情况,一般简单的不用自己写。
  • hibernate.hbm2ddl.auto=createcreate每次都会删表重建,所以就别奇怪怎么数据丢了,一般用update,这样只会创建新增的表或者修改的字段,不容易丢数据。
  • hibernate.dialect方言也很重要,不过问某度就行了,出错了继续问,容易解决。
  • serverTimezone=GMT%2b8如果发现时间有问题,就在连接数据库的url后面加上这个,别问为什么是2b%,最多允许你改成大写的B。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值