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(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント