
文章插图
看一下数据库,发现表已经自动创建

文章插图
对表操作增加数据首先需要创建UserRepository接口,要通过继承JpaRepository<T, ID>,提供实体类和id的类型 。
/** * @author: lyd * @description: UserRepository * @Date: 2022/10/2 */@Repositorypublic interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {}
编写测试类通过调用save方法即可完成保存操作package com.jpa.demo.test;import com.jpa.demo.domain.User;import com.jpa.demo.repository.UserRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.junit.jupiter.api.Test;/** * @author: lyd * @description: 测试类 * @Date: 2022/10/2 */@SpringBootTestpublic class JpaTest {@Autowiredprivate UserRepository userRepository;@Testvoid InsertTest() {User user = new User();user.setNickName("怒放吧德德");user.setUsername("lyd_code");user.setPassword("lyd_open");User save = userRepository.save(user);System.out.println(save);}}
运行结果
文章插图
查看数据通过findAll就可以直接获取得到所有的数据 。
@Testvoid QueryTest() {List<User> all = userRepository.findAll();all.forEach(System.out::println);}
就能在控制台中看到:
文章插图
分页查找jpa也是实现了分页操作的方法 。通过PageRequest.of(0,1)可以完成分页 。
@Testvoid PageRequestTest() {userRepository.findAll(PageRequest.of(0,1)).forEach(System.out::println);}
其底层对数据库的操作就会加上limit.
文章插图
根据ID查找返回是Optional类,User类型的数组
@Testvoid FindByIdTest() {Optional<User> user = userRepository.findById(1L);System.out.println(user);}
Java8 新特性Optional类Optional 类新特性方法命名规则自定义查询方法命名规则查询就是根据方法的名字,就能创建查询 。需要按照Spring Data JPA提供的方法命名规则定义方法的名称,就可以完成查询工作 。Spring Data JPA在程序执行的时候会根据方法名称进行解析,并自动生成查询语句进行查询 。通过jpa的规则要求来实现自己命名查询 。按照Spring Data JPA 定义的规则,查询方法以findBy开头,涉及条件查询时 , 条件的属性用条件关键字连接,要注意的是:条件属性首字母需大写 。框架在进行方法名解析时,会先把方法名多余的前缀截取掉 , 然后对剩下部分进行解析 。
Optional 类是一个可以为null的容器对象如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象Optional 是个容器:它可以保存类型T的值,或仅保存null 。Optional提供很多有用的方法,这样我们就不用显式进行空值检测Optional 类的引入很好的解决空指针异常
编写Repository根据一定的规则来编写方法命名 。jpa会自动识别方法名称进行操作 。
package com.jpa.demo.repository;import com.jpa.demo.domain.User;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.JpaSpecificationExecutor;import org.springframework.stereotype.Repository;import java.util.List;/** * @author: lyd * @description: UserRepository * @Date: 2022/10/2 */@Repositorypublic interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {//根据nickname查询List<User> findAllByNickName(String str);}
通过测试可以看到如下结果:
文章插图
在编写repository的时候会有一些规则提示,也就是只有符合这些规则才能够被识别 。这里只是展现了findxxx,实际上还有许多 。

文章插图
具体的关键字,使用方法和生产成SQL如下表所示

推荐阅读
- 风色幻想:命运传说新手英雄怎么培养
- Tubian0.42
- 支付宝蚂蚁庄园11月6日答案分享
- 电子指南针怎么看方向(如何利用手机指南针判别方向)
- 【LeetCode第 313 场周赛】忘光光
- 一加手机怎么样,可以入手吗(一加ace值得入手吗)
- 为什么中国的To B企业都活的很“惨”?
- 怎么玩跳棋(二人跳棋的下法图解)
- 生产管理ERP哪一款比较好?
- 制造业数字化转型,本土云ERP系统如何卡位?