springDataJpa使用2021-06-29

实体类注解:

@Data
用途:可自己生成getset方法(本地使用需要使用下载lombok插件)

@Entity
用途:表名这是一个Entity类

@Table(name = “数据库表名”)
用途:对应数据库表名

属性字段注解:

@Id
用途:声明这是主键id

@GeneratedValue(stratefy=GenerationType.IDENTITY)
用途:设置自增策略为自动

@Column
用途:包含长短、表结构中对应的列名等等。

使用方法:
1.创建repository.StudentRepository.interface extends JpaRepository<对应的类, 类中主键的类型>

2.JpaRepository接口会定制生成简单的怎删改查方法,可直接调用以下方法;

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
 
package org.springframework.data.jpa.repository;
 
import java.util.List;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.QueryByExampleExecutor;
 
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List<T> findAll();
 
    List<T> findAll(Sort var1);
 
    List<T> findAllById(Iterable<ID> var1);
 
    <S extends T> List<S> saveAll(Iterable<S> var1);
 
    void flush();
 
    <S extends T> S saveAndFlush(S var1);
 
    void deleteInBatch(Iterable<T> var1);
 
    void deleteAllInBatch();
 
    T getOne(ID var1);
 
    <S extends T> List<S> findAll(Example<S> var1);
 
    <S extends T> List<S> findAll(Example<S> var1, Sort var2);



也可以自定义sql,实例:

public interface StudentRepository extends JpaRepository<Student, Integer> {
 
    public Optional<Student> findById(Integer id);
    
    public List<Student> findByOld(Integer old);
 
    @Query(nativeQuery = true, value = "select * from user where id=?1", nativeQuery = true)
    public Optional<Student> findById2(Integer id);
}

nativeQuery = true 有于没有的区别;

  • 有nativeQuery = true时,是可以执行原生sql语句,所谓原生sql,也就是说这段sql拷贝到数据库中,然后把参数值给一下就能运行了;
  • 没有nativeQuery = true时,就不是原生sql,而其中的select * from xxx中xxx也不是数据库对应的真正的表名,而是对应的实体名,并且sql中的字段名也不是数据库中真正的字段名,而是实体的字段名;

自定义方法的实现规则:
Jpa本身还提供了一些自定义声明方法的规则,例如:在接口中使用关键字findBy、readBy、getBy作为方法名的前缀,拼接实体类中的属性字段(首字母大写),并可选择拼接一些SQL关键字来组合成一个查询方法,例如,对于用户实体,关键字可以这样使用:

1.And,如:findByIdAndName(Long id, String name);

2.Or,如:findByIdOrName(Long id, String name);

3.Between,如:findByCreateDateBetween(Date start, Date end);

4.LessThan,如:findByCreateDateLessThan(Date start);

5.GreaterThan,如:findByCreateDateGreaterThan(Date start);

6.IsNull,如:findByNameIsNull();

7.IsNotNull,与上等价

8.Like,如:findByNameLike(String name);

9.NotLike:与上等价

10.OrderBy,如:findByNameOrderByIdAsc(String name);

11.Not,如:findByNameNot(String name);

12.In,如:findByNameIn(Collection nameList);

13.NotIn,与上等价。

加入说上面这些还是不能够满足你的业务需求,你同样可以写一个自定义的方法,使用@Query注解+HQL语句实现你想要的效果

注意点:
  • 怎么定义名字:如果是查询的话直接find,如果要添加条件By什么条件Id
    如果能确认返回值只有一个或者0个,推荐使用Optional包装返回的Entity
  • 如果返回值可能有多个,则需要List来封装
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值