SpringBoot新手快速入門系列教程五:基于JPA的一個Mysql簡單讀寫例子

現在我們來做一個簡單的讀寫Mysql的項目

1,先新建一個項目,我們叫它“HelloJPA”并且添加依賴

2,引入以下依賴:

  1. Spring Boot DevTools (可選,但推薦,用于開發時熱部署)
  2. Lombok(可選,但推薦,用于減少樣板代碼)
  3. Spring Web(如果你需要創建一個Web應用)
  4. Spring Data JPA(這是核心依賴,用于JPA功能)
  5. 數據庫驅動程序(例如MySQL Driver,如果你使用MySQL數據庫)

在你的項目創建界面中,選擇以下依賴:

  • Developer Tools:

    • Spring Boot DevTools
    • Lombok
  • Web:

    • Spring Web
  • SQL:

    • Spring Data JPA
    • MySQL Driver(或你使用的其他數據庫驅動)

這樣,你的項目將配置好進行Spring Data JPA操作,并連接到你的數據庫。

3,我們現在右鍵點擊hellojpa文件夾下創建四個package:entity、repository、service、controller然后分別建一下4個類User、UserRepository、UserService、UserController

項目結構如下

src/main/java
├── com
│   └── yuye
│       └── www
│           └── hellojpa
│               ├── controller
│               │   └── UserController.java
│               ├── entity
│               │   └── User.java
│               ├── repository
│               │   └── UserRepository.java
│               └── service
│                   └── UserService.java
└── resources└── application.properties

1. entity

用途:用于定義應用程序的核心業務對象,這些對象通常映射到數據庫表。

職責

  • 定義Java對象,這些對象與數據庫中的表行相對應。
  • 使用JPA注解(例如@Entity, @Id, @GeneratedValue)來標記這些類和它們的字段,從而指定它們如何與數據庫交互。

2. repository

用途:用于定義數據訪問層,處理數據的CRUD(創建、讀取、更新、刪除)操作。

職責

  • 繼承Spring Data JPA的JpaRepository接口,從而獲得基本的CRUD操作方法。
  • 可以定義自定義查詢方法。

3. service

用途:用于定義業務邏輯層,封裝應用程序的業務規則和操作。

職責

  • 調用repository層的方法來處理數據。
  • 執行具體的業務邏輯,例如驗證、數據轉換、復雜操作等。

4. controller

用途:用于定義表示層,處理來自客戶端的HTTP請求,并返回響應。

職責

  • 處理HTTP請求(例如GET, POST, PUT, DELETE)。
  • 調用service層的方法來執行業務邏輯。
  • 返回處理結果給客戶端,通常以JSON格式。

總結

  • entity:定義數據模型,映射數據庫表。
  • repository:數據訪問層,提供CRUD操作。
  • service:業務邏輯層,封裝業務規則和操作。
  • controller:表示層,處理HTTP請求和響應。

?3,實現代碼

????????1. User 實體類

package com.yuye.www.hellojpa.entity;import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;/*** The User entity class represents a user in the system.* It is mapped to a table in the database using JPA annotations.*/
@Entity
@Table(name = "user", uniqueConstraints = {@UniqueConstraint(columnNames = "name")})//保證user所有數據唯一
public class User {// The unique identifier for each user, generated automatically.@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;// The name of the user.private String name;// Getters and setters for the fields.public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

????????2. UserRepository 接口

package com.yuye.www.hellojpa.repository;import com.yuye.www.hellojpa.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;/*** The UserRepository interface provides CRUD operations for User entities.* It extends JpaRepository to leverage Spring Data JPA functionalities.*/
public interface UserRepository extends JpaRepository<User, Long> {/*** Finds a user by their name.* * @param name the name of the user to find* @return the User entity if found, otherwise null*/User findByName(String name);
}

????????3. UserService

package com.yuye.www.hellojpa.service;import com.yuye.www.hellojpa.entity.User;
import com.yuye.www.hellojpa.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** The UserService class provides business logic for user registration and login.*/
@Service
public class UserService {@Autowiredprivate UserRepository userRepository;/*** Registers a new user with the given name.* * @param name the name of the user to register*/public void register(String name) {User user = new User();user.setName(name);userRepository.save(user);}/*** Checks if a user with the given name exists.* * @param name the name of the user to check* @return true if the user exists, otherwise false*/public boolean login(String name) {User user = userRepository.findByName(name);return user != null;}
}

????????4. UserController

package com.yuye.www.hellojpa.controller;import com.yuye.www.hellojpa.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** The UserController class handles HTTP requests for user registration and login.*/
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;/*** Registers a new user.* * @param name the name of the user to register* @return a JSON string indicating the result of the operation*/@PostMapping("/register")public String register(@RequestParam String name) {userService.register(name);return "{\"status\":\"success\"}";}/*** Checks if a user with the given name exists.* * @param name the name of the user to check* @return a JSON string indicating the result of the operation*/@GetMapping("/login")public String login(@RequestParam String name) {boolean exists = userService.login(name);if (exists) {return "{\"status\":\"exists\"}";} else {return "{\"status\":\"no exists\"}";}}
}

