日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

boot jpa mysql postman spring_springboot使用spring-data-jpa操作MySQL数据库

發布時間:2025/3/21 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 boot jpa mysql postman spring_springboot使用spring-data-jpa操作MySQL数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們在上一篇搭建了一個簡單的springboot應用,這一篇將介紹使用spring-data-jpa操作數據庫。

新建一個MySQL數據庫,這里數據庫名為springboot,建立user_info數據表,作為我們示例操作的表對象。

user_info信息如下:

DROP TABLE IF EXISTS `user_info`;

CREATE TABLE `user_info` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`username` varchar(255) DEFAULT NULL,

`password` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of user_info

-- ----------------------------

INSERT INTO `user_info` VALUES ('1', 'Java之音', '12345');

INSERT INTO `user_info` VALUES ('2', '張無忌', '123');

數據庫及表創建成功后,回到我們的工程中

第零步,首先引入MySQL及jpa的maven依賴包:

mysql

mysql-connector-java

org.springframework.boot

spring-boot-starter-data-jpa

第一步,在yml配置文件中配置數據庫連接信息:

spring:

datasource:

driver-class-name: com.mysql.jdbc.Driver

url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&useSSL=false

username: root

password: 1011

jpa:

show-sql: true

第二步,創建一個實體類,對應數據表實體映射:

package com.javazhiyin;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

/**

* Created by 57783 on 2018/7/4.

*/

@Entity

public class UserInfo {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Integer id;

private String username;

private String password;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public UserInfo(){

}

}

第三步,創建一個Repository類,繼承JpaRepository類:

package com.javazhiyin;

import org.springframework.data.jpa.repository.JpaRepository;

/**

* Created by 57783 on 2018/7/4.

*/

public interface UserInfoRepository extends JpaRepository{

}

這里繼承了JpaRepository類,其封裝了一些對數據庫操作的基本方法,我們通過源碼查看一下JpaRepository有哪些方法:

//

// Source code recreated from a .class file by IntelliJ IDEA

// (powered by Fernflower decompiler)

//

package org.springframework.data.repository;

import java.util.Optional;

@NoRepositoryBean

public interface CrudRepository extends Repository {

S save(S var1);

Iterable saveAll(Iterable var1);

Optional findById(ID var1);

boolean existsById(ID var1);

Iterable findAll();

Iterable findAllById(Iterable var1);

long count();

void deleteById(ID var1);

void delete(T var1);

void deleteAll(Iterable extends T> var1);

void deleteAll();

}

第四步,新建一個Controller,實現對數據庫的增刪改查操作:

package com.javazhiyin;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

import java.util.List;

/**

* Created by 57783 on 2018/7/4.

*/

@RestController

public class UserInfoController {

@Autowired

private UserInfoRepository userInfoRepository;

/**

* 查

* @return

*/

@GetMapping(value = "/list")

public List getUserList(){

return userInfoRepository.findAll();

}

/**

* 增

* @param username

* @param password

* @return

*/

@PostMapping(value = "/addUser")

public UserInfo addUser(@RequestParam("username") String username,

@RequestParam("password") String password){

UserInfo user = new UserInfo();

user.setUsername(username);

user.setPassword(password);

return userInfoRepository.save(user);

}

/**

* 改

* @param id

* @param username

* @param password

* @return

*/

@PutMapping(value = "updUser/{id}")

public UserInfo updUser(@PathVariable("id") Integer id,

@RequestParam("username") String username,

@RequestParam("password") String password){

UserInfo user = new UserInfo();

user.setId(id);

user.setUsername(username);

user.setPassword(password);

return userInfoRepository.save(user);

}

/**

* 刪

* @param id

*/

@DeleteMapping(value = "delUser/{id}")

public void delUser(@PathVariable("id") Integer id){

UserInfo user = new UserInfo();

user.setId(id);

userInfoRepository.delete(user);

}

}

測試上述代碼,這里我們使用postman測試,非常方便:

查詢測試:

新增測試:

修改測試:

刪除測試:

我們可以看到可以全部測試通過,springboot使用spring-data-jpa進行增刪改查的操作確實挺方便的。

幾個問題:

1、對象實體映射類中的注解@GeneratedValue的概念及用法?

JPA要求每一個實體Entity,必須有且只有一個主鍵,而@GeneratedValue注解會為一個實體生成一個唯一標識的主鍵。

JPA提供了四種主鍵生成策略,被定義在枚舉類GenerationType中,分別為:

GenerationType.TABLE

GenerationType.SEQUENCE

GenerationType.IDENTITY

GenerationType.AUTO

GenerationType.TABLE

使用一個特定的數據庫表格來保存主鍵,持久化引擎通過關系數據庫的一張特定的表格來生成主鍵。這種策略的好處是不依賴于外部環境和數據庫的具體實現,在不同數據庫間可以很容易的進行移植。但由于其不能充分利用數據庫的特性,所以不會優先使用。

GenerationType.SEQUENCE

在某些數據庫中不支持主鍵自增長,比如Oracle。其提供了一種叫做”序列(sequence)”的機制生成主鍵。此時,GenerationType.SEQUENCE就可以作為主鍵生成策略。該策略的不足之處正好與TABLE相反,由于只有部分數據庫(Oracle,PostgreSQL,DB2)支持序列對象,所以該策略一般不應用于其他數據庫。

GenerationType.IDENTITY

主鍵自增長策略,數據庫在插入數據時,會自動給主鍵賦值,比如MYSQL可以在創建表時聲明”auto_increment” 來指定主鍵自增長。該策略在大部分數據庫中都提供了支持(指定方法或關鍵字可能不同),但還是有少數數據庫不支持,所以可移植性略差。

GenerationType.AUTO

把主鍵生成策略交給持久化引擎(persistence engine),持久化引擎會根據數據庫在以上三種主鍵生成策略中選擇其中一種。此種主鍵生成策略比較常用,由于JPA默認的生成策略就是GenerationType.AUTO,所以使用此種策略時可以顯式的指定@GeneratedValue(strategy = GenerationType.AUTO)也可以直接@GeneratedValue。

2、Spring Data JPA提供了哪些接口,可以實現哪些功能?

Repository:最頂層的接口,是一個空的接口,目的是為了統一所有Repository的類型,且能讓組件掃描的時候自動識別。

CrudRepository :是Repository的子接口,提供CRUD的功能

PagingAndSortingRepository:是CrudRepository的子接口,添加分頁和排序的功能

JpaRepository:是PagingAndSortingRepository的子接口,增加了一些實用的功能,比如:批量操作等。

JpaSpecificationExecutor:用來做負責查詢的接口

Specification:是Spring Data JPA提供的一個查詢規范,要做復雜的查詢,只需圍繞這個規范來設置查詢條件即可

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

總結

以上是生活随笔為你收集整理的boot jpa mysql postman spring_springboot使用spring-data-jpa操作MySQL数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。