有天上飞的概念,就要有落地的实现

  • 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍

  • 先赞后看,养成习惯

SpringBoot 图文教程系列文章目录

  1. SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」
  2. SpringBoot图文教程2—日志的使用「logback」「log4j」
  3. SpringBoot图文教程3—「‘初恋’情结」集成Jsp
  4. SpringBoot图文教程4—SpringBoot 实现文件上传下载
  5. SpringBoot图文教程5—SpringBoot 中使用Aop
  6. SpringBoot图文教程6—SpringBoot中过滤器的使用
  7. SpringBoot图文教程7—SpringBoot拦截器的使用姿势这都有
  8. SpringBoot图文教程8 — SpringBoot集成MBG「代码生成器」
  9. SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」
  10. SpringBoot图文教程10—模板导出|百万数据Excel导出|图片导出「easypoi」
  11. SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」

前言

在之前的文章中介绍过了Mybatis,MBG 和 MybatisPlus 等一系列Mybatis相关的技术,有朋友在评论区提到了Jpa,也评论了SpringData Jpa 和 Mybatis 的优劣。但是方便也好,强大也好,每个技术都有自己的使用场景,所以我不在文中讨论好坏,今天带来Jpa的使用教程,各个技术大家根据需要任选。

什么是 SpringData Jpa

SpringData 简介

SpringData是SpringBoot官方默认使用的访问数据库的技术,简化了对各种数据库的访问操作,包括但不仅限于Mysql,Redis,MongoDB等。

官网地址:https://spring.io/projects/spring-data

通过官网可以看到 SpringData 能够操作的技术非常的多,除了Mysql,Redis,MongoDB,还有es,hadoop等等

那么SpringData是如何简化访问操作的呢?

在SpringData中,提供了一套统一的接口来实现对数据访问层的操作,就是Repository接口。在接口中提供了基本的CRUD,查询,排序和分页的相关操作。

SpringData 主要 API:

  • Repository<T,ID extends Serializable>:统一接口
  • RevisionRepository<T,ID extends Serializable, N extends Number & Comparable>:基于乐观锁机制
  • CrudRepository<T,ID extends Serializable>:基本CRUD操作
  • PagingAndSortingRepository<T, ID extends Serializable>:基本CRUD以及分页

简单说就是只要导入SpringData的依赖,不需要任何方法 就可以直接进行基本的数据操作,因为这些方法在接口中写好了。

但是,慢着!!!好像哪里不对

有了接口是一回事儿,如果没有实现还是不能够进行使用啊,那么SpringData 的实现哪里找呢?

想要实现方法就要找今天的主角了 SpringData Jpa。

SpringData Jpa

如图所示,对于我们的Java程序而言想要访问数据库只需要调用SpringData的统一API方法就可以,而至于调用方法之后怎么完成任务,则不需要我们担心,SpringData 针对不同的技术有很多的实现,例如:SpringData Redis,SpringData Jpa,SpringData MongoDB等,而SpringData Jpa 就是对关系型数据库的实现。

jpa全称Java Persistence Api,是一套Java EE 平台标准的ORM规范,通过Jpa可以实现对关系型数据库的访问。在Jpa 中有 JpaRepository 接口,编写接口继承JpaRepository既有crud及分页等基本功能。

Jpa和Hibernate的关系,如图所示,Jpa可以整合很多技术,Hibernate,Toplink,OpenJpa,而SpringData Jpa的默认实现就是Hibernate。

简单来说就是:SpringData Jpa 实现了 SpringData,Hibernate 又实现了 SpringData Jpa。所以最终干活的实际上是 Hibernate。

SpringBoot中Jpa的基本使用

基本使用步骤:

  1. 创建项目 导入依赖
  2. 编写实体类 添加Jpa注解配置映射关系
  3. 编写一个Dao接口来操作实体类对应的数据表(Repository)
  4. 配置Jpa
  5. 测试类测试

1.创建项目 导入依赖 配置数据源

创建项目导入如下依赖:

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <groupId>com.lby</groupId>
<artifactId>boot-jpa</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>boot-jpa</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<!-- jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency> <!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency> <!-- 测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

配置

注意:和Mybatis不同的是,在配置的数据库boot中可以先不建表,后续使用Jpa操作数据库的时候,如果发现没有表,Jpa会根据实体类帮你创建一张数据库表。

2.编写实体类 添加Jpa注解配置映射关系

通过Jpa操作数据库的数据,需要将实体类和数据库建立联系

package com.lby.bootjpa.entity;

import lombok.Data;

import javax.persistence.*;

/**
* @Data lombok 注解 生成get set 等
*
* 注解的作用:配置实体类和数据库表的映射关系
* @Entity 告诉JPA这是一个实体类(一个和数据表映射的类)
* @Table 配置当前实体类和哪张表对应;可以省略不写,如果省略默认表名就是admin
*/
@Data
@Entity
@Table(name = "admin")
public class Admin {
/**
* @Id 代表这是主键
* @GeneratedValue 主键生成规则 IDENTITY 自增
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer adminId;
/**
* 配置属性和数据库表字段的对应
* name 数据库表的字段名 可以不写 不写就是字段名就是属性名
*/
@Column(name = "username")
private String username;
@Column
private String password; }

3.编写一个Dao接口来操作实体类对应的数据表(Repository)


/**
* JpaRepository 泛型1 被操作的实体类 泛型2 主键属性的类型
*/
public interface AdminRepository extends JpaRepository<Admin,Integer> {
}

4.配置Jpa

