Интеграция Spring Boot с PostgreSQL как проект Maven

Опубликовано: 7 Января, 2023

PostgreSQL — это удобная универсальная СУБД . Эта статья позволяет нам увидеть, как интегрировать Spring Data JPA с PostgreSQL. При использовании PostgreSQL необходимо соблюдать некоторые соглашения. Мы расскажем и об этом.

Работа с PostgreSQL.

Мы можем легко создавать базы данных и таблицы в нем. На скриншоте ниже показано, как подключиться к PostgreSQL через командную строку.

Теперь давайте создадим таблицу с именем «geek_author» в базе данных «geeksforgeeks».

Note: During table creation, PostgreSQL expects _ as the separator between two words.

Последовательность необходима, так как мы используем «GenerationType.SEQUENCE». Следовательно, нам нужно создать, используя

CREATE SEQUENCE hibernate_sequence START 1;

Пример проекта

Структура проекта:

Это проект maven. Все зависимости должны быть указаны в pom.xml. Поскольку мы подключаем PostgreSQL, эта зависимость важна

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

Поскольку мы используем данные Spring JPA, эта зависимость важна.

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

пом.xml

XML




<?xml version="1.0" encoding="UTF-8"?>
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
  
    <groupId>com.gfg.postgresql</groupId>
    <artifactId>springboot-postgresql-sample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
  
    <name>springboot-postgresql-sample</name>
    <description>Demo project for Spring Boot</description>
  
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.0</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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        
        <!--postgresql dependency -->
         <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
  
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
          
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

Начнем с класса Model. Именование пусть будет параллельным с таблицей Postgres

geek_author.java

Java




import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
  
@Entity 
@Table(name = "geek_author")
public class geek_author {
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    private Integer author_id;
  
    private String author_name;
  
    private String email_id;
  
    public Integer getAuthor_id() {
        return author_id;
    }
  
    public void setAuthor_id(Integer author_id) {
        this.author_id = author_id;
    }
  
    public String getAuthor_name() {
        return author_name;
    }
  
    public void setAuthor_name(String author_name) {
        this.author_name = author_name;
    }
  
    public String getEmail_id() {
        return email_id;
    }
  
    public void setEmail_id(String email_id) {
        this.email_id = email_id;
    }    
      
}

Давайте напишем класс репозитория сейчас

АвторРепозиторий.java

Java




import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
  
import com.gfg.postgresql.model.geek_author;
  
@Repository
public interface AuthorRepository extends JpaRepository<geek_author, Long>{
  
}

Авторконтроллер.java

Java




import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
  
import com.gfg.postgresql.model.geek_author;
import com.gfg.postgresql.repository.AuthorRepository;
  
// This means that this 
// class is a Controller
@Controller    
  
// This means URL"s start with /geek (after Application path)
@RequestMapping(path="/geek"
public class AuthorController {
    
    // This means to get the bean called geekuserRepository
    // Which is auto-generated by Spring, we will use it
    // to handle the data
    @Autowired 
    private AuthorRepository authorRepository;
  
    // Map ONLY POST Requests
    @PostMapping(path="/addauthor"
    public @ResponseBody String addAuthors (@RequestParam String author_name
            , @RequestParam String email_id) {
        
        // @ResponseBody means the returned String
        // is the response, not a view name
        // @RequestParam means it is a parameter
        // from the GET or POST request      
        geek_author geekAuthor = new geek_author();
          
        geekAuthor.setAuthor_name(author_name);
        geekAuthor.setEmail_id(email_id);
        authorRepository.save(geekAuthor);
        return "Details got Saved";
    }
  
    @GetMapping(path="/authors")
    public @ResponseBody Iterable<geek_author> getAllAuthors() {
        // This returns a JSON or 
        // XML with the Book
        return authorRepository.findAll();
    }
}

Приложение, которое можно запустить, закодировано следующим образом:

АвторApplication.java

Java




import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
  
@SpringBootApplication
public class AuthorApplication {
      
    public static void main(String[] args) {
        SpringApplication.run(AuthorApplication.class, args);
    }
}

Когда все правильно, это можно легко запустить как обычное приложение Java.

Выход консоли:

Добавление авторов: это делается с помощью метода POST в контроллере.

Давайте воспользуемся клиентом «почтальон» для добавления авторов

Поиск авторов:

Мы можем легко получить информацию об авторе следующим образом:

http://localhost:8080/geek/authors

Поскольку мы уже вставили 3 записи, мы получаем все данные об авторе на скриншоте выше.