SpringBoot之使用JPA

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

JPA

Spring Data Jpa 介绍
Spring Data JPA是Spring基于Hibernate开发的一个JPA框架。如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便。但是Spring Data JPA框架功能更进一步,为我们做了 一个数据持久层框架几乎能做的任何事情。并且提供了基础的增删查方法,具体api请看官网https://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/。

简而言之:它提供了默认的简单的单表增删查方法,直接可以使用不用具体关心怎么去写sql语句的问题,但是这里修改的功能是默认没有提供的,需要自己手写实现。

实践

pom

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    </dependencies>

注意:mysql新驱动类名路径和旧版本的区别

建库建表

由于我们使用的spring data jpa 而jpa的底层实现是hibernate,用过hibernate的同学知道 hibernate可以通过实体类逆向创建表,只需要配置一下ddl-auto 就可以
所以我们需要在application.yml配置一下

server:
  port: 8989
pring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://127.0.0.1:3306/device?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true


#日志文件地址
logging:
  path: /opt/log/
  file: springbootdemo.log
  level:
    root: INFO

在上面的配置文件中 我们配置了一个数据源跟tomcat端口还有jpa的配置。其中 show-sql: true 代表会在日志中打印我们操作的sql、
而另外 ddl-auto有四个值可选,分别是

  • create 启动时删数据库中的表,然后创建,退出时不删除数据表
  • create-drop 启动时删数据库中的表,然后创建,退出时删除数据表 如果表不存在报错
  • update 最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。
  • validate 项目启动表结构进行校验 如果不一致则报错

但是数据库还是需要我们创建的,这里的test数据库需要你自行创建

类、映射、DAO

类和表映射

/**
 * 设备实体类和表的映射
 */
@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
@Entity
public class Device implements Serializable {

	private static final long serialVersionUID = -1L;
	@Id
	@GeneratedValue
	private Long id;
	@Column(name = "request", nullable = true, length = 12)
	private String request;//register
	@Column(name = "uuid", nullable = true, length = 32)
	private String uuid;//cd33-977e-c809-e03a
	@Column(name = "brand", nullable = true, length = 15)
	private String brand;//jsrz
	@Column(name = "app", nullable = true, length = 12)
	private String app;//icast
	@Column(name = "model", nullable = true, length = 12)
	private String model;//t9wan
	@Column(name = "version", nullable = true, length = 12)
	private String version;//5.1.1
// setting和getting省略


}

dao操作

DAO操作才是使用过程的核心,这也是它和mybatis不同的地方最大的区别,这里简单的操作基本JpaRepository已经实现了,只有一些特殊的操作需要我们手动创建。

/**
 * @program: springboot-demo
 * @description: dao操作
 * @author: Bamboo zjcjava@163.com
 * @create: 2019-09-07 13:33
 **/
public interface  DeviceRepository extends JpaRepository<Device, Long> {

    /**
     * 根据uuid,它会自动根据find后面的属性名称作为表中对应的字段进行查询
     * 因它的方法名命名规则就是find属性名,当然还有一些默认的是它已经实现的:findAll,findOne等
     * @param uuid
     * @return
     */
    Device findByUuid(String uuid);


    /**
     *复杂JPA操作  使用@Query()自定义sql语句  根据业务id UId去更新整个实体
     * 删除和更新操作,需要@Modifying和@Transactional注解的支持
     * 更新操作中 如果某个字段为null则不更新,否则更新【注意符号和空格位置】
     *
     *修改设备信息拼接sql如果不为空则修改原有数据
     * @param model   传入实体,分别取实体字段进行set
     * @return  更新操作返回sql作用条数
     */
    @Modifying
    @Transactional
    @Query("update Device ex set " +
            "ex.app = CASE WHEN :#{#model.app} IS NULL THEN ex.app ELSE :#{#model.app} END ," +
            "ex.brand = CASE WHEN :#{#model.brand} IS NULL THEN ex.brand ELSE :#{#model.brand} END ," +
            "ex.model = CASE WHEN :#{#model.model} IS NULL THEN ex.model ELSE :#{#model.model} END ," +
            "ex.request =  CASE WHEN :#{#model.request} IS NULL THEN ex.request ELSE :#{#model.request} END ," +
            "ex.version =  CASE WHEN :#{#model.version} IS NULL THEN ex.version ELSE :#{#model.version} END " +
            "where ex.uuid = :#{#model.uuid}")
    int updateByuuid(@Param("model") Device model);

}

