Spring Boot + JPAでMySQLに接続する方法
STSのスタータープロジェクトがかなり進化していたのでおさらいです。
「Spring BootでMySQLに接続する」を参考にします。Spring Bootを起動まではできましたが、MySQLに接続するにはapplication.propertiesをさらに追加する必要があります。
spring.datasource.url=jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC spring.datasource.username=root spring.datasource.password=system spring.jpa.database=MYSQL spring.jpa.hibernate.ddl-auto=update
spring.jpa.database=MYSQL
自動で生成されるSQLやDDLが、MySQL向けになるように指示します。
spring.jpa.hibernate.ddl-auto=update
Entityになるクラスを作ると、自動でテーブルの作成、項目変更をしてくれるようにします。
MYSQLに接続してテーブルとレコードをインサートします。
スタートメニューから「MySQL 5.7 Command Line Client」を実行します。パスワードはMySQLインストール時に設定したパスワードを入力してください。
まずデータベースを作ります。
create database testdb;
testdbに切り替えます。
use testdb;
次にテーブルを作成します。
CREATE TABLE `employee_tbl` ( `empno` bigint(20) NOT NULL AUTO_INCREMENT, `empname` varchar(255) DEFAULT NULL, PRIMARY KEY (`empno`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
テーブル作成できたらレコードを適当にインサートします。
insert into employee_tbl
(empname)
values
('従業員A')
,('従業員B')
,('従業員C')
,('従業員D');
ちゃんとインサートできているか確認してみます。
mysql> select * from employee_tbl; +-------+---------+ | empno | empname | +-------+---------+ | 1 | 従業員A | | 2 | 従業員B | | 3 | 従業員C | | 4 | 従業員D | +-------+---------+ 4 rows in set (0.00 sec)
Entityクラスを作成する
package jp.co.confrage;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Getter;
@Entity
@Table(name="employee_tbl")
@Getter
public class Employee {
@Id
@Column(name="empno")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long empno;
@Column(name="empname")
private String empname;
}
Repositoryインタフェースを作成する
package jp.co.confrage;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {}
Controllerクラスを作成する
package jp.co.confrage;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.RestController;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RestController
public class DemoController {
@Autowired
EmployeeRepository empRepository;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index(Model model) {
List<Employee> emplist=empRepository.findAll();
model.addAttribute("employeelist", emplist);
return "index";
}
}
遷移先HTMLを作成する
return “index”;としているのでsrc/main/resources/templates/配下にindex.htmlを作成します。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Springboot</title>
<meta charset="utf-8" />
</head>
<body>
<table>
<tr th:each="emp : ${employeelist}" th:object="${emp}">
<td th:text="*{empno}"></td>
<td th:text="*{empname}"></td>
</tr>
</table>
</body>
</html>
プロジェクトを右クリックして、Spring Bootアプリケーションを実行します。
http://localhost:8080/にアクセスすると以下の画面が表示されるはずです。
※MVCモデルで考えるなら、コントローラからサービスを呼び出してサービスクラスでDB処理するのが本来あるべき姿です。
PostgreSQLのケース
PostgreSQLに接続したい場合は、application.yml(properties)は以下のようにします。
spring:
datasource:
url: jdbc:postgresql://localhost:5432/DB名
username: postgres
password: xxxxyyyy
driverClassNameは省略しても問題ないようです。

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^



コメント