Spring Boot接続MongonDB構成とテスト
29735 ワード
まず、mongodbがnosqlであるいくつかの特性について説明します.mongodbはドキュメント的なデータベースです.まず、xml、json、bsonタイプ系のデータを格納できるドキュメントのデータベースについて説明します.これらのデータは、自己記述性(self−describing)を備え、階層化されたツリー状のデータ構造を呈する.redisはhashで単純な関係型データを格納することができる.
mongodbはjson形式のデータを格納します.
シーンに適した:コメントシステムなどのイベント記録、コンテンツ管理、ブログプラットフォーム.
mongodbはmysqlとは異なり、mysqlの更新操作のたびに直接ハードディスクに書き込まれますが、mongoはできません.メモリ型データベースとして、データ操作はまずメモリに書き込まれ、それからハードディスクに永続化されます.では、mongoはどのように永続化されていますか.
mongodbは起動時に、crashが適用されない限り、deferキューから永続化するデータを一定期間取得してディスクに書き込むjournal(ログ)とmongofile(データ)の場所を初期化します.もちろん、ユーザーがレコードを追加するときにディスクに書くわけではありませんので、mongodb開発者によると、コードを見たことがあるので、CUD操作を行うと、記録(Recordタイプ)がdeferキューに格納され、遅延バッチ(groupcommit)が書き込みをコミットするために使用されることはありませんが、時間サイクルパラメータは90ミリ秒であり、値が低ければ頻繁なディスク操作をもたらす可能性があります.高すぎると、システムのダウンタイム時にデータが失われます.
次にspring bootでmongodbを構成して接続する方法を記録します
1.pom.xml
2.classpathにアプリケーションを加える.properties、ファイルに以下の内容を追加
3.エンティティークラス
4.Dao
5.テストクラスの作成
仮想マシンにMongonDBをインストールします.dockerインストールコマンドは次のとおりです.
mongodbはjson形式のデータを格納します.
シーンに適した:コメントシステムなどのイベント記録、コンテンツ管理、ブログプラットフォーム.
mongodbはmysqlとは異なり、mysqlの更新操作のたびに直接ハードディスクに書き込まれますが、mongoはできません.メモリ型データベースとして、データ操作はまずメモリに書き込まれ、それからハードディスクに永続化されます.では、mongoはどのように永続化されていますか.
mongodbは起動時に、crashが適用されない限り、deferキューから永続化するデータを一定期間取得してディスクに書き込むjournal(ログ)とmongofile(データ)の場所を初期化します.もちろん、ユーザーがレコードを追加するときにディスクに書くわけではありませんので、mongodb開発者によると、コードを見たことがあるので、CUD操作を行うと、記録(Recordタイプ)がdeferキューに格納され、遅延バッチ(groupcommit)が書き込みをコミットするために使用されることはありませんが、時間サイクルパラメータは90ミリ秒であり、値が低ければ頻繁なディスク操作をもたらす可能性があります.高すぎると、システムのダウンタイム時にデータが失われます.
次にspring bootでmongodbを構成して接続する方法を記録します
1.pom.xml
xml version="1.0" encoding="UTF-8"?>
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.mongodb.demo
mongodbdemo
0.0.1-SNAPSHOT
jar
mongodbdemo
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
1.5.12.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-mongodb
org.springframework.boot
spring-boot-devtools
true
true
com.alibaba
fastjson
1.2.38
org.springframework.boot
spring-boot-starter-freemarker
junit
junit
3.8.1
test
org.junit.jupiter
junit-jupiter-api
RELEASE
junit
junit
RELEASE
org.springframework.boot
spring-boot-maven-plugin
2.classpathにアプリケーションを加える.properties、ファイルに以下の内容を追加
spring.application.name=mongodbdemo
# mongodb
spring.data.mongodb.uri=mongodb://appuser:[email protected]:27017/paas_message_center
3.エンティティークラス
package com.mongodb.demo.mongodbdemo.domain;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = -3258839839160856613L;
private Long id;
private String userName;
private String passWord;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", passWord='" + passWord + '\'' +
'}';
}
}
4.Dao
package com.mongodb.demo.mongodbdemo.dao;
import com.mongodb.demo.mongodbdemo.domain.User;
import java.util.List;
public interface UserDao {
public void saveUser(User user);
public User findUserById(long id);
public User findUserByUserName(String userName);
public void updateUser(User user);
public void deleteUserById(Long id);
public List findAll(int pageNo, int pageSize);
public List list();
}
package com.mongodb.demo.mongodbdemo.dao.impl;
import com.mongodb.demo.mongodbdemo.dao.UserDao;
import com.mongodb.demo.mongodbdemo.domain.User;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("userDao")
public class UserDaoImpl implements UserDao{
@Resource
private MongoTemplate mongoTemplate;
@Override
public void saveUser(User user) {
mongoTemplate.save(user);
}
@Override
public User findUserById(long id) {
Query query = new Query(Criteria.where("id").is(id));
return mongoTemplate.findOne(query,User.class);
}
@Override
public User findUserByUserName(String userName) {
Query query = new Query(Criteria.where("userName").is(userName));
User user = mongoTemplate.findOne(query , User.class);
return user;
}
@Override
public void updateUser(User user) {
Query query=new Query(Criteria.where("id").is(user.getId()));
Update update= new Update().set("userName", user.getUserName()).set("passWord", user.getPassWord());
//
mongoTemplate.updateFirst(query,update,User.class);
//
// mongoTemplate.updateMulti(query,update,User.class);
}
@Override
public void deleteUserById(Long id) {
Query query=new Query(Criteria.where("id").is(id));
mongoTemplate.remove(query,User.class);
}
@Override
public List findAll(int pageNo, int pageSize) {
Query query = new Query();
query.skip((pageNo - 1) * pageSize);
query.limit(pageSize);
query.with(new Sort(new Sort.Order(Sort.Direction.ASC, "userId")));// userId
List users = mongoTemplate.find(query,User.class);
return users;
}
@Override
public List list() {
Query query = new Query();
List users = mongoTemplate.find(query,User.class);
return users;
}
}
5.テストクラスの作成
package com.mongodb.demo.mongodbdemo;
import com.mongodb.demo.mongodbdemo.dao.UserDao;
import com.mongodb.demo.mongodbdemo.domain.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserDaoTest {
@Resource
private UserDao userDao;
@Test
public void testSaveUser() throws Exception {
User user=new User();
user.setId(3L);
user.setUserName(" ");
user.setPassWord("123456");
userDao.saveUser(user);
}
@Test
public void findUserByUserName(){
User user= userDao.findUserByUserName(" ");
System.out.println("user is "+user);
}
@Test
public void updateUser(){
User user=new User();
user.setId(2l);
user.setUserName(" ");
user.setPassWord("fffxxxx");
userDao.updateUser(user);
}
@Test
public void deleteUserById(){
userDao.deleteUserById(1l);
}
@Test
public void listTest() {
List users = userDao.list();
System.out.println(users.size());
for(User user:users) {
System.out.println(user.toString());
}
}
@Test
public void findUserByIdTest() {
User user = userDao.findUserById(1L);
System.out.println(user.toString());
}
}
仮想マシンにMongonDBをインストールします.dockerインストールコマンドは次のとおりです.
docker pull mongo:3.4.9
docker run -p 27017:27017 --name mongodb -d mongo:3.4.9 --auth
docker exec -it mongodb mongo admin
db.createUser({user:"root",pwd:"123456",roles:["root"]});
#
paas_message_center
appuser
123456