Spring Data JPA学习笔记

2023-11-08


Spring Data JPA

JPA字面意思是JAVA持久层API,JPA定义了一系列标准,建立了实体类和数据库中表的一个映射关系,使得开发人员只需要操作实体类就能够起到操作数据库的效果,比如Hibernate就是一个实现了JPA
的一个持久层框架,而Spring Data JPA则再Hibernate的基础之上进行了进一步封装实现,开发人员只需遵循规范便可以轻易的操作数据库,极大提高了开发效率

环境搭建

  • 通过DBeaver连接本地创建pg数据库test,创建若干表,插入模拟数据
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 创建springboot项目,导入spring data jpa 核心依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
  • 编写配置文件
# 配置服务端口
server.port=8080   

# 配置PG数据库连接信息
spring.datasource.url=jdbc:postgresql://localhost:5432/test
spring.datasource.username=postgres
spring.datasource.password=rainhey123456
spring.datasource.driver-class-name=org.postgresql.Driver

# 当服务首次启动会在数据库中生成相应表,后续启动服务时如果实体类有增加属性会在数据中添加相应字段,原来数据仍在
spring.jpa.hibernate.ddl-auto=update
# 执行数据库操作的时候会在控制台打印 sql 语句
spring.jpa.show-sql=true

  • 创建对应数据库user表的实体类 User,Blog
package com.rainhey.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Data
@AllArgsConstructor
@NoArgsConstructor


//用来注解该类是一个实体类用来进行和数据库中的表建立关联关系,首次启动项目的时候,默认会在数据中生成一个同实体类相同名字的表
@Entity

// 该注解可以用来关联数据库中对应的表
@Table(name = "user",schema = "public")

public class User {
    @Id  //表明该属性字段对应数据库主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)  // 主键生成策略,IDENTITY为主键自增策略
    private Integer id;
    
    private String username;
    
    private String password;
    
    private String address;
    
    private Integer salary;
}

@Entity
@Table(name = "blog",schema = "public")
@Data
public class Blog {

    @Id
    @GeneratedValue
    private Long id;
    private String title;
    private String content;

    @Temporal(TemporalType.TIMESTAMP)  // Temporal用来设置Date类型的属性映射到对应精度的字段
    private Date updateTime;
}

基本CRUD

  • 编写自己的接口 UserRepository 继承 JpaRepository,其中 JpaRepository 的第一个泛型类型对应其要操作的实体类的类型,第二个泛型类型对应要操作的实体类的主键类型
@Component
public interface UserRepository extends JpaRepository<User,Integer> {

}

  • 框架底层已经做好了基本CURD的实现,测试
	@Test
    public void insert(){
        Blog blog = new Blog();
        blog.setId(8L);
        blog.setContent("hello");
        blog.setTitle("this is title");
        blog.setUpdateTime(new Date());
        Blog save = blogRepository.save(blog);
        System.out.println(save);
    }

    @Test
    public void delete(){
        blogRepository.deleteById(12L);
    }

    @Test
    public void update(){
        Blog blog = new Blog();
        blog.setId(4L);
        blog.setContent("test");
        blog.setTitle("this is title");
        blog.setUpdateTime(new Date());
        Blog save = blogRepository.save(blog);
        System.out.println(save);
    }

    @Test
    public void find(){
        List<Blog> all = blogRepository.findAll();
        System.out.println(all);
    }

分页,排序

public void userPage(Integer page,Integer size){

        Sort sort= Sort.by(Sort.Direction.DESC,"salary");
        Iterable<User> users = userPageRepository.findAll(sort);
        System.out.println(users);

        System.out.println("=================");

        Pageable pageable= PageRequest.of(page, size, sort);
        Page<User> all = userPageRepository.findAll(pageable);
        List<User> content = all.getContent();
        System.out.println(content);
    }

基于规则自定义方法

Spring Data JPA允许开发者通过遵循一定的规则在接口内自己定义具有某种功能的方法,由Spring Data JPA根据方法名来推测开发者想要实现的功能,并进行自动实现,如以下自定义的方法

@Component
public interface UserRepository extends JpaRepository<User,Integer> {

    List<User> findUserByAddress(String string);

    List<User> findByAddressAndUsername(String address,String username);

    List<User> findByAddressOrUsername(String address,String username);

    List<User> findDistinctUserByAddress(String address);

    List<User> findUserByAddressOrderBySalaryDesc(String address);

    Page<User> findUserByAddress(String address,Pageable pageable);

    List<User> findUserByaddress(String address, Sort sort);

    List<User> findTop2ByAddressOrderBySalaryDesc(String address);

    List<User> findByAddressLike(String a);
}

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

基于Query注解方法

  • 基本用法
@Component
public interface UserRepository extends JpaRepository<User,Integer> {

    @Query(value = "select u from User u where u.id = ?1")
    List<User> finds(Integer id);
    
	@Query(value = "SELECT * FROM user WHERE id=?1",nativeQuery = true)
    List<User> find11(Integer id);
}

  • @query注解详解,一般value、countQuery、nativeQuery三个的值用的较多
public @interface Query {
    String value() default "";  // 指定JPQL的查询语句。(nativeQuery=true的时候,是原生的Sql语句)

    String countQuery() default "";   // 指定count的JPQL语句,如果不指定将根据query自动生成。如果当nativeQuery=true的时候,指的是原生的Sql语句)

    String countProjection() default "";

    boolean nativeQuery() default false;  // 默认是false,表示value里面是不是原生的sql语句

    String name() default "";

    String countName() default "";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data JPA学习笔记 的相关文章

随机推荐

  • python-爬虫-selenium总结