??4,application.properties 配置

?application.properties 可以配置很多東西,本次的配置主要是數據庫的連接

spring.application.name=HelloJPA# 連接到數據庫的URL
spring.datasource.url=jdbc:mysql://localhost:3306/userdata?useSSL=false&serverTimezone=UTC
# 連接數據庫的用戶名
spring.datasource.username=root
# 連接數據庫的密碼
spring.datasource.password=Qwerty123
# Hibernate 設置自動更新數據庫模式
spring.jpa.hibernate.ddl-auto=update
# 在控制臺顯示SQL語句以便調試
spring.jpa.show-sql=true
# 指定Hibernate使用的SQL方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialectserver.port=8081

5,啟動Mysql,創建數據庫和表格?

我們要預先在數據庫里面創建一個數據庫、表格以及需要存儲的字段,然后啟動數據庫后再去編譯項目,否則直接編譯項目會報錯

如果你對數據庫的配置以及命令不熟悉,可以移步到我的前兩篇教程參考一下:

SpringBoot新手快速入門系列教程二:MySql5.7.44的免安裝版本下載和配置,以及簡單的Mysql生存指令指南。-CSDN博客

SpringBoot新手快速入門系列教程三:Mysql基礎生存命令指南-CSDN博客

? ? ? ? 1,首先我們先啟動mysql

mysqld --console

? ? ? ? 2,然后另外開啟一個命令行窗口,輸入密碼

mysql -u root -p

????????3,連接成功后,創建一個名為 UserData 的新數據庫:??

CREATE DATABASE UserData;

????????4. 使用新創建的數據庫

USE UserData;
????????5. 創建 User

????????創建 User 表,并包含 idname 字段:

CREATE TABLE User (id BIGINT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL
);

????????6. 驗證表是否創建成功

SHOW TABLES;

7, IDEA連接數據庫

點擊創建一個數據庫連接

右側展開后就是我們剛才創建的表格,右鍵點擊user

選擇editdata就可以看到我們剛才創建的name字段

另外一個實用的工具就是用在表格上方點擊右鍵、新建一個console就可以輸入sql命令了,輸入sql語句后用ctrl+enter組合按鈕,就可以執行語句,下方result可以看執行結果

7,運行到這里我們先通過gradle的幾個腳本先編譯一下clean然后build

沒有報錯,就可以運行一下項目看看

8,測試代碼

(1)打開命令行工具依次測試下面讀寫數據庫接口

curl -X POST http://localhost:8081/user/register -d "name=testuser"

(2)通過瀏覽器獲得剛才存入的name

curl http://localhost:8081/user/login?name=testuser

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41051.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41051.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41051.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

三相感應電機的建模仿真(2)基于ABC相坐標系S-Fun的仿真模型

