Spring Boot数据库操作之Spring Boot Data JPA

版权声明:本文为博主原创文章,转载需注明出处。 https://blog.csdn.net/jay100500/article/details/81264973

                                

作者:谭东

JPA全称是Java Persistence API,即JAVA持久层API。可以讲JDK注解的类或者XML关系表映射对象,将运行期的实体对象持久化到数据库中,是一个ORM框架。

JPA用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

JPA框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。

JPA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个,应该说无人能出其右。从功能上来说,JPA就是Hibernate功能的一个子集。Hibernate 从3.2开始,就开始兼容JPA。Hibernate3.2获得了Sun TCK的JPA(Java Persistence API) 兼容认证。只要熟悉Hibernate或者其他ORM框架,在使用JPA时会发现其实非常容易上手。

好,接下来我们讲解如何使用。

pom.xml添加如下的spring-boot-starter-data-jpa库,因为我们是基于Spring Boot的,所以我们使用这个库。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

相应的Spring对应的库是:spring-data-jpa。

<dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
    </dependency>

接下来,我们这里采用yml文件配置,在resources文件夹下新建application.yml,相关配置信息写在这里。

server:
  port: 8082   # HTTP (Tomcat) port
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/student?serverTimezone=GMT=&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: Mysql123456

  jpa:
    hibernate:
      ddl-auto: update  # 第一次建表create  后面用update
    show-sql: true

然后我们重新编写个实体Product。

扫描二维码关注公众号,回复: 3365235 查看本文章
package com.tandong.testjavaweb.entity;

import javax.persistence.*;
import java.util.Date;

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private int id;
    @Column
    private String name;
    @Column
    private long price;
    @Column
    private String description;
    @Column
    private Date date;

    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 long getPrice() {
        return price;
    }

    public void setPrice(long price) {
        this.price = price;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }
}

如果不指定表名,那么默认就是product这个表名。接下来编写ProductDao类。

package com.tandong.testjavaweb.dao;

import com.tandong.testjavaweb.entity.Product;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductDao extends JpaRepository<Product, Integer> {

}

继承JpaRepository这个类,里面封装了很多CURD的操作,当然也可以自定义自己的操作,详细用法大家可以搜索下JpaRepository的注解操作。

接下来再写ProductService。

package com.tandong.testjavaweb.service;

import com.tandong.testjavaweb.dao.ProductDao;
import com.tandong.testjavaweb.entity.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class ProductService {
    @Autowired
    ProductDao productDao;

    public List<Product> getProducts() {
        return productDao.findAll();
    }

    public Optional<Product> getProductById(int id) {
        return productDao.findById(id);
    }

    public void addProduct(Product product) {
        productDao.saveAndFlush(product);
    }

}

最后编写ProductController类。

package com.tandong.testjavaweb.controller;

import com.tandong.testjavaweb.entity.Product;
import com.tandong.testjavaweb.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;
import java.util.Optional;

@RestController
@SpringBootApplication
@RequestMapping("/product")
public class ProductController {
    @Autowired
    ProductService productService;

    @ResponseBody
    @GetMapping(value = "/addProduct")
    public Object addProduct() {
        Product product = new Product();
        product.setDate(new Date());
        product.setDescription("描述");
        product.setName("名字");
        product.setPrice(20);
        productService.addProduct(product);
        return "插入成功";
    }

    @GetMapping(value = "/getList")
    public List<Product> getList() {
        return productService.getProducts();
    }

    @GetMapping(value = "/{id}")
    public Optional<Product> getProductById(@PathVariable Integer id) {
        return productService.getProductById(id);
    }

}

这样,我们重新编译运行即可。

访问:http://localhost:8082/product/addProduct 进行插入数据操作。

访问:http://localhost:8082/product/getList  获取数据库列表,返回的是JSON格式。

访问:http://localhost:8082/product/2  后面的是id,可以获取对应id的Product信息。

注意,如果表没创建,那么我们会自动创建表。

完整项目Github地址:https://github.com/jaychou2012/Spring-Boot-Web

参考文献:

【1】JPA.https://baike.baidu.com/item/JPA/5660672?fr=aladdin

【2】Spring Data JPA.http://projects.spring.io/spring-data-jpa/

猜你喜欢

转载自blog.csdn.net/jay100500/article/details/81264973