目录

JpaRepository 接口常用 API

环境准备 与 配置

实体 Entity 与 持久化层

Service 层接口与实现

控制器层 Controller 接口

JPA One to One


JpaRepository 接口常用 API 

org.springframework.data.jpa.repository.JpaRepository 接口常用 API 
List<T> findAll() 查询所有数据。如果表中无数据,则返回一个空的 list。默认升序。
Optional<T> findById(ID var1) 通过主键id查询,如果数据不存在,则 Optional.isPresent() 返回 false
List<T> findAll(Sort sort) 查询所有数据,同时指定排序字段。如 Sort.by(Sort.Direction.DESC, "tvId") 以 tvId 倒序查询。
T getOne(ID id) 根据主键id查询。如果id对应的数据不存在,则抛异常:EntityNotFoundException。慎用
<S extends T> Optional<S> findOne(Example<S> example) 条件查询单条数据。以实体中非null字段为条件,如果所有字段都为null,表示查询所有。结果多余1条时,抛出异常:NonUniqueResultException。慎用
<S extends T> List<S> findAll(Example<S> example) 条件查询。通过 Example 中的指定的实体中的非 null 字段作为调节进行查询。不存在时,返回一个空list。如果实体的所有字段都为null,则默认查询所有。
<S extends T> List<S> findAll(Example<S> example, Sort sort) 条件查询的同时加上排序。值不存在时,返回一个空列表。
Page<T> findAll(Pageable pageable) 分页查询。Pageable 可以设置查询的页码以及每页的大小,同时还可以指定 Sort 排序。无数据时不影响,不会出现空指针异常。
<S extends T> Page<S> findAll(Example<S> example, Pageable pageable) 条件查询 加 分页,Pageable 可以设置排序字段。
<S extends T> S save(S var1) 添加与修改。如果实体的主键为null,直接新增数据;如果id不为null,则查询数据库是否有此id,有则修改,没果则新增(主键以主键生成策略进行生成)
<S extends T> List<S> saveAll(Iterable<S> entities) 同时 save 多条数据
void deleteById(ID var1) 根据主键id删除数据。如果id不存在,则抛异常:EmptyResultDataAccessException
void delete(T entity) 根据实体的主键id删除数据(主键以外的属性无效)。实体对应的主键不存在时,不会抛异常。
void deleteAll(Iterable<? extends T> entities) 根据多个实体的主键同时删除多条数据。值不存在时,不影响。
void deleteInBatch(Iterable<T> entities) 根据实体主键id批量删除。值不存在时,不影响。
void deleteAllInBatch() 批量删除表中所有数据。表中无数据时,不影响。
void deleteAll() 删除表中所有数据。表中无数据时,也不会有影响
boolean existsById(ID var1) 判断某个主键是否存在
long count() 查询表中记录条数。表中无数据时,返回0

环境准备 与 配置

1、下面以 Spring boot 2.1.4 + Spring Data JPA 操作 h2 数据库为例进行说明,准备环境如下:

2、pom.xml 文件内容如下(在线源码):

        <!-- Spring Data JPA 内部依赖会 jdbc --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!--h2 内存数据库,不用安装即可使用的数据库--><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency>

3、application.yml 配置文件内容如下(在线源码):

spring:
#数据源配置datasource:username: nasapassword: 123456url: jdbc:h2:~/test1 #数据库默认在当前用户目录下,数据库不存在时会自动新建driver-class-name: org.h2.Driver#JPA配置jpa:show-sql: truehibernate:ddl-auto: update

实体 Entity 与 持久化层

1、实体类在线源码:https://github.com/wangmaoxiong/h2Smil/blob/master/src/main/java/com/wmx/entity/Tv.java

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.util.Date;
/*** Created by Administrator on 2019/2/27 0027.* 1、电视机实体。应用启动时自动,配置文件中配置 ddl-auto: update:如果数据库不存在,则自动新建,否则不再新建。* 2、javax.persistence.Entity、javax.persistence.Id 注解必须要写,否则启动报错!*/
@Entity
public class TV {@Id//标识为主键@GeneratedValue(strategy = GenerationType.AUTO)//指定主键生成的方式,AUTO 指定 H2 数据库主键自动增长private Integer tvId;//电视id,主键/*** 下面没标识的属性都会以默认值和数据库表的字段进行映射对应* 如果修改默认值,又不属性的,可以参考:https://blog.csdn.net/wangmx1993328/article/details/82048775* 中的 "domain Area" 部分*/private String tvName;//电视名称private Float tvPrice;//电视价格private Date dateOfProduction;//生产日期//省略 getter、setter 方法未粘贴
}

