Spring Boot Data JPA

Spring Data JPA简介

用来简化创建 JPA 数据访问层和跨存储的持久层功能。

Spring Data JPA提供的接口

Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组件扫描的时候自动识别。

CrudRepository :是Repository的子接口,提供CRUD的功能。

PagingAndSortingRepository:是CrudRepository的子接口,添加分页和排序的功能。

JpaRepository:是PagingAndSortingRepository的子接口,增加了一些实用的功能,比如:批量操作等。

JpaSpecificationExecutor:用来做负责查询的接口。

Specification:是Spring Data JPA提供的一个查询规范,要做复杂的查询,只需围绕这个规范来设置查询条件即可。接口分层显示

Repository接口查询规则

关键字 @ 案例 @效果

	And @ findByLastnameAndFirstname @ … where x.lastname = ?1 and x.firstname = ?2Or @ findByLastnameOrFirstname @ … where x.lastname = ?1 or x.firstname = ?2
Is,Equals@findByFirstname,findByFirstnameIs,findByFirstnameEquals@… where x.firstname = ?1Between@findByStartDateBetween@… where x.startDate between ?1 and ?2LessThan@findByAgeLessThan@… where x.age < ?1LessThanEqual @findByAgeLessThanEqual@… where x.age <= ?1GreaterThan @findByAgeGreaterThan@… where x.age > ?1GreaterThanEqual @findByAgeGreaterThanEqual@… where x.age >= ?1After @findByStartDateAfter@… where x.startDate > ?1Before@findByStartDateBefore@… where x.startDate < ?1IsNull@findByAgeIsNull@… where x.age is nullIsNotNull,NotNull@findByAge(Is)NotNull@… where x.age not nullLike @findByFirstnameLike@… where x.firstname like ?1NotLike @findByFirstnameNotLike@… where x.firstname not like ?1StartingWith@findByFirstnameStartingWith@… where x.firstname like ?1 (parameter bound with appended %)EndingWith @findByFirstnameEndingWith@… where x.firstname like ?1 (parameter bound with prepended %)Containing @findByFirstnameContaining@… where x.firstname like ?1 (parameter bound wrapped in %)OrderBy@findByAgeOrderByLastnameDesc@… where x.age = ?1 order by x.lastname descNot@findByLastnameNot@… where x.lastname <> ?1In @findByAgeIn(Collection<Age> ages)@… where x.age in ?1NotIn @findByAgeNotIn(Collection<Age> age)@… where x.age not in ?1TRUE@findByActiveTrue()@… where x.active = trueFALSE @findByActiveFalse()@… where x.active = falseIgnoreCase@findByFirstnameIgnoreCase@… where 					UPPER(x.firstame) = UPPER(?1)

项目图片

在这里插入图片描述

pom.xml

只需要在pom.xml引入需要的数据库配置,就会自动访问此数据库,如果需要配置其他数据库,可以在application.properties进行添加

默认使用org.apache.tomcat.jdbc.pool.DataSource创建连接池

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.jege.spring.boot</groupId><artifactId>spring-boot-data-jpa</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>spring-boot-data-jpa</name><url>http://maven.apache.org</url><!-- 公共spring-boot配置,下面依赖jar文件不用在写版本号 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.4.1.RELEASE</version><relativePath /></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><dependencies><!-- 持久层 --><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><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><finalName>spring-boot-data-jpa</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin></plugins></build>
</project>

模型对象User

package com.jege.spring.boot.data.jpa.entity;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;/*** @jpa模型对象*/
@Entity
@Table(name = "t_user")
public class User {@Id@GeneratedValueprivate Long id;private String name;private Integer age;public User() {}public User(String name, Integer age) {this.name = name;this.age = age;}}

持久层UserRepository

package com.jege.spring.boot.data.jpa.repository;import java.util.List;import org.springframework.data.jpa.repository.JpaRepository;import com.jege.spring.boot.data.jpa.entity.User;/***持久层接口,由spring自动生成其实现*/
public interface UserRepository extends JpaRepository<User, Long> {List<User> findByNameLike(String name);}

启动类Application

package com.jege.spring.boot;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** spring boot 启动类*/@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}

配置文件application.properties

## JPA Settings
spring.jpa.generate-ddl: true
spring.jpa.show-sql: true
spring.jpa.hibernate.ddl-auto: create
spring.jpa.properties.hibernate.format_sql: false

