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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

SpringData核心数据访问接口--CrudRepository示例

發(fā)布時(shí)間:2025/3/19 javascript 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringData核心数据访问接口--CrudRepository示例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.Spring Data JPA可以極大地簡(jiǎn)化JPA的寫法,在幾乎不用寫接口實(shí)現(xiàn)的情況下完成對(duì)數(shù)據(jù)的訪問和操作。

2.Spring Data通過提供Repository接口來(lái)約定數(shù)據(jù)訪問的統(tǒng)一標(biāo)準(zhǔn)。

3.Repository接口下包含一些常用的子接口:

???CrudRepository、PagingAndSortingRepository、JpaRepository

4.在進(jìn)行spring boot 項(xiàng)目的開發(fā)中,開發(fā)者只需要定義自己項(xiàng)目的數(shù)據(jù)訪問接口,然后實(shí)現(xiàn)Spring Data提供的這些接口,就可以實(shí)現(xiàn)對(duì)數(shù)據(jù)的CRUD操作。

?

CrudRepository提供了最基本的對(duì)實(shí)體類的增刪改查操作

新建新的Maven項(xiàng)目,命名SpringBoot_crudrepositorytest,按照Maven項(xiàng)目的規(guī)范,在src/main下新建一個(gè)名為resource的文件夾

①修改pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
? <modelVersion>4.0.0</modelVersion>

? <groupId>com.ysh</groupId>
? <artifactId>crudrepositorytest</artifactId>
? <version>0.0.1-SNAPSHOT</version>
? <packaging>jar</packaging>

? <name>crudrepositorytest</name>
? <url>http://maven.apache.org</url>

? <!--??
??spring-boot-starter-parent是Spring Boot的核心啟動(dòng)器,
??包含了自動(dòng)配置、日志和YAML等大量默認(rèn)的配置,大大簡(jiǎn)化了我們的開發(fā)。
??引入之后相關(guān)的starter引入就不需要添加version配置,
???? spring boot會(huì)自動(dòng)選擇最合適的版本進(jìn)行添加。
? -->
? <parent>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-parent</artifactId>
??<version>2.0.0.RELEASE</version>
??<relativePath/>
?</parent>
?
?? <properties>
??<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
??<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
??<java.version>1.8</java.version>
?</properties>

? <dependencies>
?
? ?<!-- 添加spring-boot-starter-web模塊依賴 -->
? ?<dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-web</artifactId>
?</dependency>
?
? ?<!-- 添加spring-boot-starter-thymeleaf模塊依賴 -->
? ?<dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-thymeleaf</artifactId>
?</dependency>
?
?<!-- 添加MySQL依賴 -->
??? <dependency>
??<groupId>mysql</groupId>
??<artifactId>mysql-connector-java</artifactId>
?</dependency>
???????
???????? <!-- 添加Spring Data JPA依賴 -->
???? <dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-data-jpa</artifactId>
?</dependency>
??
?
??? <dependency>
????? <groupId>junit</groupId>
????? <artifactId>junit</artifactId>
????? <scope>test</scope>
??? </dependency>
? </dependencies>
</project>


②配置基本屬性

在src/main/resource下新建一個(gè)全局配置文件,命名為application.properties,在該配置文件中配置數(shù)據(jù)源和JPA相關(guān)的屬性

########################################################
###
########################################################
spring.datasource.url=jdbc:mysql://localhost:3306/springdatajpa

spring.datasource.username=root

spring.datasource.password=

spring.datasource.driverClassName=com.mysql.jdbc.Driver

spring.datasource.max-active=20


spring.datasource.max-idle=8

spring.datasource.min-idle=8

spring.datasource.initial-size=10

spring.jpa.database=MySQL

spring.jpa.show-sql=true


spring.jpa.hibernate.ddl-auto=update

spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

?

附:

#數(shù)據(jù)庫(kù)地址,其中springdatajpa是數(shù)據(jù)庫(kù)名稱

spring.datasource.url=jdbc:mysql://localhost:3306/springdatajpa

#數(shù)據(jù)庫(kù)用戶名

spring.datasource.username=root

#數(shù)據(jù)庫(kù)密碼,要改成自己的密碼

spring.datasource.password=yourpassword

#數(shù)據(jù)庫(kù)驅(qū)動(dòng),固定格式

spring.datasource.driverClassName=com.mysql.jdbc.Driver

#指定連接池中最大的活躍連接數(shù)

spring.datasource.max-active=20

#指定連接池最大的空閑連接

spring.datasource.max-idle=8

