Spring Boot 系列(九)数据层-集成Spring-data-jpa

实际开发中,不可避免地会对数据进行反复的增删改查操作,然而这部分工作是十分繁琐枯燥的。那么,随即而生的ORM框架就能很好的解决这个问题。
我们常用的ORM框架有:Hibernate、Mybatis、Jpa 等。本文介绍SpringBoot 中集成 Jpa 框架。

集成 JPA (Java Persistence API) ,持久层框架。

Spring-data-jpa 依赖于 Hibernate,对Hibernate有一定的了解有助于使用JPA框架。

一、pom.xml添加依赖

<!-- mysql数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.21</version>
</dependency>

<!-- 数据层 Spring-data-jpa -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
查看spring-boot-starter-data-jpa的具体依赖,可以发现有依赖hibernate

二、配置数据库连接信息

#数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
如果你熟悉hibernate,那么会清楚spring.jpa.properties.hibernate.hbm2ddl.auto 的作用
# 配置指定对数据库表结构的处理方式,值有:create、create-drop、update、validate 
#
# create:每次加载hibernate的时候,都会重新根据模型生成表。如果表已存在,会先删除该表再生成。
# create-drop:启动项目加载hibernate的时候,会生成表。停止项目时,会把生成的表删除掉。
# update:常用属性。每次加载hibernate的时候,会生成表。如果表存在,会根据模型的属性变化来更新表结构,这个过程不会做删表处理。
# validate:每次加载hibernate的时候,会检查表结构,但不会生成表。

三、创建实体类,并使用注解进行映射。

package com.sam.demo.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

/**
 * @author sam
 * @since 2017/7/18
 */
@Entity
@Table(name = "t_person")  //指定表名
public class Person {

    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column
    private int age;

    // getter & setter
}

四、创建 PersonRepository 接口 继承 JpaRepository

package com.sam.demo.repository;

import com.sam.demo.domain.Person;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

/**
 * @author sam
 * @since 2017/7/18
 */
public interface PersonRepository extends JpaRepository<Person, Long> {

    Person findByName(String name);

    Person findByNameAndAge(String name, int age);

    @Query("FROM Person p WHERE p.id=:id")
    Person findPersonById(@Param("id") Long id);

}
PersonRepository 继承了 jpa提供的 JpaRepository。查看JpaRepository可以发现,已经封装好了基本的增删改查操作,直接使用即可。

JpaRepository.png

除了默认提供的增删改成之外,jpa 还提供了极其简便的方式来自定义查询等方法(不需要编写任何sql语句):
如上面的 Person findByName(String name) 方法,JPA 会根据方法名(驼峰式),解析出相应的sql语句进行具体的查询操作。
当我们需要执行复杂的语句的时候,我们还可以使用 @Query() 创建自定义sql语句查询:
@Query("FROM Person p WHERE p.id=:id"),查询语句与hibernate的HQL语句相同,可以通过 :id 来绑定 @Param("id") 的参数。

五、controller 中使用 PersonRepository

package com.sam.demo.controller;

import com.sam.demo.domain.Person;
import com.sam.demo.repository.PersonRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author sam
 * @since 2017/7/16
 */
@RequestMapping("/person")
@RestController
public class PersonController {

    @Autowired
    private PersonRepository personRepository;

    @RequestMapping(method = RequestMethod.GET)
    public Person index() {

        Person person = new Person();
        person.setName("sam");
        person.setAge(25);

        //保存person
        personRepository.save(person);

//        Person temp = personRepository.findPerson(1l);
        Person temp = personRepository.findByName("sam");

        return temp;
    }

}
访问:http://localhost:8080/person 正确返回:
{"id":1,"name":"sam","age":25}
到此,基本完成了Spring Boot 集成 Spring-data-jpa 框架。
Spring-data-jpa 详细使用请参考:Spring Data JPA 官方文档

版权声明:本文为博主原创文章,转载请注明出处。

