SpringBoot Hibernateでselectするサンプル

SpringBootとHibernateでDBからselectするサンプルです。
Hibernateの開発元はRed Hat社で、フリーソフトです。
オブジェクト関係マッピングと呼ばれます。(ORM,Object-relational mapping)

確認環境
・Spring Boot 2.3.3
・JDK 11.0.2
・STS 4.7.2

目次

サンプル 環境
  1.pom.xmlの設定
  2.application.propertiesの設定
  3.hibernate-config.xmlの設定
  4.エンティティのクラス(Syain.java)
  5.レポジトリのクラス(SyainRepository.java)
  6.コントローラのクラス(MainController.java)
  画面の確認

環境

今回作成/修正するファイルは以下の赤枠の部分です。

以下は、使用するMySQLのテーブルです。テーブル名は「syain」です。

id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

1.pom.xmlの設定

pom.xmlのdependenciesの箇所に以下の1~11行目を追記します。

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-annotations -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-annotations</artifactId>
    <version>3.5.6-Final</version>
</dependency>

2.application.propertiesの設定

application.propertiesにDB情報を記述しています。

spring.datasource.url=jdbc:mysql://localhost:3309/testphp?serverTimezone=JST
spring.datasource.username=root
spring.datasource.password=
server.port = 8765

1行目のtestphpはデータベース名です。ポート番号は3309にしています。

3.hibernate-config.xmlの設定

hibernate-config.xmlにhibernateの設定を記述しています。ファイル名は任意です。

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
    
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3309/testphp?serverTimezone=JST</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>

        <property name="connection.pool_size">1</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="current_session_context_class">thread</property>
         <property name="show_sql">true</property>
    </session-factory>

</hibernate-configuration>

以下は、redhatのHibernateの設定のリンクです。
https://access.redhat.com/documentation/ja-jp/red_hat_jboss_web_server/1.0/html/hibernate_core_reference_guide/tutorial#tutorial-firstapp-configuration

4.エンティティのクラス(Syain.java)

エンティティのクラスです。Syainテーブルのデータを格納します。

package com.example.demo;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;

@Entity
@Table(name="syain")
public class Syain {
    @Id
    private Integer id;
    
    private String name;
    
    private String romaji;
    
    public Integer getId() {
        return id;
    }
	public String getName() {
		return name;
	}
	public String getRomaji() {
		return romaji;
	}
}

5.レポジトリのクラス(SyainRepository.java)

レポジトリのクラスです。SQLを実行します。

package com.example.demo;

import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.springframework.stereotype.Repository;

@Repository
public class SyainRepository {

	@SuppressWarnings("unchecked")
	public List<Syain> findAll() {

		List<Syain> syainList = null;

		SessionFactory sf = new Configuration().configure("hibernate-config.xml").addAnnotatedClass(Syain.class)
				.buildSessionFactory();

		Session session = sf.getCurrentSession();

		try {
			session.beginTransaction();
			syainList = session.createQuery("from Syain").list();
			session.getTransaction().commit();

		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			sf.close();
		}
		return syainList;
	}
}

17行目は、Hibernateの設定ファイル(hibernate-config.xml)を読み込んでいます。
24行目は、Syainテーブルからデータを取得しています。
23行目のトランザクション(beginTransaction)は必要です。
33行目は、取得したデータをリストで返します。

6.コントローラのクラス(MainController.java)

コントローラのクラスです。

package com.example.demo;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainController {
	@Autowired
	private SyainRepository syainRepository;

	@GetMapping("/test1")
	public List<Syain> get() {
		return syainRepository.findAll();
	}
}

7行目のRestControllerアノテーションは、メソッドの戻り値を画面に表示します。
14行目は、SyainRepositoryクラスのfindAllメソッドを実行します。

画面の確認

1.以下のURLにアクセスします。
http://localhost:8765/test1

2.画面にJSON形式で以下のように表示されます。

[{"id":1,"name":"鈴木","romaji":"suzuki"},{"id":2,"name":"田中","romaji":"tanaka"},{"id":3,"name":"佐藤","romaji":"sato"}]

関連の記事

SpringBoot JPAでMySQLにselectするサンプル
SpringBoot SpringJDBCでselectするサンプル
SpringBoot SpringJDBCでinsertするサンプル

△上に戻る