#指定必須保持連接的最小值

spring.datasource.min-idle=8

spring.datasource.initial-size=10


########################################################
### JPA持久化配置
########################################################
# 指定數(shù)據(jù)庫(kù)類型
spring.jpa.database=MySQL
# 指定是否需要在日志中顯示sql語(yǔ)句
spring.jpa.show-sql=true
# 指定自動(dòng)創(chuàng)建|更新|驗(yàn)證數(shù)據(jù)庫(kù)表結(jié)構(gòu)等配置
# 表示如果數(shù)據(jù)庫(kù)中存在持久化類對(duì)應(yīng)的表就不創(chuàng)建,不存在就創(chuàng)建對(duì)應(yīng)的表
spring.jpa.hibernate.ddl-auto=update
# 指定命名策略
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
#指定數(shù)據(jù)庫(kù)方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

③創(chuàng)建持久化類

在com.ysh下新建4個(gè)包,bean(放置持久化類)、controller(控制器)、repository(定義數(shù)據(jù)訪問接口的類)、service(業(yè)務(wù)邏輯處理類)

在bean下創(chuàng)建持久化類User.java

packagecom.ysh.crudrepositorytest.bean;

importjava.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
importjavax.persistence.Table;

@Entity
// 用于標(biāo)記持久化類,Spring Boot項(xiàng)目加載后會(huì)自動(dòng)根據(jù)持久化類建表
@Table(name="tb_user")
public class User implementsSerializable{

?private static final long serialVersionUID =1L;

?/**
? * 使用@Id指定主鍵. 使用代碼@GeneratedValue(strategy=GenerationType.AUTO)
? * 指定主鍵的生成策略,mysql默認(rèn)的是自增長(zhǎng)。
? *
? */
?@Id
?@GeneratedValue(strategy = GenerationType.IDENTITY)
?private int id;//主鍵.

?private String username;// 姓名username

?private StringloginName;

?private char sex;//性別

?private int age; //年齡

?public int getId() {
??return id;
?}

?public void setId(int id) {
??this.id = id;
?}

?public String getUsername() {
??return username;
?}

?public void setUsername(String username) {
??this.username = username;
?}

?public String getLoginName() {
??return loginName;
?}

?public void setLoginName(String loginName) {
??this.loginName = loginName;
?}

?public char getSex() {
??return sex;
?}

?public void setSex(char sex) {
??this.sex = sex;
?}

?public int getAge() {
??return age;
?}

?public void setAge(int age) {
??this.age = age;
?}
}


④定義數(shù)據(jù)訪問層接口

在com.ysh.crudrepository.repository包下新建一個(gè)接口,命名為UserRepository,讓該接口繼承CrudRepository接口,以持久化對(duì)象User作為CrudRepository的第一個(gè)參數(shù),表示當(dāng)前操作的持久化對(duì)象類型,Integer作為CrudRepository的第二個(gè)參數(shù),用于指定ID類型

packagecom.ysh.crudrepositorytest.repository;

importorg.springframework.data.repository.CrudRepository;

importcom.ysh.crudrepositorytest.bean.User;

public interface UserRepository extends CrudRepository<User,Integer>{

}

⑤定義業(yè)務(wù)層類

UserService.java

packagecom.ysh.crudrepositorytest.service;

importjava.util.Optional;

import javax.annotation.Resource;
importjavax.transaction.Transactional;

importorg.springframework.stereotype.Service;

import com.ysh.crudrepositorytest.bean.User;
importcom.ysh.crudrepositorytest.repository.UserRepository;

@Service
public class UserService{

?// 注入U(xiǎn)serRepository
?@Resource
?private UserRepositoryuserRepository;

?/**
? * save,update ,delete 方法需要綁定事務(wù). 使用@Transactional進(jìn)行事務(wù)的綁定.
? *
? * 保存對(duì)象
? * @param User
? * @return 包含自動(dòng)生成的id的User對(duì)象???????
? */
?@Transactional
?public User save(User User) {
??return userRepository.save(User);
?}

?/**
? * 根據(jù)id刪除對(duì)象
? *
? * @param id
? */
?@Transactional
?public void delete(int id) {
??userRepository.deleteById(id);
??
?}

?/**
? * 查詢所有數(shù)據(jù)
? *
? * @return 返回所有User對(duì)象
? */
?public Iterable<User> getAll() {
??return userRepository.findAll();
?}
?
?/**
? * 根據(jù)id查詢數(shù)據(jù)
? *
? * @return? 返回id對(duì)應(yīng)的User對(duì)象
? */
?public User getById(Integer id) {
??// 根據(jù)id查詢出對(duì)應(yīng)的持久化對(duì)象
??Optional<User> op = userRepository.findById(id);
?? return op.get();
?}
?/**
? * 修改用戶對(duì)象數(shù)據(jù),持久化對(duì)象修改會(huì)自動(dòng)更新到數(shù)據(jù)庫(kù)
? *
? * @param user
? */
?@Transactional
?public void update(User user) {
??// 直接調(diào)用持久化對(duì)象的set方法修改對(duì)象的數(shù)據(jù)
??user.setUsername("張三");
??user.setLoginName("zhangsan");
?}

}