spring:
jpa:
hibernate:
# 更新或者创建数据表结构 之前提到过,如果数据库中没做表,Jpa会我们创建 这个配置
# 就是在没有表的时候创建,实体类发生改变的话 会更新表结构
ddl-auto: update
# 配置在日志中打印出执行的 SQL 语句信息
show-sql: true

5.测试类测试

基本的配置结束,我们通过测试类简单测试一下能不能使用

package com.lby.bootjpa;

import com.lby.bootjpa.entity.Admin;
import com.lby.bootjpa.repository.AdminRepository;
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.SpringRunner; @RunWith(SpringRunner.class)
@SpringBootTest(classes = {BootJpaApplication.class})
public class BootJpaApplicationTests {
@Autowired
private AdminRepository adminRepository; @Test
public void contextLoads() {
Admin admin = new Admin();
admin.setUsername("hhh");
admin.setPassword("12345");
adminRepository.save(admin);
} }

测试类的运行结果如下

总结

Tips:本文主要讲解 SpringBoot项目中整合 SpringData Jpa的方式,关于SpringData Jpa的使用比较基础,如果想要了解更加全面的SpringData Jpa的使用,请持续关注,后续会写Jpa全面的使用教程。

恭喜你完成了本章的学习,为你鼓掌!如果本文对你有帮助,请帮忙点赞,评论,转发,这对作者很重要,谢谢。

让我们再次回顾本文的学习目标

  • 掌握SpringBoot中 SpringData Jpa 的使用

要掌握SpringBoot更多的用法,请持续关注本系列教程。

求关注,求点赞,求转发

欢迎关注本人公众号:鹿老师的Java笔记,将在长期更新Java技术图文教程和视频教程,Java学习经验,Java面试经验以及Java实战开发经验。

SpringBoot图文教程12—SpringData Jpa的基本使用的更多相关文章

  1. SpringBoot图文教程14—SpringBoot集成EasyExcel「上」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...

  2. SpringBoot图文教程15—项目异常怎么办?「跳转404错误页面」「全局异常捕获」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...

  3. SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...

  4. SpringBoot图文教程3—「‘初恋’情结」集成Jsp

    有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...

  5. SpringBoot图文教程「概念+案例 思维导图」「基础篇上」

    有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 每个知识点配套自测面试题,学完技术自我测试 本文初学向,所以希望文中所有的代码案例都能敲一遍 大哥大姐 ...

  6. 🔥SpringBoot图文教程2—日志的使用「logback」「log4j」

    有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...

  7. SpringBoot图文教程5—SpringBoot 中使用Aop

    有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...

  8. SpringBoot图文教程7—SpringBoot拦截器的使用姿势这都有

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...

  9. SpringBoot图文教程6—SpringBoot中过滤器的使用

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文系列教程技术大纲 鹿老师的Java笔记 SpringBo ...

随机推荐

  1. day42-进程池

    #进程池Pool:apply apply_async-close-join-get map callback #1.进程池Pool:执行下面代码发现任务012先执行,345后执行,因为进程池只有3个进 ...

  2. nginx相关地址

    http://www.nginx.cn/doc/      中文文档 http://nginx.org/en/docs/      英文文档 https://pan.baidu.com/s/1qWAZ ...

  3. P2967 [USACO09DEC]视频游戏的麻烦Video Game Troubles

    冲刺阶段的首篇题解! 题目链接:P2967 [USACO09DEC]视频游戏的麻烦Video Game Troubles: 题目概述: 总共N个游戏平台,金额上限V元,给出每个游戏平台的价钱和其上游戏 ...

  4. 蓝桥杯-PREV45-图形排版

    这是2017年蓝桥杯C组C++的压轴题,拿到之后没什么想法.但是蓝桥杯有部分分.所以直接敲了个大暴力提交上去过了一半的数据.后来想到了DP,但是没能实现出来,感觉还是有问题的.后来看了解题视频发现是预 ...

  5. XiaoXiao

    最开始认识孙亚龙因为他是we的对手,反向大招的琴女,被冯卓君按在地上摩擦.凭借规则优势去了上海全明星,在红方下外塔和蓝方上二塔那两次q,是他的游戏巅峰.之后他退出了游戏没有再重连,不卖肉松饼是一个承诺 ...

  6. Hadoop伪分布式HDFS环境搭建和使用

    1.环境要求 Java版本不低于Hadoop要求,并配置环境变量 2.安装 1)在网站hadoop.apache.org下载稳定版本的Hadoop包 2)解压压缩包 检查Hadoop是否可用 hado ...

  7. haproxy笔记之一:Haproxy基本安装配置(反向代理,类似Nginx,可以代理tcp的连接,不只是http)(注意iptables和selinux的问题)

    1.安装haproxy yum -y install haproxy 2.配置文件 # this config needs haproxy- or haproxy- global log 127.0. ...

  8. [CF1009F] Dominant Indices (+dsu on tree详解)

    这道题用到了dsu(Disjoint Set Union) on tree,树上启发式合并. 先看了CF的官方英文题解,又看了看zwz大佬的题解,差不多理解了dsu on tree的算法. 但是时间复 ...

  9. Linux系统添加新用户

    Linux系统中一般不直接使用root用户进行操作,需要添加新的用户. 首先,查看当前系统已有的用户 cat /etc/passwd 查看用户组 cat /etc/group 其次,添加想要的用户组和 ...

  10. Windows XP系列全下载(均为MSDN原版)

    正版windows xp sp3 下载大全(附:正版密钥) 微软MSDN Windows XP Professional下载 Windows XP Professional 简体中文 (最原始版本,无 ...