2、持久化层接口继承 JpaRepository(在线源码):

import com.wmx.entity.TV;
import org.springframework.data.jpa.repository.JpaRepository;
/*** 继承 JpaRepository 即可,即可以获得其所有的 CRUD 方法,包括分页,排序等方法*/
public interface TVRepository extends JpaRepository<TV, Integer> {
}

Service 层接口与实现

1、业务层接口在线源码:https://github.com/wangmaoxiong/h2Smil/blob/master/src/main/java/com/wmx/service/TvService.java

2、业务层实现在线源码:https://github.com/wangmaoxiong/h2Smil/blob/master/src/main/java/com/wmx/service/impl/TvServiceImpl.java

3、其中包含了平时需要用到的常用 CRUD 方法。

控制器层 Controller 接口

1、在线源码: https://github.com/wangmaoxiong/h2Smil/blob/master/src/main/java/com/wmx/controller/TvController.java

JPA One to One

1、Jpa 中使用 @OneToOne 注解配置一对一关系,需要在哪方设置外键,则将其定义在哪方,下面以 学生(Student)与餐卡(MealCard)为例进行演示,一个学生一张餐卡。

2、实际生产中很少会有人使用 JPA 配置来自动建表,所以像里面的级联操作等配置其实并不需要太关心,只能配出关联关系即可。(完整源码)

/*** 学生餐卡实体类* 与 {@link Student} 是一对一关系,一个学生一张餐卡* <p>* * @Entity :告诉 JPA 本类是一个与数据库表进行映射的实体类,而不是普通的 Java Bean* * 1、当实体类名称是驼峰命名,且没有使用 @Table 指定表名,则默认表名为 meal_card** @author wangMaoXiong* @version 1.0* @date 2021/5/16 15:55*/
@Entity
public class MealCard {//定义主键及主键生成规则@Id@GeneratedValue(strategy = GenerationType.TABLE)private String mid;//参考卡号private Date createTime;//制卡日期//省略 getter、setter 方法等未粘贴
}
/*** 学生实体类* * @Entity :告诉 JPA 本类是一个与数据库表进行映射的实体类,而不是普通的 Java Bean** @author wangMaoXiong* @version 1.0* @date 2021/5/16 15:50*/
@Entity
public class Student {//定义主键及生成规则@Id@GeneratedValue(strategy = GenerationType.TABLE)private String sid;//学生ID@Column(nullable = false, length = 64)private String name;//姓名private Date birthday;//出生日期private Integer sexCode;//性别:1是男,0是女/*** 1、需要在哪一方建外键,则在哪一方设置 @OneToOne 注解* 2、cascade 属性表示级联操作选项,经过实测,这个属性似乎并没有生效,不过没有关系,可以自动手动去数据库修改即可。** @JoinColumn 表示关联字段,属性用途如下:* A)name:指定【meal_card】表中外键的名称,默认为"关联表名称_关联表字段名称",即默认为 "student_sid"* B)referencedColumnName:指定关联【student】表中的什么字段,默认为对方主键,即默认为 "sid"* C)nullable:外键值是否可以为空,默认为 true* D)@JoinColumn 注解可以省略不写,则默认会在【student】表中新建外键 meal_card_mid 并关联【MealCard】表的主键 mid*/@OneToOne(cascade = {CascadeType.ALL})@JoinColumn(name = "meal_card_mid", referencedColumnName = "mid", nullable = true)private MealCard meal_card;//省略 getter、setter 方法等未粘贴
}