updateByuuid:方法名命名规则必须操作+扩展
传入的值需要占位符#{#model.request} 形参model和属性组成

业务逻辑层

业务逻辑层的使用和mybatis使用是相同的,直接注入使用相关dao方法即可

service

/**
 * 客户端接口
 */
public interface BambooDubboService {

	/**
	 * 客户端接口
	 * @param uuid
	 */
	Device sayBamboo(String uuid);


	void saveDevice(Device device);
}

ServiceImpl

@Service
public class BambooDubboServiceImpl implements BambooDubboService {


	@Autowired
	private DeviceRepository deviceRepository;

	@Override
	public Device sayBamboo(String uuid) {
		return deviceRepository.findByUuid(uuid);
	}


	// 如果不存在该uuid的数据则插入新值
	@Override
	public void saveDevice(Device device) {
		Device deviceTmp = deviceRepository.findByUuid(device.getUuid());
		if(Objects.nonNull(deviceTmp)){
			deviceRepository.updateByuuid(device);
		}else {
			deviceRepository.save(device);
		}
	}
}

controller

MVC

import java.util.Objects;


/**
 * demo url
 * http://localhost:8080
 *
 * @author bamboo
 * @time 2019-6-27
 */
@RestController
@RequestMapping("/devmgr")
public class BambooController {
    private Log logger = LogFactory.getLog(BambooController.class);

    @Autowired
    BambooDubboService bambooDubboService;

    /**
     * 查询操作
     */
    @GetMapping("/uuid")
    public Object find(Model model, String uuid) {

        if(Objects.isNull(uuid)){
            return  "error:null param";
        }

        return bambooDubboService.sayBamboo(uuid);
    }
  /**
     * 新增和修改操作
     */
    @GetMapping("")
    public Object get(Model model, Device device) {

        if(Objects.isNull(device)){
            return  "error:null param";
        }
        bambooDubboService.saveDevice(device);
        return "success";
    }


}

启动服务即可发现,数据库中它会自动创建两个表。
devic:业务表
hibernate_sequence:自增ID的序列表

通过下面接口我们可以看到已经有数据插入进去了

http://localhost:8080/devmgr?request=register\&uuid=cd33-977e-c809-e03d\&brand=APP\&app=icast\&model=t9wan\&version=5.1.5

源码

请访问我的github
https://github.com/BambooZhang/springboot-study

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

相关推荐

在没有信用卡的情况下怎么申请谷歌云(Google Cloud)?

这笔额度足够用来跑一台云服务器、部署小型网站,甚至可以尝试 AI、机器学习等项目。但问题来了——想要拿到这 300 美元,你必须先通过支付方式验证。默认选项就是绑定一张国际信用卡(Visa、MasterCard 之类),然而不少人没有信用卡,或者信用卡无法支持国际支付,结果就卡在注册第一步。很多人会疑惑:既然是送额度,为什么还要绑卡?原因其实很简单:谷歌需要确认你是真实用户,而不是批量注册薅羊毛;通过支付验证,后续如果你用完 300 美元额度,可以直接进行付费使用;

m0_74824483的博客 5650

spring data jpa的update操作

简介  使用jpa进行update操作主要有两种方式: 1、调用保存实体的方法       1)保存一个实体:repository.save(T entity)       2)保存多个实体:repository.save(Iterable&lt;T&gt; entities)       3)保存并立即刷新一个实体:repository.saveAndFlush(T entity) 注:若是更改...

weixin_33750452的博客 2912

AI 推理与服务(AI Inference and Serving)

AI 推理和服务是现代分布式系统中的重要组成部分。通过合理应用 AI 推理和服务的最佳实践,可以显著提高系统的智能性和用户体验。本章介绍了 AI 推理和服务的核心概念、最佳实践以及在分布式系统中的应用,希望这些内容能帮助您构建更智能、更高效的分布式系统。

蜗牛沐雨 1377

SpringBoot系列教程JPA之update使用姿势

