SpringBoot 中使用JPA

最近忙里偷闲,想写一点关于JPA的东西,另外也加深下对JPA的理解,才有了此篇博文。

一、JPA

JPA (Java Persistence API)Java持久化API,是一套Sun公司Java官方制定的ORM 规范(sun公司并没有实现)。

JPA 是一个基于O/R映射的标准规范,所谓规范即只定义标准规则(如注解、接口),不提供实现,软件提供商可以按照标准规范来实现,而使用者只需按照规范中定义的方式来使用,而不用和软件提供商的实现打交道。Spring Data Jpa则是在JPA之上添加另一层抽象(Repository层的实现),极大地简化持久层开发及ORM框架切换的成本

JPA的出现有两个原因:

(1)简化现有Java EE和Java SE应用的对象持久化的开发工作; Sun希望整合对ORM技术,实现持久化领域的统一。

(2)JPA的主要实现有Hibernate、EclipseLink 和OpenJPA 等,这也意味着我们只要使用JPA来开发,无论是哪一个开发方式都是一样的。

JPA作用通过对象来操作数据库(不用编写sql语句)好处不同的数据库的SQL语法是有差异,如果不需要编写SQL语句,就可以屏蔽各种数据库SQL的差异

二、项目实例

1、GoodsDo

import lombok.Data;
import javax.persistence.*;/*** 商品类** 对应数据库中的goods表*/
@Entity
@Table(name = "goods")
@Data
public class GoodsDo {/*** 商品id** 该字段对应数据库中的列为主键* 主键自增长* 对应goods表中的id列*/@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "id")private Long id;/*** 商品名称** 对应goods表中的name列*/@Column(name = "name")private String name;/*** 商品价格** 对应goods表中的price列*/@Column(name = "price")private String price;/*** 商品描述** 对应goods表中的pic列*/@Column(name = "description")private String description;
}

2、GoodsService

public interface GoodsService {/*** 新增商品*/void add(GoodsDo goods);/*** 删除商品*/void remove(Long id);/*** 编辑商品信息*/void edit(GoodsDo goods);/*** 按id获取商品信息(Optional是一个包装类,它的内容是空或者包含的对象,所以可以避免空指针问题)*/Optional<GoodsDo> getById(Long id);/*** 获取商品信息列表*/Iterable<GoodsDo> getList();
}

3、IGoodsDao

通过继承 CrudRepository 实现 CRUD 操作。泛型参数分别为实体类及主键的数据类型。
注意此时已经可以通过 IGoodsDao 对数据库 goods 表进行增删改查操作了。

@Repository
public interface IGoodsDao extends CrudRepository<GoodsDo,Long> {
}

4、GoodsServiceImpl

@Service
public class GoodsServiceImpl implements GoodsService {@Autowiredprivate IGoodsDao goodsDao;@Overridepublic void add(GoodsDo goods) {goodsDao.save(goods);}@Overridepublic void remove(Long id) {goodsDao.deleteById(id);}@Overridepublic void edit(GoodsDo goods) {goodsDao.save(goods);}@Overridepublic Optional<GoodsDo> getById(Long id) {return Optional.empty();}@Overridepublic Iterable<GoodsDo> getList() {return null;}
}

5、GoodsController

