SpringBootとOracle11gr2XEを連携させてみた
タイトルの通りSpringBootでOracle Express Edition 11g r2と連携させてみました。
環境は以下の通りです。
- Windows 10 Home
- Java11
- Spring Tool Suite 4.6.2
- Oracle Express Edition 11g r2
プロジェクトの作成
「File」→「New」から以下の「Spring Starter Project」を押下する。
ここになかったら「Other」の中の「Spring Boot」の中にあります。
「New Spring Starter Project」のウィンドウが開くので「Name」にプロジェクト名を入れましょう。今回は「HelloWorldOracle」で作成します。「Next>」を押下しましょう。
「New Spring Starter Project Dependencies」の画面がでてくるので、今回は「Spring Web」と「Thymeleaf」と「Oracle Driver」と「JDBC API」を選択しましょう。選択したら「Finish」を押下。
作成されたプロジェクト
以下のようにプロジェクトが作成されるはずです。
作成タイミングによっては、バージョンが違って動かないなんでこともあるかもなので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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>HelloWorldOracle</artifactId> <version>0.0.1-SNAPSHOT</version> <name>HelloWorldOracle</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <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>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.properiesの設定
server.port=8888 spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE spring.datasource.username={username} spring.datasource.password={password} spring.datasource.driverClassName=oracle.jdbc.OracleDriver
index.htmlとHelloWorldOracle.javaの作成
以下のように「index.html」と「HelloWorldOracle.java」を作成する。今回は、SpringBootとOracleの連携が目的なのでMVCモデルに沿っていないので悪しからず。。。
今回「index.html」は、「templates」配下に配置しました。
「HelloWorldOracle.java」は、「com.example.demo」に「controller」パッケージを追加してその配下に配置しました。
「index.html」の内容
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>HelloWorldOracle</title> </head> <body> <h1>SpringBoot</h1> <p th:text="${message}"></p> <form method="post" action="/findOneId"> <p>001を入力してください</p><input type="text" name="animalId" th:value="${animalId}"/> <input type="submit" value="送信"/> </form> <table> <tr> <td>ID:</td><td th:text="${animalId}"></td> </tr> <tr> <td>Name:</td><td th:text="${animalName}"></td> </tr> <tr> <td>address:</td><td th:text="${address}"></td> </tr> </table> </body> </html>
「HelloWorldOracle.java」の内容
package com.example.demo.controller; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class HelloWorldOracle { @Autowired private JdbcTemplate jdbcTemplate; @GetMapping("/") public String helloWorldOracle(Model model) { model.addAttribute("messege","HelloWorldOracle"); return "index"; } @PostMapping("/findOneId") public String fineOneId(@RequestParam("animalId") String id, Model model) { String sqlText = "SELECT animal_id ,animal_name ,address" + " FROM animal" + " WHERE animal_id = ?"; Map<String,Object> animal = jdbcTemplate.queryForMap(sqlText,id); model.addAttribute("animalId",animal.get("animal_id")); model.addAttribute("animalName",animal.get("animal_name")); model.addAttribute("address",animal.get("address")); return "index"; } }
Oracle側の準備
以下のテーブルとデータを用意しておきます。
--テーブル作成 CREATE TABLE animal ( animal_id VARCHAR(3) , animal_name VARCHAR(10), address VARCHAR(10) ); --データ作成 INSERT INTO animal(animal_id,animal_name,address) VALUES('001','いるか','海');
これで準備完了しました。「http://localhost:8888/」にアクセスしてID検索をしましょう。Oracleとの連携ができることが確認できます。
コメント