在業(yè)務(wù)層需要注入數(shù)據(jù)訪問對(duì)象,使用@Resources注解將UserRepository接口對(duì)應(yīng)的實(shí)現(xiàn)類注入進(jìn)來(lái)的。

只要數(shù)據(jù)訪問層接口實(shí)現(xiàn)了CrudRepository,SpringBoot項(xiàng)目會(huì)自動(dòng)掃描該類并為該類創(chuàng)建實(shí)習(xí)類對(duì)象。

⑥定義控制器類

UserController.java:

packagecom.ysh.crudrepositorytest.controller;

importjavax.annotation.Resource;

import org.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RestController;

import com.ysh.crudrepositorytest.bean.User;
importcom.ysh.crudrepositorytest.service.UserService;

@RestController
@RequestMapping("/user")
public class UserController {
?
?// 注入U(xiǎn)serService
?@Resource
?private UserServiceuserService;

?@RequestMapping("/save")
?public String save() {
??User user = new User();
??user.setLoginName("badao");
??user.setUsername("霸道");
??user.setSex('男');
??user.setAge(3);
??user = userService.save(user);
??System.out.println("保存數(shù)據(jù)成功,返回的結(jié)果:" + user);
??return "保存數(shù)據(jù)成功!";
?}

?@RequestMapping("/update")
?public String update() {
??// 修改的對(duì)象必須是持久化對(duì)象,所以先從數(shù)據(jù)庫(kù)查詢出id為1的對(duì)象進(jìn)行修改
??User user = userService.getById(1);
??userService.update(user);
??return "修改數(shù)據(jù)成功!";
?}

?@RequestMapping("/delete")
?public String delete() {
??userService.delete(1);
??return "刪除數(shù)據(jù)成功!";
?}

?@RequestMapping("/getAll")
?public Iterable<User> getAll() {
??return userService.getAll();
?}
}

⑦測(cè)試應(yīng)用

打開Mysql服務(wù),啟動(dòng)Mysql數(shù)據(jù)庫(kù),新建數(shù)據(jù)庫(kù)springdatajpa:

在crudrepository包下新建App.java啟動(dòng)類

packagecom.ysh.crudrepositorytest;

import org.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;

/**
?* @SpringBootApplication指定這是一個(gè) spring boot的應(yīng)用程序.
?*/
@SpringBootApplication
public class App
{
??? public static void main( String[] args )
??? {
??? ?// SpringApplication 用于從main方法啟動(dòng)Spring應(yīng)用的類。
??????? SpringApplication.run(App.class, args);
??? }
}

運(yùn)行項(xiàng)目

JPA會(huì)在數(shù)據(jù)庫(kù)中自動(dòng)創(chuàng)建持久化類對(duì)應(yīng)的tb_user表,按照J(rèn)PA規(guī)范,實(shí)體類User的屬性loginName映射到數(shù)據(jù)庫(kù)的時(shí)候,自動(dòng)生成的數(shù)據(jù)庫(kù)列名為login_name

在瀏覽器中輸入:http://localhost:8080/user/save

查看數(shù)據(jù)庫(kù)中的表,刷新一下

測(cè)試修改,在瀏覽器中輸入:http://localhost:8080/user/update

查看修改后的數(shù)據(jù)庫(kù)

測(cè)試查詢所有用戶數(shù)據(jù),在瀏覽器中輸入:http://localhost:8080/user/getAll

請(qǐng)求會(huì)提交到UserController類的getAll方法進(jìn)行處理,如果該方法執(zhí)行查詢所有用戶成功,即可返回查詢到的所有用戶信息的JSON格式的字符串

測(cè)試刪除:http://localhost:8080/user/delete

?

?

附:項(xiàng)目目錄結(jié)構(gòu)

示例代碼下載:

https://download.csdn.net/download/badao_liumang_qizhi/10548351

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的SpringData核心数据访问接口--CrudRepository示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。