原文: 190623-SpringBoot系列教程JPA之update使用姿势 上面两篇博文拉开了jpa使用姿势的面纱一角,接下来我们继续往下扯,数据插入db之后,并不是说就一层不变了,就好比我在银行开了户,当然是准备往里面存钱了,有存就有取(特别是当下银行利率这么低还不如买比特币屯着,...

chichabang4163的博客 3627

大模型之Spring AI实战系列(一):基础认知篇 - 开启智能应用开发之旅

Spring AI 是一个轻量级开源框架,旨在简化 AI 模型在企业级 Java 应用中的集成与管理。它提供了跨多个 AI 服务提供商的便携式 API,支持聊天、文本转图像、嵌入式模型等多种功能,并兼容主流的 AI 模型提供商如 OpenAI、Google 等。Spring AI 的核心功能包括结构化输出、向量数据库支持、工具/函数调用、可观察性、文档摄取 ETL 框架、AI 模型评估等。

寻道AI,探索AI无限可能! 6356

分区补光与ISP图像调节技术

在安防监控场景中,逆光、强光、明暗不均(如门口 / 窗边的 “阴阳脸” 画面)是导致图像细节丢失的核心问题。分区补光技术通过对画面不同亮度区域精准补光,解决 “局部过曝 / 欠曝” 难题;ISP(图像信号处理器)图像调节技术则通过算法优化,提升画面色彩、对比度与细节。二者协同可实现 “硬件补光 + 算法优化” 的双重增强,是低功耗摄像机实现高清画质的关键技术组合。分区补光与 ISP 图像调节技术:原理、协同方案及安防监控应用案例。一、核心技术原理解析。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 728

SpringBoot环境下JPA的使用

SpringBoot整合jpa的使用,快速上手

m0_49261516的博客 1347

【PyQt】使用PyQt6基于Scenedetect制作视频场景自动分割应用

通过详细介绍PySceneDetect的功能和应用,本文阐释了如何利用这一工具提高视频编辑的效率。我们讨论了安装方法、命令行使用示例以及如何在Python脚本中集成PySceneDetect。此外文章还涵盖了基于PyQt6的图形界面设计,通过多线程技术处理视频,保证界面的响应性,并通过实时反馈机制提升用户体验。无论是专业的视频制作团队还是个人爱好者,PySceneDetect都提供了一种可行的、效率高的场景检测工具,让视频编辑工作变得更加简单快捷。

Mr数据杨 958

Spring Boot - JPA配置使用

1.JPA是什么 JPA顾名思义就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 2.使用JPA的优势 2.1标准化 JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的...

mxjesse的博客 3万+

FT2004(D2000)开发实战之AMD R5 230显卡驱动适配

AMD R5 230显卡驱动适配

嵌入式Linux 3194

SAP 合并报表(EC-CS)完整方法论 + 全业务操作步骤

SAP合并报表(EC-CS)方法论与操作指南摘要 SAP EC-CS模块提供完整的集团合并解决方案,其核心方法论基于会计准则和集团管控逻辑,通过6大维度构建标准化合并体系:组织架构标准化、数据采集标准化、外币换算规则化、内部交易自动化抵消、股权与商誉规范化、报表出具灵活化。 实施过程分为两个阶段: 上线前配置阶段(12个步骤):包括合并架构搭建、科目表配置、外币规则设定、抵消规则定义等基础工作 日常操作阶段(10个步骤):涵盖数据报送、外币换算、内部对账、自动抵消、调整分录等月结流程 系统优势包括: 支持多

金牌架构师 1362

spring boot 中使用 jpa以及jpa介绍

最近在项目中使用了一下jpa,发现还是挺好用的。这里就来讲一下jpa以及在spring boot中的使用。 在这里我们先来了解一下jpa。1.什么是jpa呢?JPA顾名思义就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 2.jpa具有什么优势?2.1标准化 JPA 是 JCP 组织发布的 Java

深存少年梦 28万+

14.建立时间、保持时间以及vivado时序report的参考使用

在设计数字系统时,需要仔细考虑电路元件的选择和布局以及时序设计来满足建立时间和保持时间的要求。建立时间,又称为建立时间窗口或建立期,是指数字信号在触发器的时钟信号前沿到来之前,必须已经稳定存在的时间。在本章节将结婚扫建立时间和保持时间的基本原理,以及如何通过vivado处理建立时间和保持时间。通过使用同步电路,可以更好地控制数据传输的时序并满足建立时间和保持时间的要求。例如,在D触发器中,选择具有适当充电和放电特性的D端口元件可以确保在时钟信号前沿到达前数据已经稳定存在,并在时钟信号前沿到达后保持稳定。

FPGA/MATLAB学习教程/源码/项目合作开发 2984

Spring Boot 实战(9) springboot 整合 JPA

这篇博客介绍了在 springboot 中如何整合 JPA,并有完整的代码实现。

扬帆向海的博客 2万+

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

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SpringBoot集成JPA及基本使用

本篇从JDBC、ORM、JPA、Spring Data JPA说起,分享了SpringBoot集成JPA的实现、Repository的命名规则以及InvalidDefinitionException异常的处理

JingAi_jia917的博客 5557

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SpringBoot学习(5)Spring boot Jpa使用

Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的局面。值得注意的是,Jpa是在充分吸收了现有 Hibernate,TopLink,JDO 等 ORM 框架的基础上发展而来的,具有易于使用,伸缩性强等优点。

L08130421的博客 3595

【Springboot系列】SpringBoot整合Jpa

Spring Boot是一种快速开发框架,它简化了Java应用程序的开发过程。而Jpa(Java Persistence API)是Java持久化规范的一种实现,它提供了一种方便的方式来访问和操作数据库。将Spring Boot与Jpa整合可以更加方便地进行数据库操作,提高开发效率。本文将介绍如何使用Spring Boot整合Jpa,帮助读者快速上手并应用于实际项目中。Jpa(Java Persistence API)是Java持久化规范的一种实现,它提供了一种方便的方式来访问和操作数据库。

Venus's Blog 1万+

什么是JPA?SpringBoot 中使用JPA

Java Persistence API)Java持久化API,是一套Sun公司Java官方制定的ORM(sun公司并没有实现)。(Object Relational Mapping)为对象关系映射,是一个实现使用对象操作数据库的设计思想。其作用是在操作数据库之前,先把数据表与实体类关联起来,然后通过实体类的对象操作(增删改查)数据库表。既然JPA是一套规范,也就意味着它只是一套实现ORM理论的接口,。那么我们必须要有具体的实现者。......