@RestController
public class GoodsController {@Autowiredprivate GoodsService goodsService;/*** 按id获取商品信息*/@GetMapping("/goods/{id}")public Optional<GoodsDo> getOne(@PathVariable("id") long id) {return goodsService.getById(id);}/*** 获取商品列表*/@GetMapping("/goods")public Iterable<GoodsDo> getList() {return goodsService.getList();}/*** 新增商品*/@PostMapping("/goods")public void add(@RequestBody GoodsDo goods) {goodsService.add(goods);}/*** 编辑商品*/@PutMapping("/goods/{id}")public void update(@PathVariable("id") Long id, @RequestBody GoodsDo goods) {// 修改指定id的博客信息goods.setId(id);goodsService.edit(goods);}/*** 移除商品*/@DeleteMapping("/goods/{id}")public void delete(@PathVariable("id") long id) {goodsService.remove(id);}
}

三、项目结构及单元测试

1、项目结构

在这里插入图片描述

2、JpaApplicationTests

@SpringBootTest
public class JpaApplicationTests {@Autowiredprivate IGoodsDao goodsDao;/*** 新增测试*/@Testpublic void testAdd() {GoodsDo goods = new GoodsDo();goods.setName("大力金刚丹");goods.setDescription("金刚丹活血化瘀");goods.setPrice("18888");GoodsDo result = goodsDao.save(goods);System.out.println("新增商品id:" + result.getId());}
}

在这里插入图片描述
在这里插入图片描述

3、源码下载

源码奉上,欢迎star!
MyIdea

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

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

相关文章

为什么mac上有的软件删除不掉?

对于Mac用户来说&#xff0c;软件卸载通常是一个相对简单的过程。然而&#xff0c;有时你可能会发现某些软件似乎“顽固不化”&#xff0c;即使按照常规方式尝试卸载&#xff0c;也依然存在于你的电脑上。这到底是为什么呢&#xff1f;本文将探讨这一问题的可能原因。 1.卸载失…

C#制做一个 winform下的表情选择窗口

能力有限&#xff0c;别人可能都是通过其他方式实现的&#xff0c;我这里简单粗暴一些&#xff0c;直接通过点击按钮后弹出个新窗体来实现。 1、先在form1上增加一个toolstrip控件&#xff0c;再增加个toolstripbutton按钮&#xff0c;用来点击后弹出新窗体&#xff0c;如图&a…

智能井盖传感器:城市安全卫士

随着城市人口的不断增加和城市基础设施的不断发展&#xff0c;井盖作为城市道路和排水系统的重要组成部分&#xff0c;承担着确保城市安全和便利性的关键角色。然而&#xff0c;井盖在日常使用中常常面临倾斜、水浸和翻转等问题&#xff0c;这些问题可能导致交通阻塞、行人坠井…

小谈设计模式(20)—组合模式

小谈设计模式&#xff08;20&#xff09;—组合模式 专栏介绍专栏地址专栏介绍 组合模式对象类型叶节点组合节点 核心思想应用场景123 结构图结构图分析 Java语言实现首先&#xff0c;我们需要定义一个抽象的组件类 Component&#xff0c;它包含了组合节点和叶节点的公共操作&a…

Windows配置ADB工具

一、目的 在进行嵌入式开发时&#xff0c;我们经常使用ADB工具登录到开发板上进行命令操作&#xff0c;本篇我们介绍如何在windows平台配置ADB环境。 二、实战 1.下载adb工具包​​​​​​​https://developer.android.com/studio/releases/platform-tools?hlzh-cnhttps://d…

任务工单发送失败重试方案设计

需求背景&#xff1a; 该系统为一个工单系统&#xff0c;其中任务工单为该系统中的一个模块&#xff1b;任务工单它是需要周期性调度的一种任务类型&#xff1b;可以按照用户配置的时间周期定时性触发的。由于任务需要发送到对应的工作人员上&#xff0c;所以这里需要先对员工进…

DM宣传单制作,利用在线模板,快速替换文字

如果你需要制作一批宣传单&#xff0c;但是时间很紧&#xff0c;而且没有专业的设计人员协助&#xff0c;那么你可以选择使用在线模板来快速制作宣传单。本文将介绍如何使用乔拓云平台&#xff0c;快速制作宣传单的方法。 步骤一&#xff1a;选择适合的在线制作工具 首先&…

Leetcode hot 100之前缀和、差分数组、位运算

目录 差分数组-区间增减 和为K的子数组&#xff1a;前缀和 哈希表优化 除自身以外数组的乘积&#xff1a;前后缀区间 位运算 异或&#xff1a;同为0&#xff0c;不同为1 136. 只出现一次的数字&#xff1a;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现2次…

【Unity3D编辑器开发】Unity3D编辑器开发基础性框架结构【全面总结】

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 嗨&#xff0c;大家好&#xff0c;我是恬静的小魔龙。 同学们…

Spring MVC 中的国际化和本地化

Spring MVC 中的国际化和本地化 国际化&#xff08;Internationalization&#xff0c;简称i18n&#xff09;和本地化&#xff08;Localization&#xff0c;简称l10n&#xff09;是构建多语言应用程序的重要概念。Spring MVC提供了丰富的支持&#xff0c;使开发人员能够轻松地处…

Spark基础

一、spark基础 1、为什么使用Spark Ⅰ、MapReduce编程模型的局限性 (1) 繁杂 只有Map和Reduce两个操作&#xff0c;复杂的逻辑需要大量的样板代码 (2) 处理效率低 Map中间结果写磁盘&#xff0c;Reduce写HDFS&#xff0c;多个Map通过HDFS交换数据 任务调度与启动开销大 (…

前后端通信到底是怎样一个过程

前后端通信是怎样 前言&#xff1a;Http协议 超文本传输协议 规定&#xff1a;每一次前后端通信&#xff0c;前端需要主动向后端发出请求&#xff0c;后端接收到前端的请求后&#xff0c;可以给出响应 1、Http报文 浏览器向服务器发送请求时&#xff0c;请求本身就是信息&…

【gcc】RtpTransportControllerSend学习笔记 1

本文是woder大神 的文章的学习笔记。主要是大神文章: webrtc源码分析(8)-拥塞控制(上)-码率预估 的学习笔记。大神的webrtc源码分析(8)-拥塞控制(上)-码率预估 详尽而具体,堪称神作。因为直接看大神的文章,自己啥也没记住,所以同时跟着看代码。跟着大神走一遍,不求甚解,…

踩坑日记 uniapp 底部 tabber遮挡住购物车结算

tabbar 被购物车结算遮挡 在小程序上tabbar没有将固定栏遮挡&#xff0c;如果直接调高&#xff0c;浏览器H5页面是对了&#xff0c;但在小程序上面离底部的定位就太高了 原代码 // 底部结算样式.shop-foot {border-top: 2rpx solid #F7F7F7;background-color: #FFF;position: …

机器学习 不均衡数据采样方法:imblearn 库的使用

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

【Java接口性能优化】skywalking使用

skywalking使用 提示&#xff1a;微服务中-skywalking使用 文章目录 skywalking使用一、进入skywalking主页二、进入具体服务1.查看接口 一、进入skywalking主页 二、进入具体服务 可以点击列表或搜索后&#xff0c;点击进入具体服务 依次选择日期、小时、分钟 1.查看接口 依次…

Linux工具(三)

继Linux工具&#xff08;一&#xff09;和Linux工具&#xff08;二&#xff09;&#xff0c;下面我们就来讲解Linux最后的两个工具&#xff0c;分别是代码托管的版本控制器git和代码调试器gdb。 目录 1.git-版本控制器 从0到1的实现git代码托管 检测并安装git 新建git仓库…

Harmony跨进程通信—IPC与RPC通信开发指导

一、IPC与RPC通信概述 基本概念 IPC&#xff08;Inter-Process Communication&#xff09;与RPC&#xff08;Remote Procedure Call&#xff09;用于实现跨进程通信&#xff0c;不同的是前者使用Binder驱动&#xff0c;用于设备内的跨进程通信&#xff0c;后者使用软总线驱动&a…

腾讯云中使用ubuntu安装属于自己的overleaf

在自己的云服务器上安装overleaf的需求是从写论文开始的&#xff0c;总担心自己的论文放在一个网站上被泄露&#xff0c;所以想要在自己的服务器上安装自己的overleaf&#xff0c;正好手边有一个云服务器&#xff0c;现在开始。 配置腾讯云 因为使用overleaf的优势就是在不同…

基于Java的新能源汽车在线租赁平台设计与实现(源码+lw+ppt+部署文档+视频讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…