- "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.0modelVersion>
- <parent>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>2.2.0.M1version>
- <relativePath />
- parent>
- <groupId>com.demogroupId>
- <artifactId>SpringBootDataJPAartifactId>
- <version>0.0.1-SNAPSHOTversion>
- <name>SpringBootDataJPAname>
- <description>Spring Boot Data JPAdescription>
-
- <properties>
- <java.version>1.8java.version>
- properties>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-data-jpaartifactId>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <scope>runtimescope>
- dependency>
-
- <dependency>
- <groupId>net.bytebuddygroupId>
- <artifactId>byte-buddyartifactId>
- <version>1.9.12version>
- dependency>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-testartifactId>
- <scope>testscope>
- dependency>
- dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- plugin>
- plugins>
- build>
-
- <repositories>
- <repository>
- <id>spring-snapshotsid>
- <name>Spring Snapshotsname>
- <url>https://repo.spring.io/snapshoturl>
- <snapshots>
- <enabled>trueenabled>
- snapshots>
- repository>
- <repository>
- <id>spring-milestonesid>
- <name>Spring Milestonesname>
- <url>https://repo.spring.io/milestoneurl>
- repository>
- repositories>
- <pluginRepositories>
- <pluginRepository>
- <id>spring-snapshotsid>
- <name>Spring Snapshotsname>
- <url>https://repo.spring.io/snapshoturl>
- <snapshots>
- <enabled>trueenabled>
- snapshots>
- pluginRepository>
- <pluginRepository>
- <id>spring-milestonesid>
- <name>Spring Milestonesname>
- <url>https://repo.spring.io/milestoneurl>
- pluginRepository>
- pluginRepositories>
-
- project>
创建一个名为springbootdatajpa 的数据库。此数据库有一个表:产品
- --
- -- Table structure for table `product`
- --
-
- CREATE TABLE `product` (
- `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
- `name` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
- `price` decimal(10,1) NOT NULL,
- `quantity` int(11) NOT NULL,
- `description` text COLLATE utf8_unicode_ci NOT NULL,
- `photo` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
- `featured` tinyint(1) NOT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
- --
- -- Dumping data for table `product`
- --
-
- INSERT INTO `product` (`name`, `price`, `quantity`, `description`, `photo`, `featured`) VALUES('Mobile 1', '2.0', 2, 'description 1', 'thumb1.gif', 0);
- INSERT INTO `product` (`name`, `price`, `quantity`, `description`, `photo`, `featured`) VALUES('Mobile 2', '1.0', 5, 'description 2', 'thumb2.gif', 1);
- INSERT INTO `product` (`name`, `price`, `quantity`, `description`, `photo`, `featured`) VALUES('Mobile 3', '3.0', 9, 'description 3', 'thumb3.gif', 0);
- INSERT INTO `product` (`name`, `price`, `quantity`, `description`, `photo`, `featured`) VALUES('Computer 1', '5.0', 12, 'description 4', 'thumb1.gif', 1);
- INSERT INTO `product` (`name`, `price`, `quantity`, `description`, `photo`, `featured`) VALUES('Computer 2', '7.0', 5, 'description 5', 'thumb1.gif', 0);
- INSERT INTO `product` (`name`, `price`, `quantity`, `description`, `photo`, `featured`) VALUES('Computer 3', '12.0', 2, 'description 6', 'thumb2.gif', 1);
- INSERT INTO `product` (`name`, `price`, `quantity`, `description`, `photo`, `featured`) VALUES('Laptop 1', '3.0', 8, 'description 7', 'thumb2.gif', 0);
- INSERT INTO `product` (`name`, `price`, `quantity`, `description`, `photo`, `featured`) VALUES('Laptop 2', '4.0', 11, 'description 8', 'thumb3.gif', 1);
- INSERT INTO `product` (`name`, `price`, `quantity`, `description`, `photo`, `featured`) VALUES('Laptop 3', '2.0', 15, 'description 9', 'thumb2.gif', 0);
- DELIMITER $$
- CREATE PROCEDURE sp_findBetween(min decimal, max decimal)
- BEGIN
- SELECT * FROM product where price BETWEEN min and max;
- END $$
- DELIMITER ;
产品表的结构

产品表数据

在src/main/resources文件夹中打开application.properties文件,并添加连接到数据库的配置,如下所示:
- spring.datasource.url= jdbc:mysql://localhost:3306/springbootdatajpa
- spring.datasource.username=root
- spring.datasource.password=123456
创建名为com.demo.entities 的新包。在此包中,创建名为 Product 的新 java 类.java如下所示:
- package com.demo.entities;
-
- import java.io.Serializable;
-
- import java.math.BigDecimal;
-
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.GenerationType;
- import javax.persistence.Id;
- import javax.persistence.Table;
-
- @Entity
- @Table(name = "product")
- public class Product implements Serializable {
- private static final long serialVersionUID = 1L;
-
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private int id;
-
- private String name;
-
- private BigDecimal price;
-
- private int quantity;
-
- private String description;
-
- private String photo;
-
- private boolean featured;
-
- public int getId() {
- return id;
- }
-
- public void setId(int 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 int getQuantity() {
- return quantity;
- }
-
- public void setQuantity(int quantity) {
- this.quantity = quantity;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public String getPhoto() {
- return photo;
- }
-
- public void setPhoto(String photo) {
- this.photo = photo;
- }
-
- public boolean isFeatured() {
- return featured;
- }
-
- public void setFeatured(boolean featured) {
- this.featured = featured;
- }
-
- }
创建名为com.demo.repository 的新包。在这个包中,创建名为ProductRepository的新接口.java从 Spring Framework 的CrudRepository接口实现如下:
- package com.demo.repositories;
-
- import java.math.BigDecimal;
- import java.util.List;
- import org.springframework.data.jpa.repository.Query;
- import org.springframework.data.repository.CrudRepository;
- import org.springframework.data.repository.query.Param;
- import org.springframework.stereotype.Repository;
- import com.demo.entities.Product;
-
- @Repository("productRepository")
- public interface ProductRepository extends CrudRepository
{ -
- @Query(value = "{call sp_findBetween(:min, :max)}", nativeQuery = true)
- public List
findAllBetweenStoredProcedure(@Param("min") BigDecimal min, @Param("max") BigDecimal max); -
- }
创建名为com.demo.services 的新包。在此包中创建名为ProductService的新接口.java如下所示:
- package com.demo.services;
-
- import java.math.BigDecimal;
- import java.util.List;
- import com.demo.entities.Product;
-
- public interface ProductService {
-
- public List
findAllBetweenStoredProcedure(BigDecimal min, BigDecimal max); -
- }
在com.demo.services包中,创建名为ProductServiceImpl的新java类.java从ProductService接口实现
- package com.demo.services;
-
- import java.math.BigDecimal;
- import java.util.List;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import com.demo.entities.Product;
- import com.demo.repositories.ProductRepository;
-
- @Transactional
- @Service("productService")
- public class ProductServiceImpl implements ProductService {
-
- @Autowired
- private ProductRepository productRepository;
-
- @Override
- public List
findAllBetweenStoredProcedure(BigDecimal min, BigDecimal max) { - return productRepository.findAllBetweenStoredProcedure(min, max);
- }
-
- }
在com.demo包中,创建名为JPAConfiguration的新 java 类.java如下所示:
- package com.demo;
-
- import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.ComponentScan;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.context.annotation.PropertySource;
- import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
- import org.springframework.transaction.annotation.EnableTransactionManagement;
-
- import com.demo.services.ProductService;
- import com.demo.services.ProductServiceImpl;
-
- @Configuration
- @EnableAutoConfiguration
- @EnableTransactionManagement
- @EnableJpaRepositories(basePackages = { "com.demo.repositories" })
- @ComponentScan("com.demo")
- @PropertySource("classpath:application.properties")
- public class JPAConfiguration {
-
- @Bean
- public ProductService productService() {
- return new ProductServiceImpl();
- }
-
- }

创建名为com.demo.main 的新包。在此包中,创建名为 demo 的新 java 文件.java如下所示:
- package com.demo.main;
-
- import java.math.BigDecimal;
-
- import org.springframework.context.annotation.AnnotationConfigApplicationContext;
- import org.springframework.context.support.AbstractApplicationContext;
-
- import com.demo.JPAConfiguration;
- import com.demo.entities.Product;
- import com.demo.services.ProductService;
-
- public class Demo {
-
- public static void main(String[] args) {
- try {
- AbstractApplicationContext context = new AnnotationConfigApplicationContext(JPAConfiguration.class);
- ProductService productService = context.getBean(ProductService.class);
- System.out.println("Find product have price between 4 and 8");
- for (Product product : productService.findAllBetweenStoredProcedure(BigDecimal.valueOf(4), BigDecimal.valueOf(8))) {
- System.out.println("Id: " + product.getId());
- System.out.println("Name: " + product.getName());
- System.out.println("Price: " + product.getPrice());
- System.out.println("========================");
- }
- context.close();
- } catch (Exception e) {
- System.out.println(e.getMessage());
- }
- }
-
- }
- Id: 4
- Name: Computer 1
- Price: 5.0
- ========================
- Id: 5
- Name: Computer 2
- Price: 7.0
- ========================
- Id: 12
- Name: Laptop 2
- Price: 4.0
- ========================