本文将深入探讨如何在SpringBoot项目中使用JPA中操作存储过程,获得业务中需要的数据。
本文目录
一、表设计与存储过程创建
创建商品表 products
用于存储商品信息。
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
stock INT NOT NULL
);
存储过程创建
1. 不带参数,返回多条数据
创建一个存储过程GetAllProducts用于返回所有商品信息。
DELIMITER //
CREATE PROCEDURE GetAllProducts()
BEGIN
SELECT * FROM products;
END //
DELIMITER ;
2. 带参数,返回单条数据
创建一个存储过程GetProductById根据商品ID获取单条商品信息。
DELIMITER //
CREATE PROCEDURE GetProductById(IN productId INT)
BEGIN
SELECT * FROM products WHERE id = productId;
END //
DELIMITER ;
3. 带参数,返回多条数据
创建一个存储过程GetProductsByPriceThreshold返回价格大于某价格的商品信息。
DELIMITER //
CREATE PROCEDURE GetProductsByPriceThreshold(IN priceThreshold DECIMAL(10, 2))
BEGIN
SELECT * FROM products WHERE price > priceThreshold;
END //
DELIMITER ;
二、实体类定义
定义 Product
实体类来映射数据库中的 products
表。
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.math.BigDecimal;
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private BigDecimal price;
private Integer stock;
public Product() {
}
public Product(String name, BigDecimal price, Integer stock) {
this.name = name;
this.price = price;
this.stock = stock;
}
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;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public Integer getStock() {
return stock;
}
public void setStock(Integer stock) {
this.stock = stock;
}
@Override
public String toString() {
return "Product{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
", stock=" + stock +
'}';
}
}
三、使用JPA调用存储过程
1. 不带参数,返回多条数据
在 ProductRepository
接口中使用 @Procedure
注解调用 GetAllProducts
存储过程。
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Procedure;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
@Procedure(name = "GetAllProducts")
List<Product> getAllProducts();
}
2. 带参数,返回单条数据
在 ProductRepository
接口中添加调用 GetProductById
存储过程的方法。
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Procedure;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
@Procedure(name = "GetAllProducts")
List<Product> getAllProducts();
@Procedure(name = "GetProductById")
Optional<Product> getProductById(Long productId);
}
3. 带参数,返回多条数据
在 ProductRepository
接口中添加调用 GetProductsByPriceThreshold
存储过程的方法。
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Procedure;
import org.springframework.stereotype.Repository;
import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
@Procedure(name = "GetAllProducts")
List<Product> getAllProducts();
@Procedure(name = "GetProductById")
Optional<Product> getProductById(Long productId);
@Procedure(name = "GetProductsByPriceThreshold")
List<Product> getProductsByPriceThreshold(BigDecimal priceThreshold);
}
← 上一篇 Java进阶——常用类及常用方法详解 |
记得点赞、关注、收藏哦!
|
下一篇 Java进阶——数组超详细整理 → |