# SpringBootのAPIからMongoDBにアクセスする ## 1. 事前準備 ### 1.1 MongoDBのセットアップ 1. アカウントをサインアップ/サインインする。 2. クラスター(MongoDBのクラウドストレージ)を作成する。 3. DBアクセス用のユーザを作成する。ユーザ名及びパスワードを控える。 4. ネットワークアクセス設定を行う。(…なんとなくAWSに似てる) 5. クラスターのコレクション(COLLECTIONS)にデータを作成する。(Add My Own Data) データベース名及びコレクション名を指定する。 ### 1.2 SpringBootの環境構築 SpringInitializrで作成。今回はGradleを使用。 追加モジュールは、定番のDevToolsとSpring Web以外に、MongoDBにアクセスできるSpring Data MongoDBを加えておく。 ### 1.3 MongoDBと紐づける main/resources/application.propertiesに、以下の文面を記述する。 spring.data.mongodb.uri = mongodb+srv://[user]:[ password]@cluster0.wdfqa.mongodb.net/[dbname]?retryWrites=true&w=majority ※今回利用したDB [user] : [password]→yuuki:yuukidbに置き換え [dbname]→jobsに置き換え ## 2. Javaプログラム ### 構成図 src/main/java/com/example/demo/ 以下 * controller/CandidateController.java * entity/Candidate.java * exception/ResourceNotFoundException.java * repository/CandidateRepository.java ### entity/Candidate.java データ登録及び処理を行うクラスCandidateを設定する。 一般的なインスタンスメソッドと同様に、クラスの中にprivateのフィールド、pubicなgetter, setterを記述する。今回はコンストラクタは無し。 #### アノテーション * @Document:()内にはMongoDBに登録したコレクション名を記述する。(collection = "candidate") * @Id:ユニークなidで解決する時に記述する。 * @Indexed:値の設定を記述する。(unique = true)←一意である(ユニークな)値が必要がある。 ### repository/CandidateRepository.java MongoDBのリポジトリを扱うインターフェースである、CandidateRepositoryへのアクセスを設定する。 IDだけでなく、メールアドレスやexpの数値で検索する場合に利用する。 ### exception/ResourceNotFoundException.java MongoDB内を探してデータが見つからない場合(HTTPステータス404 Not Foundが表示される)、例外を投げる設定を記述する。 ### contoroller/CandidateController.java メイン処理を行う。@RestController及び@RequestMappingをクラスの直前に書き込む @RequestMappingは、"/candidate"を指定。 クラス内では以下の機能を持たせる。 * リポジトリ登録・紐づけ privateでCandidateRepositoryを置く。@Autowiredで * リポジトリにデータを追加 データの追加は@PostMapping(HTTPリクエスト:POST)を利用する。 URLは(ローカルホストのアドレス:以下省略)/candidate、ヘッダーにはcontent-typeにapplication/jsonを指定する。 @RequestBody(Body部分)に記入したJSON形式データをリポジトリに登録する。 @ResponseStatusはHttpStatus.CREATEDとなり、HTTPステータスは「201 OK」が返る。 * リポジトリ全体のデータを取得 データの取得は@GetMapping(HTTPリクエスト:GET)を利用する。 全体の場合、URLは/candidateとなる。ヘッダーはGETの場合指定不要。 リポジトリに登録されたデータをリスト形式で返す。 HTTPステータスは「200 OK」が返る。 * idを指定してデータを取得 id指定の場合、URLは/candidate/各データのidとなる。 @PathVariableでパラメータの指定(String id)を行う。 それ以外は全体のデータ取得と同様。 idが見つからない時、HTTPステータスは「404 Not Found」が返る。 * idを指定してデータを更新 データの更新は@PutMapping(HTTPリクエスト:PUT)を利用する。 URLは/candidate/各データのid、ヘッダーにはcontent-typeにapplication/jsonを指定する。 @PathVariableでパラメータの指定(String id)を行う。 @RequestBody(Body部分)に記入した、更新したJSON形式データをリポジトリにSetterを用いて登録(上書き)する。 HTTPステータスは「200 OK」が返る。 idが見つからない時、HTTPステータスは「404 Not Found」が返る。 * idを指定してデータを削除 データの更新は@DeleteMapping(HTTPリクエスト:DELETE)を利用する。 URLは/candidate/各データのid、ヘッダーにはcontent-typeにapplication/jsonを指定する。 @PathVariableでパラメータの指定(String id)を行う。 idが一致した場合、当該データをリポジトリから削除する。 @ResponseStatusはHttpStatus.ACCEPTEDとなり、HTTPステータスは「202 OK」が返る。 idが見つからない時、HTTPステータスは「404 Not Found」が返る * Eメールを指定してデータを取得 Eメールを用いて取得する場合、URLは/candidate?name=メールアドレス となる。 その他はidを指定してデータを取得の項と同様。 * Exp値を指定してデータを取得 Exp値の範囲を指定してデータを取得する場合、URLは/candidate?name=探索範囲下限値, 探索範囲上限値 となる。 その他はidを指定してデータを取得の項と同様。 #### アノテーション * @Autowired:指定したプロパティに自動で接続を試みる。 * @Get/Post/Put/Delete Mapping:データの取得・追加・更新・削除についての指定を行う。valueに追加のURLを指定できる。 * @RequestBody:Requestで送信するBody値の処理を記述する。 * @ResponseStatus:Responseで返るHTTPステータスの形式を記述する。 * @PathVariable:URLに含まれた文字列をパラメータとして指定する。 * @RequestParam:リクエストパラメータ。URLに?をつけて記述するパラメータの値とその処理を記述する。 ###### tags: `NoSQL` `MongoDB` `SpringBoot`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up