someday____的博客 7013

spring boot 六:SpringBoot整合JPA

spring boot 六:SpringBoot整合JPA 1 前言 依赖配置 <!-- SpringBoot整合JPA依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dep

a232884c的博客 1825

Spring Boot 整合 JPA项目中使用的 JPA 版本与数据库不兼容。

在 Spring Boot 整合 JPA 时,确保所使用的 JPA 版本与数据库版本兼容是十分重要的。

Java开源程序猿 2337

SpringBoot集成jpa 一篇就够了 超详细

SpringBoot集成jpa 网上有很对jpa的介绍,但是都不是很全,这边根据公司的实际使用情况进行的总结。 JPA、Hibernate、Spring data jpa之间的关系 主要参考https://my.oschina.net/u/3080373/blog/1828589 大家可以读一下这篇文章 什么是JPA? 全称Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。 为我们提供了: 1)ORM映射元数据:JPA支持XML

cmx1060220219的博客 8万+

SpringBoot-整合 JPA

JPA(Java Persistence API)意即 Java 持久化 API,是 Sun 官方在 JDK5.0 后提出的 Java 持久化规范(JSR 338,这些接口所在包为 javax.persistence,详细内容可参考。JPA 的出现主要是为了简化持久层开发以及整合 ORM 技术,结束 Hibernate、TopLink、JDO 等 ORM 框架各自为营的局面。JPA 是在吸收现有 ORM 框架的 基础上发展而来,易于使用,伸缩性强。

逍遥人世欢 1726

springboot jpa 查询慢_如何在Spring Boot中使用Spring Data JPA?

在本文中,我们将使用Spring Data JPA和Spring Boot与MariaDB数据库进行通信。依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> &lt...

weixin_39550937的博客 1285

Spring Boot(三):Spring Boot Jpa的介绍及Jpa的使用

Spring Boot Jpa 介绍 首先了解 Jpa 是什么? Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的局面。 值得注意的是,Jpa是在充分吸收了现有 Hibernate,TopLink,JDO 等 ORM 框架的基础

weixin_52841956的博客 8583

Spring Boot 中的 JPA 是什么,如何使用

JPA 提供了一种简单易用、高效性和可移植性的 ORM 解决方案,可以使得开发者更加专注于业务逻辑的实现。在 Spring Boot 中,使用 JPA 进行数据持久化操作也变得更加容易,只需要添加依赖、配置数据源、创建实体类和 Repository 接口,即可使用其提供的方法对数据库进行操作。JPA 提供了许多注解来映射实体类与数据库表之间的关系,开发者可以根据实际需求进行选择和使用。附:完整代码示例。

程序猿徐师兄的博客 1446
上一篇: 阿里云CentOS7 64位下安装MySQL5.7
下一篇: 常用java技术栈
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值