    爬虫 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 爬虫 前言 使用场景 一 前期准备工作 二 基本的操作 案例 使用selenium利用验证码识别平台 超级鹰 进行各种类型验证码验证 验证根据图像识别验证码输
  • JS:正则表达式中的替换 replace(内容包含匹配模式)

    replace 方法可以实现替换字符的操作 用来替换的参数可以是字符串或正则表达式 语法格式 第一个参数 被替换的可以是字符串也可以是正则表达式 第二个参数 替换为新的字符串 它返回的值是一个替换完的新字符串 需要接收过来 str repl
  • Ubuntu18.04下载vscode速度较快的方式

    各种原因导致自己重装系统 又再一次踏上了重装软件和文件配置的过程 在Linux操作系统上下载vscode一直是比慢的意见事 下载vscode我了解的大概有三种方式可以下载vscode 如果网速不是很理想的情况下 建议第三种方法 1 去官方文
  • .刷脸支付成为生活的重要组成部分

    在步入高速发展的信息化时代后 众多与互联网领域相关的产业开始崛起 在改变人们生活方式的同时 又极大的推动了社会的发展 在众多互联网产业当中 最引人注目的当属移动支付了 移动支付的诞生摒弃了以往繁琐的交易过程 把关键的部分交给一部手机 要说移
  • 处理器的计算能力如何计算

    我们常用双精度浮点运算能力衡量一个处理器的科学计算的能力 就是处理64bit小数点浮动数据的能力 支持AVX2的处理器的单指令的长度是256bit 每个intel核心假设包含2个FMA 一个FMA一个时钟周期可以进行2次乘或者加的运算 那么
  • mysql怎么卸载_怎样把mysql卸载干净?Mysql怎么卸载干净重装?

    很多朋友装mysql数据库时出现无法安装的情况 更可怕的是删除相关文件仍然无法安装 很伤脑筋 相信很多朋友都有过这种经历 其实导致数据无法安装的原因大多数是因为之前安装的Mysql数据没有卸载干净 导致第二次安装不 那么mysql安装失败后
  • 20、numpy——IO

    NumPy IO Numpy 可以读写磁盘上的文本数据或二进制数据 NumPy 为 ndarray 对象引入了一个简单的文件格式 npy npy 文件用于存储重建 ndarray 所需的数据 图形 dtype 和其他信息 常用的 IO 函数
  • C++笔记——std::min_element和std::max_element

    https blog csdn net breeze5428 article details 25918925 参考网页 http en cppreference com w cpp algorithm min element 主要有两种用
  • LangChain 手记 Conclusion结语

    整理并翻译自DeepLearning AI LangChain的官方课程 Conclusion Conclusion 结语 本系列短课展示了大量使用LangChain构建的大语言模型应用 包括处理用户反馈 文档上的问答系统甚至使用LLM来决
  • 艾伦·麦席森·图灵——如谜的解谜者

    艾伦 麦席森 图灵 Alan Mathison Turing 1912年6月23日 1954年6月7日 英国数学家 逻辑学家 被称为计算机科学之父 人工智能之父 科学美国人 这样评价图灵性情矛盾的一生 个人生活隐秘又喜欢大众读物和公共广播
  • Android 刘海屏全屏适配(沉溺式状态栏,隐藏状态栏)

    RequiresApi Build VERSION CODES LOLLIPOP override fun onCreate savedInstanceState Bundle super onCreate savedInstanceSta
  • 01-----Ubuntu16.04安装Gnome桌面环境

    从这篇起 我将使用Ubuntu16 04来搭建流媒体开发的环境 这是Ubuntu16 04空虚拟机的开始文章虚拟机下配置linux的网络上网 包括ssh gcc g 的安装 几乎所有软件的搭建都是从零开始 上面安装好能上网后 本篇将讲述关于
  • E: Sub-process /usr/bin/dpkg returned an error code (1)

    执行命令 apt update apt dist upgrade apt update apt dist upgrade 是由于apt get安装软件时出现了类似于 注意 根据搜索得知 var lib dpkg info下保存有各个软件包的
  • 2022年前端面试题整理,持续更新中

    端面试题整理 已同步到掘金 CSDN 掘金地址 https juejin cn post 7075332630417244173 CSDN 地址 https blog csdn net z1832729975 article details
  • 一种3D视频格式转换(H264 MVC至SBS / OU)方案

    本文尚处于草稿状态 提前公开仅供预览 前言 两年前我就想写这个话题的文章 但一直拖延到现在 因为我在等待SkyBox VR Player支持3D MVC 我在想 如果3D播放器已经支持播放3D MVC格式 那么MVC至SBS转换就没有必要
  • spring中配置DButil数据源

    1 pom引入
  • web服务器群集-Nginx

    关于Nginx 一款高性能 轻量级Web服务软件 系统资源能耗低 对HTTP并发连接的处理能力高 单台物理服务器可支持3000 5000个并发请求 1 Nginx编译安装 安装支持软件 yum y install pcre devel zl
  • Maven打包时出现Process terminated错误

    Maven打包时出现Process terminated错误 检查maven的配置文件 多引入了一次控制器 编码错误 切点表达式错误 用maven打包时出现Process terminated样式的错误 报错如下 查看报错信息 检查mave
  • HDS 多路径软件HDLM for AIX安装及配置—精简范例篇

    HDS 多路径软件HDLM for AIX安装及配置 精简范例篇 aix 6 HDS VSP HDLM DLManager mpio rte HDLM Hitachi Dynamic Link Manager 是HDS公司提供的安装在主机端
  • Spring Data JPA学习笔记

    文章目录 Spring Data JPA 环境搭建 基本CRUD 分页 排序 基于规则自定义方法 基于Query注解方法 Spring Data JPA JPA字面意思是JAVA持久层API JPA定义了一系列标准 建立了实体类和数据库中表