「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」を利用するように変更している。
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上のデータ参照/作成/更新/削除を行うことができる。