1. 概述 2. 三相感應電動機狀態方程式 3. 基于S-Function的仿真模型建立 4. 瞬態分析實例 5. 總結 6. 參考文獻 1. 概述 前面建立的三相感應電機在ABC相坐標系下的數學模型是一組周期性變系數微分方程&#xff08;其電感矩陣是轉子位置角的函數&#xff0c;轉子位置角隨時…

qt 開發筆記堆棧布局的應用

1.概要 畫面中有一處位置&#xff0c;有個按鈕點擊后&#xff0c;這片位置完全換成另一個畫面&#xff0c;這中情況特別適合用堆棧布局。 //堆棧布局的應用 #include <QStackedLayout> QStackedLayout *layout new QStackedLayout(this); layout->setCurrentIndex(…

Unity Scrollview的Scrollbar控制方法

備忘&#xff1a;碰到用scrollview自帶的scrollbar去控制滑動&#xff0c;結果發現用代碼控制scrollbar.value無效&#xff0c;搜了一下都是說用scrollRect.verticalNormalizedPosition和scrollRect.horizontalNormalizedPosition來控制的。我尋思著有關聯的scrollbar為什么用不…

【代碼隨想錄算法訓練營第六十天|并查集、卡碼網107.尋找可能存在的路徑】

文章目錄 卡碼網107.尋找可能存在的路徑 并查集基礎內容還是看代碼隨想錄 并查集 卡碼網107.尋找可能存在的路徑 純并查集的基礎應用&#xff0c;并查集只是看元素是否在同一個集合中&#xff0c;因此在加入的時候需要先查看兩個元素是否已經在一個并查集中&#xff0c;如果不…

Interview preparation--Https 工作流程

HTTP 傳輸的弊端 如上圖&#xff0c;Http進行數據傳輸的時候是明文傳輸&#xff0c;導致任何人都有可能截獲信息&#xff0c;篡改信息如果此時黑客冒充服務器&#xff0c;或者黑客竊取信息&#xff0c;則其可以返回任意信息給客戶端&#xff0c;而且不被客戶端察覺&#xff0c;…

2.3.2 主程序和外部IO交互 (文件映射方式)----C#調用范例

2.3.2 主程序和外部IO交互 &#xff08;文件映射方式&#xff09;----C#調用范例 效果顯示 1 說明 1 .1 Test_IOServer是64bit 程序&#xff0c; BD_SharedIOServerd.dll 在 /Debug文件夾中 1 .2 Test_IOServer是32bit 程序&#xff0c; BD_SharedIOClientd.dll (32bit&#…

[FreeRTOS 內部實現] 事件組

文章目錄 事件組結構體創建事件組事件組等待位事件組設置位 事件組結構體 // 路徑&#xff1a;Source/event_groups.c typedef struct xEventGroupDefinition {EventBits_t uxEventBits;List_t xTasksWaitingForBits; } EventGroup_t;uxEventBits 中的每一位表示某個事件是否…

適用于Mac和Windows的最佳iPhone恢復軟件

本文將指導您選擇一款出色的iPhone數據恢復軟件來檢索您的寶貴數據。 市場上有許多所謂的iPhone恢復程序。各種程序很難選擇并選擇其中之一。一旦您做出了錯誤的選擇&#xff0c;您的數據就會有風險。 最好的iPhone數據恢復軟件應包含以下功能。 1.安全可靠。 2.恢復成功率高…

java MultipartFile multipartFile 文件上傳重命名

java MultipartFile multipartFile 文件上傳重命名 我們在文件上傳的時候&#xff0c;需要考慮重名覆蓋問題&#xff0c;為邏輯嚴謹&#xff0c;需要在文件上傳的時候&#xff0c;將文件名前方拼接UUID或者時間戳&#xff0c;來區分同名文件&#xff0c;但因此引出如何修改前端…

Windows下Visual Studio 中配置第一個CUDA工程

今天整NVIDIA 的CUDA 安裝和第一個CUDA 代碼&#xff0c;順便添加一個有CUDA工程的空框架。 &#xff08;1&#xff09;首先確認自己的CUDA 已經安裝成功 >>cmd 進入命令窗&#xff0c;在窗口輸入查看cuda 是否安裝成功&#xff0c;能查到CUDA的版本號&#xff0c;表示安…

