「MongoTemplate」を利用すると、「MongoRepository」より柔軟な条件指定によるデータ参照/作成/更新/削除を簡単に行うことができる。
今回は、前回作成した「MongoRepository」を利用したプログラムを「MongoTemplate」を利用するように修正してみたので、そのサンプルプログラムを共有する。
前提条件
下記記事の実装が完了していること。
Spring Boot上でMongoDBをMongoRepositoryで操作してみた以前、Oracleと連携するSpring BootのWEBアプリケーションを作成していたが、同じ機能をMongoDBと連携するように変更...
完成した画面イメージ
下記記事の「完成した画面イメージの共有」を参照のこと。
Spring BootのWEB画面上でCRUDを含むOracleアクセス処理を実装してみた(完成イメージ編)今回は、C(Create)・R(Read)・U(Update)・D(Delete)を一通り含むOracle接続処理をSpring Boo...
サンプルプログラムの作成
作成したサンプルプログラムの構成は以下の通り。
なお、上記の赤枠は、前提条件のプログラムから変更したプログラムである。
DemoServiceImpl.javaの内容は以下の通りで、「MongoRepository」を使っている箇所を「MongoTemplate」を利用するように変更している。
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | package com.example.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; import static org.springframework.data.domain.Sort.Direction.ASC; import static org.springframework.data.domain.Sort.Direction.DESC; @Service public class DemoServiceImpl implements DemoService{ /** * ユーザーデータ(user_data)へアクセスするMongoTemplate */ @Autowired private MongoTemplate template; /** * {@inheritDoc} */ @Override public List<DemoForm> demoFormList(){ List<DemoForm> demoFormList = new ArrayList<>(); //ユーザーデータ(user_data)から全データを取得する Query query = new Query(); query.with(new Sort(ASC, "id")); List<UserData> userDataList = template.find(query, UserData.class); for (UserData userData : userDataList) { demoFormList.add(getDemoForm(userData)); } return demoFormList; } /** * {@inheritDoc} */ @Override public DemoForm findByPKeyId(String pKeyID) { UserData userData = template.findById(pKeyID, UserData.class); return getDemoForm(userData); } /** * {@inheritDoc} */ @Override @Transactional(readOnly = false) public void delete(DemoForm demoForm){ UserData userData = getUserData(demoForm); template.remove(userData); } /** * {@inheritDoc} */ @Override @Transactional(readOnly = false) public void createOrUpdate(DemoForm demoForm){ //更新・追加処理を行うエンティティを生成 UserData userData = getUserData(demoForm); //追加・更新処理 if(demoForm.getId() == null){ Query query = new Query(); query.with(new Sort(DESC, "id")); UserData tmpUserData = template.findOne(query, UserData.class); userData.setId(tmpUserData == null ? 1 : tmpUserData.getId() + 1); template.save(userData); }else{ template.save(userData); } } /** * DemoFormオブジェクトに引数のユーザーデータの各値を設定する * @param userData ユーザーデータ * @return DemoFormオブジェクト */ private DemoForm getDemoForm(UserData userData){ if(userData == null){ return null; } DemoForm demoForm = new DemoForm(); demoForm.setPKeyId(userData.getPKeyId()); demoForm.setId(String.valueOf(userData.getId())); demoForm.setName(userData.getName()); demoForm.setBirthYear(String.valueOf(userData.getBirth_year())); demoForm.setBirthMonth(String.valueOf(userData.getBirth_month())); demoForm.setBirthDay(String.valueOf(userData.getBirth_day())); demoForm.setSex(String.valueOf(userData.getSex())); demoForm.setMemo(userData.getMemo()); demoForm.setSex_value(userData.getSex() == 1 ? "男" : "女"); return demoForm; } /** * UserDataオブジェクトに引数のフォームの各値を設定する * @param demoForm DemoFormオブジェクト * @return ユーザーデータ */ private UserData getUserData(DemoForm demoForm){ UserData userData = new UserData(); userData.setPKeyId(demoForm.getPKeyId()); if(!StringUtils.isEmpty(demoForm.getId())){ userData.setId(Long.valueOf(demoForm.getId())); } userData.setName(demoForm.getName()); userData.setBirth_year(Integer.valueOf(demoForm.getBirthYear())); userData.setBirth_month(Integer.valueOf(demoForm.getBirthMonth())); userData.setBirth_day(Integer.valueOf(demoForm.getBirthDay())); userData.setSex(Integer.valueOf(demoForm.getSex())); userData.setMemo(demoForm.getMemo()); return userData; } } |
その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-mongo-template/demo
要点まとめ
- 「MongoTemplate」を利用した場合も、MongoDB上のデータ参照/作成/更新/削除を行うことができる。