SpringBoot 快速整合SpringDataJPA (基础篇)

2023-11-10

序言:
SpringDataJPA秉承大道至简的设计理念,给我们的数据层开发带来的极大的便利。诸如基于注解就可完成实体-数据库的映射关系,提供自带的通用Repo接口、接口方法约定名称即可实现数据访问等特性都是值得称赞的功能。

正文:Spring Data JPA 实战步骤

1.引入依赖

在pom.xml 中添加ORM框架(JPA)和数据库驱动(MySQL-Conn)的依赖。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--继承信息 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.M4</version>
        <relativePath/>
    </parent>
    
    <!--依赖管理 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

2. 添加数据源

在application.yml 添加数据源信息,具体如下:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/socks?useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

3. 编写数据层代码

—— 以前我们自己定制模板
在此之前,我们往往需要自行设计通用仓库的接口并添加对应的实现,这样做的目的是,方便让每个子仓库中继承这个通用模板,以减少我们重复的代码量。
—— 现在我们直接使用模板
这种跟业务无关的东西,通用性极高,符合约定大于配置的理念。所以SpringDataJPA 直接为我们提供了通用仓库的接口(JpaRepository)并添加了对应的实现(SimpleJpaRepository)。

具体代码:
在仓库中添加用户接口,然后继承通用仓库接口JpaRepository,即可获得通用的增删改查功能。例如findAll 、getOne 等常用方法。

public interface UserRepository extends JpaRepository<User, String> {

    List<User> findByUsername(String username);
}

注:SpringDataJPA 的亮点其实并不只有通用仓库这么简单,例如接口方法约定名称即可完成数据访问也是一个大道至简的设计体现,更多细节和亮点可查阅 Spring Data JPA 参考指南

4. 添加数据库记录

在Navicat 连接本地数据库,随便打开查询窗口,然后执行脚本内容,如下:

DROP DATABASE IF EXISTS `socks`;
CREATE DATABASE `socks`;
USE `SOCKS`;
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `USER_ID` varchar(50) ,
  `USERNAME` varchar(50) ,
  `PASSWORD` varchar(50) 
) ;

INSERT INTO `t_user` VALUES ('1', 'admin', 'admin');
INSERT INTO `t_user` VALUES ('2', 'yizhiwazi', '123456');

5. 启动项目

在启动项目前,记得先添加好数据库socks和用户表t_user ,并插入几条测试数据。准备好数据后,启动项目,测试相关接口。

@SpringBootApplication
@EnableJpaRepositories("com.hehe.repository") //指定仓库的扫描路径
public class JpaApplication {

    public static void main(String[] args) {
        SpringApplication.run(JpaApplication.class, args);
    }
}

6. 单元测试

import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@SpringBootTest
public class JpaApplicationTest {
    @Autowired
    UserRepository userRepository;
    @Test
    public void testuser() {
        //添加测试数据
        userRepository.save(new User("1111","test-data-jpa","first-pass"));
        userRepository.save(new User("9527","test-data-jpa","second-pass"));
        //开始进行测试
        assertThat(userRepository.existsById("9527")).isEqualTo(true);
        assertThat(userRepository.findByUsername("test-data-jpa").size()).isEqualTo(2);
    }
}

文档资料

源码下载:SpringDataJPA+通用CRUD+实战示例

专题阅读:《SpringBoot 布道系列》

转载于:https://my.oschina.net/abcijkxyz/blog/3057149

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

SpringBoot 快速整合SpringDataJPA (基础篇) 的相关文章