转载于:https://www.cnblogs.com/magicalSam/p/7205652.html

【Spring Boot】SpringBoot和数据库交互: 使用Spring Data JPA 在本博客中,我们详细探索了Spring Data JPA在Spring Boot中的应用。从传统数据库交互到现代化的JPA方式,再到实体的创建、数据访问和事务管理,每一步都进行了深入解析。通过实际案例,明确展示了从建模到数据访问的全流程。同时,也针对常见问题,如N+1查询,给出了解决建议。此文旨在帮助开发者更有效地利用Spring Data JPA,简化数据库操作,提高开发效率。 阅读详情

相关推荐

SpringBoot系列:Spring Boot集成Spring Data JPA

既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。

2401_84048895的博客 971

Spring Boot 系列 - 数据层 集成Spring-data-jpa

实际开发中,不可避免地会对数据进行反复的增删改查操作,然而这部分工作是十分繁琐枯燥的。那么,随即而生的ORM框架就能很好的解决这个问题。 我们常用的ORM框架有:Hibernate、Mybatis、Jpa 等。本文介绍SpringBoot 中集成 Jpa 框架。 集成 JPA (Java Pe...

chiyan5284的博客 233

Spring Boot示例 - 2. 使用Spring Boot + Spring Data REST + Spring Data JPA构建符合HATEOAS规范的REST应用

一、概述一般使用Spring MVC + Spring Data JPA即可构建REST服务,但是这种方式要完整实现Controller层,Service层和Repository层,需要编写很多样板代码,诸如注释,XML配置等。 使用Spring Data REST可以轻松构建超媒体驱动(hypermedia-driven)的REST服务。 Spring Data REST本身是个Spring

qiutongyeluo的专栏 8400

SpringDataJpa系列一之初识及入门案例搭建

本文章参考文档为《SpringDataJpa从入门到精通》 首先, 我觉得入门SpringDataJpa的话, 我们首先要理清楚。 JPA、Hibernate和SpringDataJpa的关系。 什么是JPA? 全称Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。 但是它只是提供了一种规范, 而Hibernate...

程序员大航子 2905

Spring Boot 菜鸟教程 2 Data JPA

Spring Data JPA 用来简化创建 JPA 数据访问层和跨存储的持久层功能。 官网文档连接 http://docs.spring.io/spring-data/jpa/docs/current/reference/html/ Spring Data JPA提供的接口 Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组

菜鸟教程 9701

springboot 整合 spring-data-jpa 案例-入门

springboot学习,spring学习,springboot 整合spring-data-jpa

段子手168的博客 615

SpringData JPA 快速入门案例详解

JPA(Java Persistence API)是 Java 持久层规范,定义了一些列 ORM 接口,它本身是不能直接使用的,因为接口需要实现才能使用,Hibernate 框架就是实现 JPA 规范的框架。

zp8126的专栏 2652

海康工业相机使用:常见问题及解决方法

工业相机在使用过程中,经常会因为操作不当、使用环境不当等原因出现一些问题,本篇教程,主要针对海康工业相机常见问题及其定位方法做以简单介绍,希望可以帮助大家。 注:该教程对其他品牌工业相机“常见问题”排查,也具备一定的指导意义。 当出现无法通过客户端发现设备或者无法预览图像等问题,先确认当前的运行环境是否满足以下要求: 确认装有相机驱动软件的电脑网卡为千兆网卡(Gige接口相机); 确认网卡是否已开启巨型帧; 确认电脑与网口相机之间的网络链路为千兆; 确认装有相机驱动软件的USB接口为3...

Cche的博客 3万+

SpringData Hibernate JPA 使用案例 案例 (一)

用之前的hibernate,如果我们需要修改持久化层,需要修改很多配置以及代码,由此SpringData推出了JPA的功能。这里建议命名为hibernate.cfg.xml,我存放的目录在resource/hibernate/hibernate.cfg.xml。单元测试testR_lazy懒加载,load懒加载当执行到对应查询时系统才会执行查询,而find会先执行查询。查看效果:可以看到两种不同的单元项都可以对数据库进行操作,而底层都是基于hibernate来实现的。添加另一种jpa的依赖。

qq_50909707的博客 912

Linux下Linpack测试GPU和CPU性能

前面的文章已经介绍了如何搭建Linpack环境:https://blog.youkuaiyun.com/liu_feng_zi_/article/details/107429720 接下来说明如何使用 一、编写运行脚本: 新建文件:run_linpack.sh,内容如下: export HPL_DIR =/root/LHC/Linpack/hpl-2.0_FERMI_v15 export MKL_NUM_THREADS=6 export OMP_NUM_THREADS=6 export MKL_DYNAMI.

liu_feng_zi_的专栏 4633

TB6600驱动器共阴共阳接法傻傻分不清?一张图搞定STM32与42步进电机的接线避坑指南

本文详细解析了TB6600驱动器共阴共阳接法的本质区别,提供了STM32与42步进电机的高效连接方案。通过实际案例和接线图示,帮助读者避免常见错误,确保驱动器与MCU的安全连接,提升项目稳定性。

weixin_28710999的博客 244

Java Web开发进阶——Spring Boot与Spring Data JPA

Spring Data JPA 是 Spring Data 项目中的子项目,旨在简化与 JPA(Java Persistence API)的集成。它在标准 JPA 的基础上提供了更高层次的抽象,开发者可以使用极少的代码实现复杂的数据操作。Spring Data JPA 是 Spring 提供的一种面向数据访问的持久化框架,它简化了 JPA 的实现,为开发者提供了一种快速操作数据库的方式。Spring Data JPA 的强大之处在于其灵活的查询方式,支持方法派生、JPQL 和原生 SQL。

好看资源网的博客 2243

用友U8其中一个账套提示演示期已到期-修复方法

【事件始末】 一朋友求助,反馈使用的用友U8,很多年了! 突然发现其中账套2021年的一个账套打不开,提示演示期限已到期! 但是其他账套完全正常,可以打开,没有任何问题。 不管是还原老旧备份,还是重装软件问题依旧,无法自己解决。 客户查询报表结算账期,情况比较紧急,于是求助我们。 经过多次反复琢磨和烟酒,终于于晚上23点59分给弄了出来,也总是圆满解决问题了。 【问题分析】 该用户打的是 U82X免狗补丁,估计是该补丁文件设置了 最大有效期,补丁到期了导致的。 也有可能是程序...

u010431289的博客 2万+

Spring Boot下的Spring Data JPA实战详解

1.点睛Spring Data JPA(1).什么名字是Spring Data JPA Spring Data JPA是Spring基于Hibernate开发的一个JPA框架,Spring Data JPA是Spring Data的一个子项目,它通过提供基于JPA的Repository极大地减少了JPA作为数据访问方案的代码量,也就是xml不需要再写很多常规的sql代码了。(2).定义数据访问层

c136547731的博客 2809

OpenClaw实操:给网站装上“智能眼睛”?手把手教你用OpenClaw实时监控网站

本文介绍如何在Windows系统使用OpenClaw构建智能网站监控助手。手把手教你通过配置本地AI模型,让openclaw构建的ai助手自动检测指定网页的内容变化,理解更新重要性,并及时通过邮件、微信、Telegram等渠道发出预警,让你第一时间掌握关键信息,彻底告别手动刷新。

plawuyue的博客 2162

实战拆解:RAG vs Agent在金融风控中的性能对比

2024年上半年我帮某华东地区城商行做零售交易反欺诈系统升级时,技术团队曾发生过一次激烈争论:一派认为应该优先上RAG(检索增强生成)方案,成本低、落地快、合规性好;另一派坚持要上Agent(智能体)方案,推理能力强、能应对复杂新型欺诈。最终我们做了完整的AB测试,结论是两者没有绝对的优劣,只有场景适配的差异:RAG适合高并发、低时延的实时风控场景,Agent适合低并发、高准确率要求的事后核查/大额审批场景,两者结合的 hybrid 方案能覆盖95%以上的风控需求。本文我会结合真实项目的测试数据,从核心概念

AI天才研究院 251

Spring Boot整合Spring Data JPA

Spring Data中按照框架的规范自定义了Repository接口,除了可以使用接口提供的默认方法外,还可以按特定规则来定义查询方法,只要这些查询方法的方法名遵守特定的规则,不需要提供方法实现体,Spring Data就会自动为这些方法生成查询语句。Spring Data对这种特定的查询方法的定义规范如下:以find、read、get、query、count开头。涉及查询条件时,条件的属性使用条件关键字连接,并且条件属性的首字母大写。

daqi1983的博客 1590

QT6与QT5安装全攻略:从下载到环境配置一站式指南

本文提供了一份详尽的QT6与QT5安装教程,涵盖从版本选择、在线安装器使用到环境变量配置的全过程。针对新手常见痛点,重点对比了QT6与QT5的安装差异,并给出了MinGW与MSVC编译器的选择建议,旨在帮助开发者快速搭建稳定可用的QT开发环境,避免常见错误。

weixin_29216353的博客 309

Spring Data JPA详解

Spring Data是持久层通用解决方案,支持关系型数据库 Oracle、MySQL、非关系型数据库NoSQL、Map-Reduce 框架、云基础数据服务 、搜索服务等。

JAVA_KX的博客 3289

一文搞懂蚁群算法Ant Colony Optimization(ACO)!!!(灵感起源+数学原理+代码实现+实战应用)

本文系统介绍了蚁群算法的原理与实现。首先从蚂蚁觅食行为出发,阐释了信息素正反馈机制如何引导群体找到最短路径。随后详细解析了算法的数学模型,包括状态转移规则和信息素更新机制。通过MATLAB代码演示了算法在旅行商问题(TSP)中的应用,展示了路径构建和优化的完整流程。最后讨论了算法的优势、局限性和实际应用场景。蚁群算法通过模拟生物智能,为解决复杂优化问题提供了一种高效方法,其核心在于信息素的正反馈机制与随机探索的平衡。

qq_42212808的博客 887

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring Data JPA

快速入门spring data jpa,并且集成到Springboot

llg3189609554的博客 1431

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Spring Boot 整合 Spring Data JPA、strategy 的策略区别、什么是 Spring Data JPA

Spring Boot 整合 Spring Data JPA、strategy 的策略区别、什么是 Spring Data JPA

hutao8896的博客 1113

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

深入解析 Spring Boot 数据访问:Spring Data JPA 与 MyBatis 集成实战

摘要 本文深入对比了Spring Boot中两种主流数据访问技术:Spring Data JPA和MyBatis。Spring Data JPA基于JPA规范,提供面向对象的高抽象级别方案,支持零实现CRUD操作和声明式查询;而MyBatis作为半自动化ORM框架,提供SQL完全控制权,适合复杂查询场景。文章详细介绍了两者的集成步骤、核心概念和应用场景,包含代码示例和性能考量,帮助开发者根据项目需求选择合适的技术栈。通过专业的原理剖析和最佳实践指导,为中高级Java开发者提供了数据访问层的完整解决方案。

刘一说的IT专栏 1373

06 Spring Boot整合 Spring Data JPA

JPA (Java Persistence API) : 是Sun 官方提出的Java 持久化规范。Spring Data JPA 是Spring Data 的一个子项目,通过提供基于JPA 的Respository极大地减少了JPA 作为数据访问方案的代码量。 通过Spring Data JPA 框架, 开发者可以省略实现持久层业务逻辑的工作,唯一要做的就是声明持久层的接口,其他都交给Spri...

数据知道的博客 2万+
上一篇: Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理
下一篇: Nginx 配置https 服务
CAD201213
博客等级 码龄12年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值