引言
本次案例主要参考Spring Boot企业级开发教程第2版第5章的内容,主要解决了配置依赖版本的更新,数据库的创建与连接以及测试与连接等难题!本人希望通过总结学习心得的方式巩固实践开发过程一些细节性的知识,如有问题,欢迎指正!
一、操作设备
IntelliJ IDEA:2024.2.1
Maven: 3.8.1
MySQL数据库连接: Navicat Premium 16
二、任务实现
1.创建 项目
可使用SPring Initializr方式或者Maven方式构建Spring Boot项目(两种构建方式可关注哈哈燕220125,并在之前的文章内查找哦!)
2.配置依赖
在项目的pom.xml文件中配置Spring Boot 整合Spring Data JPA的 依赖(包括Spring Boot父工程的依赖、MYSQL驱动的依赖和Spring Data JPA的启动器依赖):
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.2</version>
<relativePath/>
</parent>
<groupId>com.huawei</groupId>
<artifactId>SpringDataJPA</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SpringDataJPA</name>
<url>http://maven.apache.org</url>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter
</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version> <!-- 替换原版本 -->
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-jpa
</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.baomidou</groupId>-->
<!-- <artifactId>mybatis-plus-boot-starter</artifactId>-->
<!-- <version>3.5.3.1</version>-->
<!-- </dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
</plugin>
</plugins>
</build>
</project>
3、设置配置信息
在项目的resources目录下创建application.yml文件:
spring:
datasource:
url: "jdbc:mysql://localhost:3306/springbootdata"
username: root
password: 'root'
jpa:
show-sql: true
4.创建实体类
在项目的Java目录下创建包com.huawei.entity,并在该包下创建实体类Book.java
package com.huawei.entity;
//import javax.persistence.*;
import jakarta.persistence.*;//java8之后相关的包从 javax.persistence 迁移到了 jakarta.persistence
@Entity
@Table(name="book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id; //图书编号
@Column(name="name")
private String name; //图书名称
private String author; //图书作者
private String press; //图书出版社
private String status; //图书状态
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Book() {
}
public Book(Integer id, String name, String author, String press, String status) {
this.id = id;
this.name = name;
this.author = author;
this.press = press;
this.status = status;
}
@Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\'' +
", author='" + author + '\'' +
", press='" + press + '\'' +
", status='" + status + '\'' +
'}';
}
}
5.自定义Repository接口:
在项目的Java目录下创建包com.huawei.dao,并在该包下自定义接口BookRepository.java
package com.huawei.dao;
import com.huawei.entity.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
public interface BookRepository extends JpaRepository<Book,Integer> {
Book findByAuthorAndStatus(String author,String status);
@Modifying
@Transactional
@Query("delete from Book b where b.id = :id")
Integer deleteBookById(@Param("id")Integer id);
}
6.创建数据库
至此,实体类和操作实体的接口都已经定义好,因为没有JPA的配置信息中设置项目启动时根据实体类自动创建数据表,故我在Navicat Premium 16中创建了数据库
数据库自己命名,然后选择以下信息:
右键刷新并双击查看表格数据(由于我创建了book,所以图片案例就新新建了book1,下面的代码大家可以根据自身情况自行修改哦!)
USE springbootdata;
CREATE TABLE book(
id int(0) NOT NULL AUTO_INCREMENT,
name VARCHAR(32),
author VARCHAR(32),
press VARCHAR(32),
status VARCHAR(1),
PRIMARY KEY (id) USING BTREE
);
INSERT INTO book VALUES(1,'楚辞','屈原','中国文联出版社','0');
INSERT INTO book VALUES(2,'纳兰词','纳兰性德','中国文联出版社','1');
INSERT INTO book VALUES(3,'西游记','吴承恩','中国文联出版社','2');
7.创建项目启动类和测试类
在src\main\java目录的com.huawei包下创建项目启动类SpringDataJPAApplication.java
package com.huawei;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//import org.mybatis.spring.annotation.MapperScan;
//
//@MapperScan("com.huawei.dao")
@SpringBootApplication
public class SpringDataJPAApplication {
public static void main(String[] args) {
SpringApplication.run(SpringDataJPAApplication.class, args);
}
}
在src\test\java目录下创建com.huawei,并在该包下创建测试类SpringDataJPAApplicationTests .java
package com.huawei;
import com.huawei.dao.BookRepository;
import com.huawei.entity.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
import java.util.Optional;
@SpringBootTest
class SpringDataJPAApplicationTests {
@Autowired
private BookRepository bookRepository;
private void booksInfo(){
List<Book> books = bookRepository.findAll();
for (Book book : books) {
System.out.println(book);
}
}
@Test
void saveBook() {
Book book=new Book(null,"离骚","屈原","清华大学出版社","1");
//新增图书
bookRepository.save(book);
booksInfo();
}
@Test
void editBook() {
Optional<Book> op = bookRepository.findById(1);
Book book = op.get();
book.setName("天问");
//修改图书
bookRepository.save(book);
booksInfo();
}
@Test
void findBook() {
//根据图书作者和图书状态查找对应的图书
Book b = bookRepository.findByAuthorAndStatus("屈原", "1");
System.out.println(b);
}
@Test
void delBook() {
bookRepository.deleteBookById(1);
booksInfo();
}
}
8.编写单元测试进行接口方法测试及整合测试
saveBook()方法(新增):
editBook()方法(修改):
findBook()方法(查询):
delBook()方法(删除):