概要
STSを使ってSpring WebでRESTなサービスを使ったときの備忘録を残しておきます。
主に自分用。
Spring Webとは、Spring Frameworkをベースにした
Webアプリケーションフレームワークです。
開発環境は次の通りです。
OS : Windows 7 Home Edition 64bit
Java : JavaSE 8 update 181
Spring Boot : 2.3.4
STS : 4.6.1
STSのセットアップ
STSのセットアップは自分の備忘録を参考にしました。
プロジェクトの作成
Create new Spring Starter Projectでプロジェクト作成、
参照したライブラリは以下の通りです。
- Spring Web
- Spring Data JPA
- Oracle Driver
- Lombok
アプリケーションの作成
作成したクラス、設定ファイル、用意したデータは次の通りです。
Spring Bootアプリケーション起動時の実行クラスです。
package jp.co.illmatics;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringWebSampleApplication {
public static void main(String[] args) {
SpringApplication.run(SpringWebSampleApplication.class, args);
}
}
REST APIとなるクラスです。
REST APIにするために@RestControllerを、
CORSでアクセス権を付与するために@CrossOriginを
それぞれ付与しました。
取得できる値はJSON形式となります。
値の詳細は後程説明します。
package jp.co.illmatics.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import jp.co.illmatics.dao.UserDao;
import jp.co.illmatics.model.User;
@CrossOrigin
@RestController
public class UsersController {
@Autowired
private UserDao userInfoDao;
@RequestMapping(method = RequestMethod.GET, value = "/users")
public List<User> get() {
return userInfoDao.getUserInfoList();
}
}
Data Access Objectです。
実装時にはインターフェースとその実装クラスの両方が必要です。
package jp.co.illmatics.dao;
import java.util.List;
import jp.co.illmatics.model.User;
public interface UserDao {
public List<User> getUserInfoList();
}
UserDaoの実装クラスです。
Userのリストを取得するメソッドを定義します。
IDカラム昇順で全件取得します。
package jp.co.illmatics.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import jp.co.illmatics.model.User;
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public List<User> getUserInfoList() {
List<User> list = jdbcTemplate.query("select * from USER_INFO ORDER BY ID"
, new Object[] {},
new RowMapper<User>() {
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getString("ID"));
user.setName(rs.getString("NAME"));
user.setAge(rs.getInt("AGE"));
return user;
}
});
return list;
}
}
USER_INFOテーブルのモデルクラスです。
package jp.co.illmatics.model;
import javax.persistence.Table;
import org.springframework.stereotype.Component;
import lombok.Data;
@Data
@Component
@Table(name = "USER_INFO")
public class User {
private String id;
private String name;
private Integer age;
}
テストデータを格納したDB接続情報です。
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=xxxxxx
spring.datasource.password=xxxxxx
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
spring.jpa.show-sql=true
作成したテーブルです。
※USERというテーブル名は予約語のため作成できず、
このような名前にしています。
create table USER_INFO (
"ID" varchar2(20),
"NAME" varchar2(20),
"AGE" number(3,0),
constraint "PK_USER" primary key ("ID")
);
USER_INFOテーブルに用意したデータです。
ID | NAME | AGE |
---|---|---|
user001 | userName001 | 35 |
user002 | userName002 | 30 |
user003 | userName003 | 25 |
動作確認
以上です。最後までお読みいただき、ありがとうございました。