测试类UserRepositoryTest

package com.jege.spring.boot.data.jpa;import static org.assertj.core.api.Assertions.assertThat;import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.jege.spring.boot.data.jpa.entity.User;
import com.jege.spring.boot.data.jpa.repository.UserRepository;@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest()
public class UserRepositoryTest {@AutowiredUserRepository userRepository;// 打印出class com.sun.proxy.$Proxy66表示spring注入通过jdk动态代理获取接口的子类@Testpublic void proxy() throws Exception {System.out.println(userRepository.getClass());}@Testpublic void save() throws Exception {for (int i = 0; i < 10; i++) {User user = new User("jege" + i, 25 + i);userRepository.save(user);}}@Testpublic void all() throws Exception {save();assertThat(userRepository.findAll()).hasSize(10);}@Testpublic void findByName() throws Exception {save();assertThat(userRepository.findByNameLike("jege%")).hasSize(10);}@Afterpublic void destroy() throws Exception {userRepository.deleteAll();}}

扫一扫获取更多相关资讯哟!!!在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB教程(1) MATLAB 基础知识(4)

第七部分&#xff1a;二、三维图 二维图和三维图- MATLAB & Simulink- MathWorks 中国 折线图 &#xff08;1&#xff09; 画图 x 0:pi/1000:2*pi; y sin(x); plot(x,y) 这里x就用到了前面说到的索引。x表示0到2*pi之间步长为pi/100的值。 二维图如下&#xff1a; 这里…

现在能不能升级鸿蒙,能不能升级鸿蒙系统?

电梯直达huafen185613402初窥门径发表于 2021-2-28 14:28:33来自&#xff1a;华为Mate 10 Pro最新回复 2021-2-28 17:34:28这个手机现在性能还非常好呀&#xff0c;期待能够给予鸿蒙系统升级产品型号BLA-AL00出现频率总是问题类型其他应用名称Android 系统应用版本10系统版本BL…

Spring Boot MyBatis

MyBatis简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache 迁移到了google code&#xff0c;并且改名为MyBatis 。 集成spring boot 的时候必须在mapper接口上面标注Mapper注解 项目图片 pom.xml 只需要在pom.xml引入需要的数据库配置&#xff0c;就会…

没有bug队——加贝——Python 练习实例 11,12

11.题目&#xff1a; 古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子总数为多少&#xff1f; 程序分析&#xff1a;兔子的规律为…

Spring Boot JDBC

JDBC详解 Java Data Base Connectivity,是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组成。不管是Hibernate&#xff0c;还是JPA或者MyBatis都是对JDBC做了一次封装。 Spring简化了JDBC那些内…

没有bug队——加贝——Python 练习实例 13,14

今天水一天&#xff0c;看了看这两道题&#xff0c;感觉没啥好注意的了&#xff0c;或许是我归被窝的心似箭吧&#xff0c;哈哈哈哈&#xff0c;如果我想起了有补充的&#xff0c;我再出被窝。。。 13.题目&#xff1a; 打印出所有的"水仙花数"&#xff0c;所谓&qu…

Spring Boot 热部署 devtools模块

devtools模块详解 devtools模块&#xff0c;是为开发者服务的一个模块。主要的功能就是代码修改后一般在5秒之内就会自动重新加载至服务器&#xff0c;相当于restart成功。 简单原理 在发现代码有更改之后&#xff0c;自动重新启动应用&#xff0c;但是其速度比手动停止后再…

零基础入门Matlab(补充)

目录 1.界面认识 2.变量命名 3.数据类型 4.元胞数组和结构体 5.矩阵操作 6.程序结构 7.基本绘图操作 7.1.二维平面绘图 7.2.三维立体绘图 8.图形的保存与导出 9.补充 1.界面认识 2.变量命名 注&#xff1a;Matlab中的注释 %% 独占一行的注释&#xff08;有上下横线…

html5中隐藏段落,html怎么隐藏p标签

html隐藏p标签的方法&#xff1a;1、给p标签添加hidden属性&#xff0c;语法“”&#xff1b;2、在p标签中使用style属性&#xff0c;添加“display: none”或“visibility: hidden”样式。”&#xff1b;2、在p标签中使用style属性&#xff0c;添加“display: none”或“visib…

Dev C++详细安装教程

Dev-C是一个Windows环境下的一个适合于初学者使用的轻量级 C/C 集成开发环境&#xff08;IDE&#xff09;。它是一款自由软件&#xff0c;遵守GPL许可协议分发源代码。它集合了MinGW中的GCC编译器、GDB调试器和 AStyle格式整理器等众多自由软件。 Dev C 5.11 简体中文版下载地…

没有bug队——加贝——Python 练习实例 15,16

目录 15.题目&#xff1a; 16.题目&#xff1a; 15.题目&#xff1a; 利用条件运算符的嵌套来完成此题&#xff1a;学习成绩>90分的同学用A表示&#xff0c;60-89分之间的用B表示&#xff0c;60分以下的用C表示。 程序分析&#xff1a;程序分析&#xff1a;(a>b) ? …

普通html和vue单选框的样式,vue2实现自定义样式radio单选框

先上效果主编已回复:{{item.label}}js:data() {return {radio: 1,radios:[{label: 是,value:1,isChecked: true,},{label: 否,value:2,isChecked: false,},{label: 全部,value:3,isChecked: false,},]}},methods: {check(index) {// 先取消所有选中项this.radios.forEach((item…

Dev C++详细配置

首先在我们进行Dev C配置之前&#xff0c;Dev C一定是安装完毕的。 Dev C安装完毕 点击Finish进行Dev C的配置 首次使用 Dev C 还需要简单的配置&#xff0c;包括设置语言、字体、和主题风格。 第一次启动 Dev C 后&#xff0c;提示选择语言。 这里我们选择简体中文&#x…

用html编写一幅简单的画,使用html5画简单的折线图

//得到画布var can1document.getElementByIdx_x_x_x("can");//得到画笔var cxtcan1.getContext("2d");//定义图表的数据&#xff0c;该方式为创建数组直接量的方式var sale_data[80,92,104,110,68,50,45,90,74,98,103];//首先为背景进行设置渐变的效果,表示…

没有bug队——加贝——Python 练习实例 17,18

17.题目&#xff1a; 输入一行字符&#xff0c;分别统计出其中英文字母、空格、数字和其它字符的个数。 程序分析&#xff1a;利用 while 或 for 语句,条件为输入的字符不为 \n。 注&#xff1a;char:字符串个数&#xff1b;space&#xff1a;空格个数&#xff1b;diagt&…

快速搞定PCA(主成分分析)(原理 代码 案例)

目录 一、基本介绍 1.1原理 1.2主成分分析的几何解释 1.3主要步骤 1.4主成分个数的选取原则 二、主成分分析代码 2.1MATLAB代码 2.2Python代码 三、实用案例 一、基本介绍 1.1原理 主成分分析是最常用的线性降维方法&#xff0c;通过某种线性投影&#xff0c;将高维的数…

html文件查找关键词,批处理查找文件关键字下一行内容

批处理命令 显示所要查找字符串所在行和下面一行内假设查找内容为“问问”&#xff0c;查找文件为“a.txt”&#xff0c;输出文件为“b.txt”。 在线等Echo Off&Setlocal EnabledelayedexpansionFor /f "tokens1* delims:" %%i in (Type a.txt^|Findstr /n "…

Dev C++ 实现Hello World

新建源文件 打开 Dev C&#xff0c;在上方菜单栏中选择“文件 --> 新建 --> 源代码”&#xff1a; 或者按下CtrlN组合键&#xff0c;都会新建一个空白的源文件&#xff0c;如下图所示&#xff1a; 在空白文件中输入本文开头的代码 注意 *表示源文件没有保存 在上方菜…

没有bug队——加贝——Python 练习实例 19,20

19.题目&#xff1a; 一个数如果恰好等于它的因子之和&#xff0c;这个数就称为"完数"。例如61&#xff0b;2&#xff0b;3.编程找出1000以内的所有完数。 程序分析&#xff1a;请参照程序python实例14。我就不在这里过多介绍了。 for j in range(2,1001):k []n …

数据包络分析(DEA)详解(以第八届宁夏省赛为例)

目录 一、基本介绍 1.1原理 1.2CCR模型 1.3BCC模型 二、代码 2.1MATLAB代码 2.2Python代码 三、案例分析 3.1案例介绍 3.2案例分析 3.3案例求解 一、基本介绍 1.1原理 数据包络分析有多种模型&#xff0c;主要为&#xff1a;CCR模型&#xff0c;BBC模型、交叉模型、A&…