Интеграция Spring Boot с PostgreSQL как проект Maven
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"?> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 <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; @Repositorypublic 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; @SpringBootApplicationpublic class AuthorApplication { public static void main(String[] args) { SpringApplication.run(AuthorApplication.class, args); }} |
Когда все правильно, это можно легко запустить как обычное приложение Java.
Выход консоли:
Добавление авторов: это делается с помощью метода POST в контроллере.
Давайте воспользуемся клиентом «почтальон» для добавления авторов
Поиск авторов:
Мы можем легко получить информацию об авторе следующим образом:
http://localhost:8080/geek/authors
Поскольку мы уже вставили 3 записи, мы получаем все данные об авторе на скриншоте выше.