カツオ @SpringBootとVue.jsでWebサービス開発中

起業、転職、サラリーマン生活、Webサービス、アプリ、働き方、プログラミング、Java、JavaScript

IT java

【SpringBoot入門】Spring Boot + PostgreSQLの設定・DB検索

投稿日:

この週末にSpringBootの入門書を1冊写経しながら勉強しました。入門書の中ではDBアクセスがHSQLDBのみの例しかなかったので、Webサイトなどを参考にしつつ、PosgresSQLとの接続を試してみました。備忘も兼ねて記載しておきます。

※初心者なので表現に誤りがあるかもです

概要

  • DBにPostgresSQLを利用したSpringBootの簡単なプログラムを作成
  • DBから情報取得しWeb画面に表示するとことまでを目指す

PostgresSQLの準備

テーブル作成

CREATE TABLE client (
 id SERIAL PRIMARY KEY,
 name text,
 mail text, 
 memo text
);

データ登録

insert into client values(1,'山田 太郎','yamada@yama.com','大口のお取引先');
insert into client values(2,'鈴木 花子','suzuki@hanako.com','とても美人');
insert into client values(3,'田中 大輔','tanaka@daisuke.com','若くて優秀');
insert into client values(4,'伊藤 カイジ','kaizi@ito.com','負債者。お金がない。');
insert into client values(5,'大槻 ハンチョウ','hancho@kuzu.com','地下の班長');

Spring Boot側の設定

pom.xml

<?xml version="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.0</modelVersion>

	<groupId>com.example</groupId>
	<artifactId>PosgreSampleApp</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>PosgreSampleApp</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.1.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</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-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</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>

src/main/resources/application.properties

postgresの接続情報を追記する。

spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/sample1
spring.datasource.username=postgres
spring.datasource.password=postgres

SpringBootのプログラム開発

エンティティクラスの作成

Client.java

package com.example.demo;

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="client")
public class Client {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column
	private int id;

	@Column
	private String name;

	@Column
	private String mail;

	@Column
	private String memo;

	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 String getMail() {
		return mail;
	}

	public void setMail(String mail) {
		this.mail = mail;
	}

	public String getMemo() {
		return memo;
	}

	public void setMemo(String memo) {
		this.memo = memo;
	}
}

リポジトリの作成

package com.example.demo.repositories;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.example.demo.Client;
;

@Repository
public interface ClientRepository extends JpaRepository<Client, Integer>{

}

 コントローラーの作成

データを全件表示し、追加もできるようなものを作ってみます。

package com.example.demo;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.example.demo.repositories.ClientRepository;

@Controller
public class PosgresSampleController {
	@Autowired
	ClientRepository repository;

	@RequestMapping(value="/",method=RequestMethod.GET)
	public ModelAndView index(
			@ModelAttribute("formModel") Client tmp ,
			ModelAndView mav) {
		mav.setViewName("index");
		Iterable<Client> list = repository.findAll();
		mav.addObject("list",list);

		return mav;
	}

	@RequestMapping(value="/",method=RequestMethod.POST)
	@Transactional
	public ModelAndView form(
			@ModelAttribute("formModel") Client tmp ,
			ModelAndView mav) {

		repository.saveAndFlush(tmp);
		return new ModelAndView("redirect:/");
	}

}

 ビューの作成

Thymleafを使ってます。

package com.example.demo;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.example.demo.repositories.ClientRepository;

@Controller
public class PosgresSampleController {
	@Autowired
	ClientRepository repository;

	@RequestMapping(value="/",method=RequestMethod.GET)
	public ModelAndView index(
			@ModelAttribute("formModel") Client tmp ,
			ModelAndView mav) {
		mav.setViewName("index");
		Iterable<Client> list = repository.findAll();
		mav.addObject("list",list);

		return mav;
	}

	@RequestMapping(value="/",method=RequestMethod.POST)
	@Transactional
	public ModelAndView form(
			@ModelAttribute("formModel") Client tmp ,
			ModelAndView mav) {

		repository.saveAndFlush(tmp);
		return new ModelAndView("redirect:/");
	}

}

-IT, java

執筆者:


  1. […] 【SpringBoot入門】Spring Boot + PostgreSQLの設定・DB検索 […]

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

【SpringBoot+PostgresSQL】JPA EntityでIDを自動採番する

SpringBootでDBへデータ登録する際に主キーを自動で採番するやり方です。個人的に詰まってしまい色々調べたので、まとめておきます。 やりたいこと テーブルのキーを自動で採番する postgres …

no image

【AI】近畿大学のAIが自分の性格にあった本を紹介してくれるアプリを使ってみた

https://act.kindai.ac.jp/personality_test/ 近畿大学がAIを使ったお薦めの本を紹介してくれるアプリをリリースした。ユーザーのSNSへの投稿を分析して、性格を判 …

no image

【mybatis】Insert時にシーケンスで自動採番されたキーを取得する【SpringBoot】

サーバーサイドはSpringBootを使って絶賛Webサービスを開発しています。カツオです。 SpringBootのDBアクセスはJPAが主流なのかもしれませんが、JPAだとデータモデルとJavaのク …

【炎上PJ】システム開発会社に入社し初期配属がまじでヤバかった話①

去年まで大手のシステムインテグレータ(システム開発会社)で働いていました。カツオです。 システム開発の仕事って皆様どんなイメージをお持ちでしょうか。 ブラック、帰れない、残業地獄、デスマーチ… などな …

no image

【起業】新規Webサービスの立ち上げは忍耐だ

私もいつかは起業を夢見ているサラリーマンの1人です。新しいWebサービスのアイディアを考えたり、誰かと議論したりするのって本当に楽しいですよね。 アイディアを考えたり、デモを作ってみたりというところま …