随机推荐

  • docker stats监控容器资源消耗

    在容器的使用过程中 如果能及时的掌握容器使用的系统资源 无论对开发还是运维工作都是非常有益的 幸运的是 docker 自己就提供了这样的命令 docker stats 默认输出 docker stats 命令用来显示容器使用的系统资源 不带
  • 完全理解搜索/排序/查找二叉树的插入、查找、删除

    目录 一 插入 一 实现原理 二 代码实现 二 查找 一 实现原理 二 代码实现 三 删除 一 实现原理 二 代码实现 这种二叉树名字太多了 小编这里统一叫做搜索二叉树了 首先让我们看看搜索二叉树长什么样子 图片来源 二叉树 二叉排序树 简
  • iOS 蓝牙连接 connectionSupervisionTimeout 是720ms 还是 2~6s

    对比 HCI可以看到iPhone作为主设连接外设时 可以看到 connection Event Interval 30ms connection Slave Latency 0 connection Supervision Timeout
  • 最全position定位方式解析

    position 定位方式 position static position relative position absolute position fixed position inherit position initial posit
  • 复制tr的一行数据或者复制数据使用,使用jq和php

    效果图 2 Html foreach from arrs key kk item vv tr td style text align center 1 td td style text align center 2 td td style
  • echarts--自定义tooltip数据undefined问题以及调用params.data遇到的问题

    问题 在自定义tooltip设置数据时 通过params xxx获取数据 出现undefined问题 图表的数据 pieChartData map item gt let obj value item data name item url
  • Wmware安装虚拟机出现attempting to start up from

    有很多小伙伴在安装windows是会出现一个attempting to start up from提示 然后就会进入一个蓝色的页面 也就是下边这两张图 这时候会让你选择在这时候有很多小伙伴就懵了 下边我提供两种解决方法 大家可以根据自己的喜
  • TensorFlow与cudnn不匹配 :Loaded runtime CuDNN library: 7.5.1 but source was compiled with: 7.6.0

    win10 cuda10 0 130 cudnn原来是按照其他博客 安装的是7 5 1 在anaconda虚拟环境中已经成功安装TensorFlow gpu 1 15 但是用这个虚拟环境运行我的程序的时候出现了Loaded runtime
  • 循环神经网络——下篇【深度学习】【PyTorch】【d2l】

    文章目录 6 循环神经网络 6 7 深度循环神经网络 6 7 1 理论部分 6 7 2 代码实现 6 8 双向循环神经网络 6 8 1 理论部分 6 8 2 代码实现 6 9 机器翻译 6 9 1 理论部分 6 10 编码器解码器架构 6
  • Cookie的注册登录

    先写一个要跳转的index jsp
  • 上传,下载 javaMail

    上传 1 上传对表单限制 method post enctype multipart form data 表单中需要添加文件表单项
  • cmake交叉编译个人工程模板

    cmake交叉编译个人工程模板 文章目录 cmake交叉编译个人工程模板 初衷 1 主目录模板1 2 主目录模板2 有支持子目录的功能 3 子目录模板 初衷 由于目前写的一些c c 程序需要考虑跨平台 并且我目前接触的主要是cmake 并且
  • 后端调用接口报响应头解析错误 ProtocolException: Invalid header: Server处理方式

    问题场景 在程序后端调用外部接口时 通过域名代理访问接口能正常调用返回 通过ip端口直连访问报ProtocolException Invalid header Server异常 问题原因 外部接口可能考虑安全因素 将响应头中的服务器信息给隐
  • Jmeter —— 自动录制脚本

    目录 1 Jmeter配置 1 1新增一个线程组 1 2Jmeter中添加HTTP代理 1 3配置HTTP代理服务器 2 录制脚本 2 1配置本地代理 2 2访问页面进行操作 2 3脚本处理 1 Jmeter配置 1 1新增一个线程组 1
  • TOF/结构光camera区别、TOF同时成像深度图、IR图原理?

    TOF 结构光camera区别 参考 https zhuanlan zhihu com p 51218791 TOF是通过红外光发射器发射调制后的红外光脉冲 不停地打在物体表面 经反射后被接收器接收 通过相位的变化来计算时间差 进而结合光速
  • 【Qt】串口通讯

    Qt串口通信基础及名词说明 1 串口通信 1 波特率 2 数据位 3 停止位 4 奇偶校验位 2 名词介绍简单版 1 起始位 2 数据位 3 校验位 4 停止位 5 空闲位 2 Qt串口通信模块QtSerialPort简介 1 QSeria
  • Jmeter--记录一个使用CSV Data Set Config犯的低级错误

    关于Jmeter的这个元件CSV Data Set Config网上已有大量篇幅的文章去接受 并且介绍的都挺详细 这里就不再介绍 这里主要介绍第一次使用此元件时犯的错误 当脚本完成后 点击运行 但是在察看结果树中没有发现运行结果 可以说点击
  • SpringBoot 如何保证接口安全?老鸟们都是这么玩的!

    为什么要保证接口安全 对于互联网来说 只要你系统的接口暴露在外网 就避免不了接口安全问题 如果你的接口在外网裸奔 只要让黑客知道接口的地址和参数就可以调用 那简直就是灾难 举个例子 你的网站用户注册的时候 需要填写手机号 发送手机验证码 如
  • 23年找工作的心酸历程

    前几天在脉脉上看到一个热议话题 23年找工作的心酸历程 大家都知道近几年互联网大环境不好 找工作变得越来越卷了 就算是BAT这种大厂出来的 也不见得就有多好找工作 可想而知 如果你的背景和能力不是特别强 很有可能练简历关都过不了 特别是工作
  • SpringBoot 快速整合SpringDataJPA (基础篇)

    序言 SpringDataJPA秉承大道至简的设计理念 给我们的数据层开发带来的极大的便利 诸如基于注解就可完成实体 数据库的映射关系 提供自带的通用Repo接口 接口方法约定名称即可实现数据访问等特性都是值得称赞的功能 正文 Spring