データベース情報設定
プロジェクトにデータベースの接続情報を設定します。フォルダー「src/main/resurces」の「application.properties」ファイルを開いてください。そして次の内容を入力し保存してください
1 2 3 |
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/challenge05?serverTimezone=JST spring.datasource.username=root spring.datasource.password= |
詳細は割愛しますが、データベースのサーバー、ユーザID/パスワード情報が設定されています。
接続テスト
データベースと接続できるかテストしてます。ListApplication.javaを次のように変更してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
package com.example.demo; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.jdbc.core.JdbcTemplate; @SpringBootApplication public class ListApplication implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(ListApplication.class, args); } @Autowired JdbcTemplate jdbcTemplate; @Override public void run(String... strings) throws Exception { List<Map<String, Object>> ret = jdbcTemplate.queryForList("SELECT * FROM item"); for(Map<String, Object> each: ret) { System.out.println((Integer)each.get("id")); System.out.println((String)each.get("name")); System.out.println((Integer)each.get("kind")); System.out.println((Integer)each.get("price")); } } } |
14行目でインタフェースCommandLineRunnerを記述していますが、このインターフェースにSpring Boot起動時に実行されるメソッドが定義されています。今回はこのメソッドにデーターベース接続確認用の命令を記述します。
14 |
public class ListApplication implements CommandLineRunner { |
19行目の「@Autowired」がクラスをインスタンス化する命令です。これを記述すると次の行のクラスがインスタンス化されます。単純にnew命令によりインスタンス化しないのは、DI(依存性の注入)という動作を実現するためです。これでデータベースへアクセスするためのクラスJdbcTemplateがインスタンス化されます。
19 20 |
@Autowired JdbcTemplate jdbcTemplate; |
インタフェースに定義されているメソッドが23行目のrunです。このメソッドの中にデータベース接続確認用の命令を記述します。
22 23 |
@Override public void run(String... strings) throws Exception { |
25行目の「jdbcTemplate.queryForList」命令がデータベースのアクセス命令です。引数にお馴染みのSQL文が記述されています。戻り値が<Map<String, Object>>型の配列(List)で返ってきます。
25 |
List<Map<String, Object>> ret = jdbcTemplate.queryForList("SELECT * FROM item"); |
27行目から取得したレコード数分、各項目を取り出しながら表示しています。
27 28 29 30 31 32 |
for(Map<String, Object> each: ret) { System.out.println((Integer)each.get("id")); System.out.println((String)each.get("name")); System.out.println((Integer)each.get("kind")); System.out.println((Integer)each.get("price")); } |
実行するとデータベースのアクセスが正常ならテーブルitemの内容がコンソールに表示されます。
デーベースアクセスができましたので、プログラムを作成していきましょう。