Spring Data JPA 常用 CRUD 操作汇总 及 关联关系( 操作 h2 内存数据)相关推荐

  1. spring data jpa常用配置

    spring.jpa.hibernate.ddl-auto 首次程序运行时对ddl的操作 create: 每次运行该程序,没有表格会新建表格,表内有数据会清空: create-drop: 每次程序结束 ...

  2. Spring Data JPA 常用注解

    1. 创建表 @Entity声明该类对应一个数据表实体(万事万物皆为对象). @Table 设置表名 @Entity @Table(name = "user") public cl ...

  3. spring data JPA常用注解

    常用注解 @Entity 作用:指定当前类是实体类. @Table 作用:指定实体类和表之间的对应关系. 属性: name:指定数据库表的名称 @ld 作用:指定当前字段是主键. @Generated ...

  4. Spring Data JPA Specification(规范)实现复杂查询

    目录 持久化 API 接口概述 JpaSpecificationExecutor 常用 API JPA Specification 编码示例 持久化 API 接口概述 1.JPA 持久化 API 接口 ...

  5. Spring Data JPA问题汇总

    刚进公司,发现都用的Spring Data JPA,一脸懵,知乎上遇到了一个大佬写的文章,非常详细,分享一下,我把大佬的文章整理了一下格式,比较好看了,原文链接:https://zhuanlan.zh ...

  6. Spring Data JPA 实战

    课程介绍 <Spring Data JPA 实战>内容是基于作者学习和工作中实践的总结和升华,有一句经典的话:"现在的开发人员是站在巨人的肩上,弯道超车".因现在框架越 ...

  7. SpringBoot学习笔记:Spring Data Jpa的使用

    更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...

  8. Spring Boot的Spring Data JPA示例

    1.简介 在本文中,我们将演示如何利用功能强大的Spring Data JPA API与本课程中的数据库(内存中的H2数据库)进行交互. Spring Data JPA提供了一组非常强大且高度抽象的接 ...

  9. Spring Data JPA教程:简介

    创建使用Java Persistence API的存储库是一个繁琐的过程,需要大量时间,并且需要大量样板代码. 通过执行以下步骤,我们可以消除一些样板代码: 创建一个抽象的基础存储库类,该类为实体提供 ...

  10. hql实例 jpa_SpringBoot学习笔记九:Spring Data Jpa的使用

    Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR 338,这些接口 ...

最新文章

  1. python学习随笔--web框架
  2. SVN使用之分支、合并
  3. 面试题总结(21-40)
  4. mac升级之后safari打不开网页,怎么办?
  5. 据调查95%以上的AI从业者不具备修改模型或者提出新模型的技术能力
  6. jQuery Css方法
  7. 测试人员如何使用浏览器的f12_测试过程中如何快速定位一个bug
  8. SAP UI5 resource servlet
  9. Linux 脚本文件中开头的#!/bin/bash和#!/bin/sh是什么意思
  10. 【必知必会】pro文件及常用配置
  11. [Unity] 在 3DsMax 中将骨骼调整为适应 Unity 的 Humanoid 的结构的记录
  12. js排序算法详解-计数排序
  13. dubbo和zookeper使用_Dubbox与Zookeeper简介及入门小案例
  14. Anaconda常用指令
  15. 浅谈URL生成方式的演变
  16. 其他综合-fdisk一键分区操作-无需脚本
  17. Sqoop导入导出基本操作
  18. API to UPDATE Oracle FND User
  19. 怎么在本地运行java项目,eclipse怎么运行java web项目?
  20. 九大免费自学编程网站,带你告别学习焦虑

热门文章

  1. 详测 Generics Collections: TObjectList、TObjectQueue、TObjectStack
  2. 白鸦:我印象中的Keso
  3. (转) 三袋米的故事
  4. bootstrap table 小计行_【2018/4/11】bootstrapTable添加一行
  5. 拓端tecdat|SAS用梯度提升回归树(GBDT)迁移学习预测抵押贷款拖欠风险和垃圾电子邮件数据
  6. (14)机器学习_f1,auc值
  7. 机器学习sklearn中决策树模型参数释义
  8. php 表单 sql,PHP表单发布到SQL后没有任何操作
  9. ui uview 安卓开发_HarmonyOS 2.0手机开发者Beta公测招募
  10. 如何让caffe读取多通道图片(=4)