尚硅谷 --佟刚 SpringData JPA

这是一篇关于尚硅谷佟刚讲解SpringData JPA的教程,涵盖了从概述到自定义Repository方法的全部内容,包括Repository接口、查询方法定义规范、Query注解、Modifying注解、PagingAndSortingRespository接口以及JpaSpecificationExecutor接口的使用。

简介

尚硅谷 --佟刚 2小时快速入门
看着像 16年左右发布的视频
SpringData源码级讲授,快速上手迅速入门
https://www.bilibili.com/video/BV1w64y1c7dJ?p=1

P1_概述 02:36
P2_HelloWorld 19:50
P3_Repository接口 10:09
P4_Repository查询方法定义规范 18:40
P5_Query注解 15:19
P6_Modifying注解 09:01
P7_CrudRepository接口 05:00
P8_PagingAndSortingRespository接口 12:03
P9_JpaRepository接口 03:58
P10_JpaSpecificationExecutor接口 14:44
P11_自定义 Repository 方法 05:44

详情

P1_概述 02:36

在这里插入图片描述在这里插入图片描述在这里插入图片描述

P2_HelloWorld 19:50

在这里插入图片描述


<!-- 1,配嚣数据源–->I
<!-- 2。配置JPA的 EntityManagerFactory -->
<!-- 3,配置事务管理器-->
<!-- 4。配置支持注解的事务-->
<!-- 5。配置SpringData] -->

P3_Repository接口 10:09

在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

P4_Repository查询方法定义规范 18:40

*在 Repository子接口中声明方法
*1。不是随便声明的。而需要符合一定的规范
*2。查询方法以find \ read l get开头
*3。涉及条件查询时,条件的属性用条件关键字连接

  • 4。要注意的是:条件属性以首字母大写。

在这里插入图片描述在这里插入图片描述在这里插入图片描述



//根据 1astName来获取对应的 Person
Person getByLastName(string lastName);
//WHERE lastName LIKE ?%AND id < ?
List<Person> getByLastNameStartingWithAndIdLessThan(String lastName,Integer id);
// wHERE lastName LIKE %?AND id <?
List<Person> getByLastNameEndingWithAndIdLessThan(String lastName,Integer id);
//WHERE email IN ?, ?, ?) OR birth < ?
List<Person>getByEmailInOrBirthLessThan(List<string> emails, Date birth);


在这里插入图片描述
5,支持属性的级联查询。若当前类有符合条件的属性,则优先使用,而不使用级联属性。
若需要使用级联属性,则属性之间使用_进行连接。
在这里插入图片描述
在这里插入图片描述

P5_Query注解 15:19

//查询id 值最大的那个Person
//使用@Query 注解可以自定义JPQL语句以实现更灵活的查询
Query("SELECT p FROM Person p wHERE p.id = (SELECT max(p2.id) FROM Person p2)")
Person getMaxIdPerson();

//为@Query注解传递参数的方式1:使用占位符。
@Query("SELECT p FROM Person p WHERE p.lastName = ?1 AND p.email = ?2")
List<Person> testQueryAnnotationParams1(String lastName,string email);@Query注解传递参数的方式1:命名参数的方式。

@Query("SELECT p FROM Person p WHERE p.lastName = :lastName AND p.email = :emai1")
List<Person> testQueryAnnotationParams2(@Param("email") String email,@Param("lastName") String lastName);

SpringData允许在占位符上添加%%@Query("SELECT p FROM Person p WHERE p.lastName LIKE %?1% OR p.email LIKE %?2%"")
List<Person> testQueryAnnotationLikeParam(String lastName,String email);

SpringData允许在占位符上添加%%@Query("SELECT p FROM Person p WHERE p.lastName LIKE %:1astName% OR p.email LIKE %:emai1%"")
List<Person> testQueryAnnotationLikeParam2(@Param("emai1") String email,@Param("lastName " ) String lastName);

/设置nativeQuery=true即可以使用原生的SQL查谊
@Query(value="SELECT count(id) FROM jpa_persons", nativeQuery=true)
long getTotalcount();

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

P6_Modifying注解 09:01

在这里插入图片描述

//可以通过自定义的JPQL完成UPDATE和DELETE操作。注意:JPQL不支持使用INSERT
//在@Query注解中编写JPQL语句,但必须使用@CModifying 进行修饰。以通知SpringData,这是一个UPDATE或DELETE操作
//UPDATE 或 DELETE 操作需要使用事务,此时需要定义Service层。在Service层的方法上添加事务操作。
//默认情况下,SpringData的每个方法上有事务,但都是一个只读事务。他们不能完成修改操作!

@Modifying
@Query("UPDATE Person p SET p.email = :email WHERE id = :id")
void updatePersonEmail(@Param("id") Integer id,@Param(" emai1") string email);

JPQL 不支持insert

P7_CrudRepository接口 05:00

在这里插入图片描述

P8_PagingAndSortingRespository接口 12:03

在这里插入图片描述

Pageable
在这里插入图片描述Sort
在这里插入图片描述

P9_JpaRepository接口 03:58

在这里插入图片描述

P10_JpaSpecificationExecutor接口 14:44

需要关注,
在这里插入图片描述



/**
*目标:实现带查询条件的分页。
*调用JpaSpecificationExecutor的 Page<T> findAll(Specification<T> spec,Pageable pageable);
*Specification:封装了JPA Criteria查询的查询条件
* Pageable:封装了请求分页的信息:例如pageNo,pagesize,Sort*/
    @Test
    public void testpaSpecificationExecutor(){
    int pageNo = 3 - 1;
    int pagesize = 5;
    PageRequest pageable = new PageRequest(pageNo,pagesize);


    /通常使用Specification的匿名内部类
    Specification<Person> specification = new Specification<Person>() {
/**
*@param *root:代表查询的实体类。
*@param query:可以从中可到Root对象,即告知JPA Criteria 查询要查询哪一个实体类。还可以
*来添加查询条件,还可以结合EntityManager对象得到最终查询的TypedQuery对象。
*param *cb: CriteriaBuilder对象。用于创建Criteria 相关对象的工厂。当然可以从中获取到Predicate对象
*@return : *Predicate 类型,代表一个查询条件。
*/
    @override
    public Predicate toPredicate(
         Root<Person> root,
         CriteriaQuery<?>query,
         criteriaBuilder cb) {
              Path path = root.get("id");
              Predicate predicate = cb.gt(path,5);
              return predicate;
         }


    System.out.print1n("总记录数:" + page.getTotalE1ements());
    System.out.print1n("当前第几页:" +(page.getNumber() + 1));
    System.out.println("总页数:" + page.getTotalPages());
    System.out.println("当前页面的List: " + page.getContent());
    System.out.println("当前页面的记录数:"+ page.getNumber0fElements());

   };



   Page<Person> page = personRepsotory.findAll(specification,pageable);

}

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

P11_自定义 Repository 方法 05:44

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值