VitePress安裝部署

VitePress安裝部署 VitePress安裝步驟 安裝 Node環境 官網下載&#xff1a;https://nodejs.org/zh-cn 傻瓜式安裝到完成 npm環境 安裝完Node環境之后&#xff0c;可以直接運行下面的命令安裝npm npm install -g pnpm關于pnpm源&#xff1a; 有時候需要國內源&#xff0c…

0706_ARM8

練習1&#xff1a; PWM控制蜂鳴器&#xff0c;風扇&#xff0c;震動馬達 pwm.h #ifndef __UART4_H__ #define __UART4_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_tim.h"//蜂鳴器 PB6 TIME4_CH1 初…

基于python的數據分解-趨勢-季節性-波動變化

系列文章目錄 前言 時間序列數據的分解&#xff0c;一般分為趨勢項&#xff0c;季節變化項和隨機波動項。可以基于加法或者乘法模型。季節變化呈現出周期變化&#xff0c;因此也叫季節效應(周期&#xff09;。 一、數據分解步驟 &#xff08;1&#xff09;估計時間序列的長期…

儀器校準后出了校準證書后,是不是就代表儀器合格了?

儀器校準是一門技術活&#xff0c;對于從事生產制造的企業而言&#xff0c;是不可或缺的一環&#xff0c;因為這與產品質量密切相關。所以&#xff0c;了解儀器校準的相關知識也變得尤為重要。 在拿到校準證書后&#xff0c;是不是說明儀器合格了&#xff1f;相信不少企業品管人…

指針回顧.

指針的主要作用&#xff1a;提供一種間接訪問數據的方法 1.地址:區分不同內存空間的編號 2.指針:指針就是地址,地址就是指針 3.指針變量:存放指針的變量稱為指針變量,簡稱為指針 1.指針的定義 int *p NULL; int *q NULL; char *p NULL; double *p NUL…

PCDN技術如何提高內容分發效率?(貳)

PCDN技術通過以下方式提高內容分發效率: 1.利用用戶設備作為分發節點:與傳統的 CDN技術主要依賴中心化服務器不同&#xff0c; PCDN技術利用用戶的設備作為內容分發的節點。當用戶下載內容時&#xff0c;他們的設備也會成為內容分發的一部分&#xff0c;將已下載的內容傳遞給其…

第34集《大乘起信論》

好&#xff0c;請大家打開《講義》七十六頁&#xff0c; 子三、釋雙行 前面是把大乘的止跟大乘的觀&#xff0c;各別的說明&#xff0c;這個是針對初學的菩薩&#xff0c;應該是這樣修學的&#xff1b;這個地方是告訴我們的目標&#xff0c;應該使令自己在操作上最好是能夠止…

STL--求交集,并集,差集(set_intersection,set_union,set_difference)

set_intersection(重要) 求兩個有序的序列的交集. 函數聲明如下: template<class InputIterator1, class InputIterator2, class OutputIterator>OutputIterator set_intersection(InputIterator1 _First1, //容器1開頭InputIterator1 _Last1, //容器2結尾(不包含)Inp…

jenkins配置gitee源碼地址連接不上

報錯信息如下&#xff1a; 網上找了好多都沒說具體原因&#xff0c;最后還是看jenkins控制臺輸出日志發現&#xff1a; ssh命令執行失敗&#xff08;git環境有問題&#xff0c;可能插件沒安裝成功等其他問題&#xff09; 后面發現是jenkins配置git的地方git安裝路徑錯了。新手…

加入新數據預測,基于黏菌優化算法SMA優化SVM支持向量機回歸預測(多輸入單輸出)

加入新數據預測&#xff0c;基于黏菌優化算法SMA優化SVM支持向量機回歸預測&#xff08;多輸入單輸出&#xff09; 1.數據均為Excel數據&#xff0c;直接替換數據就可以運行程序。 2.所有程序都經過驗證&#xff0c;保證程序可以運行。 3.具有良好的編程習慣&#xff0c;程序…