アダム:
MongoDB クライアントでの MongoDB ステートメントを学習する前に、MongoDB を Spring プロジェクトに統合します。
ポータル:
MongoDB ドキュメント -- 基本概念 - A Single Cheng ブログ - CSDN ブログ
使用テクノロジーの紹介:
コンセプトノート:
spring-data-mongodb
2 つの操作モードMongoTemplate
が あり 、操作は簡単ですが、柔軟な操作ができないのが欠点です 。この 2 つのモードをプロジェクト内で柔軟に使用できます。MongoRepository
MongoRepository
MongoTemplate
MongoTemplate
MongoTemplate は Spring Data MongoDB プロジェクトの一部であり、MongoDB データベースを使用するアプリケーションに抽象化レイヤーを提供する Spring 拡張機能です。MongoTemplate は、低レベルの MongoDB ドライバー コードを作成せずに、さまざまなデータベース操作を実行するためのシンプルかつ強力な方法を提供します。
MongoTemplate の主な機能は次のとおりです。
- ドキュメントの挿入と更新: MongoTemplate は、MongoDB データベースにドキュメントを挿入および更新するための便利な方法を提供します。
- クエリ ドキュメント: MongoTemplate は、クエリ条件、並べ替え、制限、投影など、さまざまなクエリ パラメーターを使用してデータベース内のドキュメントを取得できるさまざまなクエリ メソッドを提供します。
- 集計操作: MongoTemplate は、カウント、グループ化、合計などの複雑な集計操作を実行できる集計フレームワークをサポートします。
- インデックス管理: MongoTemplate はデータベース インデックスを作成、削除、クエリできます。
- コマンドと操作: MongoTemplate は、データベース統計の計算、ストアド プロシージャの実行など、さまざまなデータベース コマンドと操作もサポートしています。
MongoTemplate を使用すると、MongoDB データベース運用の開発作業が簡素化され、生産性と保守性が向上します。
MongoRepository
MongoRepository は、Spring Data MongoDB プロジェクトのもう 1 つの抽象化レイヤーであり、MongoTemplate に基づくより高いレベルの抽象化です。MongoRepository は、MongoDB データベースとの対話を定義するためのアノテーション ベースのインターフェイスを提供します。MongoRepository を使用すると、低レベルのデータベース操作コードを作成せずに、データ アクセス ロジックの定義に集中できます。
MongoRepository の主な機能は次のとおりです。
- ドキュメントのクエリ: MongoRepository は、データベース内のドキュメントをクエリするための便利な方法を提供します。注釈を使用すると、クエリ条件、順序、制限、予測を定義できます。
- 集計操作: MongoRepository は、カウント、グループ化、合計などの複雑な集計操作を実行できる集計フレームワークをサポートします。
- ページング クエリ: MongoRepository は、クエリ結果の数を制限し、結果の次のページを取得できるページング クエリ機能を提供します。
- カスタム クエリ: より複雑なクエリ操作を実行する必要がある場合、MongoRepository はカスタム クエリのメソッドも提供します。ストアド プロシージャを作成するか、MongoDB のクエリ言語を使用してカスタム クエリを実行できます。
MongoRepository を使用すると、MongoDB データベースにアクセスする宣言的な方法が提供されるため、コードがより簡潔になり、保守しやすくなります。注釈と自動的に実装されたインターフェイスを通じて、基礎となるデータベース操作の詳細を気にすることなく、ビジネス ロジックの実装に集中できます。
スプリングブートで使用するMongoRepository进行增删改查
アダム:
MyBatis-Plusを使用することはMongoRepository的好处是和
、パッケージ化されたメソッドを多数提供することに似ています。非常に便利です (単純な CRUD の場合)。しかし、そんなことはないことが分かりました!!変更されたカプセル化の適切な使用法。
1. 依存関係を導入する
コアの依存関係:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
この依存関係は、MongoDB データベースと対話するために Spring Boot によって提供されるスターター依存関係です。Spring Boot でアプリケーションを開発するときに MongoDB を簡単に使用するために必要なライブラリと依存関係が含まれています。
具体的には、この依存関係は次の機能を提供します。
- 自動構成: Spring Boot は、Mongo クライアントの作成、接続プロパティの設定などを含め、MongoDB データベースとの接続を自動的に構成します。
- MongoTemplate: さまざまなデータベース操作を実行するためのコア クラスである MongoTemplate を自動的に構成します。MongoTemplate を使用すると、ドキュメントの挿入、更新、クエリなどの操作を簡単に行うことができます。
- MongoRepository: MongoRepository は自動的に構成されます。これは、MongoDB データベースとの対話を定義するためのアノテーション ベースのインターフェイスです。MongoRepositoryを継承することで、クエリや集計操作などが便利に実行できるようになります。
- テンプレート化された操作: MongoTemplate と MongoRepository を使用すると、テンプレート化された方法でデータベース操作を実行でき、コードがより簡潔で読みやすくなります。
つまり、この依存関係を追加すると、低レベルのデータベース オペレーション コードを手動で構成して作成することなく、Spring Boot を使用して MongoDB と簡単に統合できます。
その他の依存関係: (単純な Spring-Boot プロジェクトを直接開始したい場合は、それを削除できます)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
2. application.yml ファイルは、接続 MongoDB 構成ファイルを記述するために使用されます。
spring:
data:
mongodb:
host: 127.0.0.1 #指定MongoDB服务地址
port: 27017 #指定端口,默认就为27017
database: article#指定使用的数据库(集合)
authentication-database: admin # 登录认证的逻辑库名
username: #用户名
password: #密码
知らせ:
接続ユーザーがいない場合は、状況に応じて一部の設定ファイルを削除できます。
MySQL との違いは、MySQL では 1 人のユーザーが複数のデータベースを管理できるのに対し、MongoDB では各データベースに独立した管理ユーザーが必要であり、接続時に対応するユーザーのパスワードを入力する必要があることです。
3. エンティティクラスについての記述 (落とし穴がある場合は注意!!)
主なメモ:
1. @Document は、データベース内の最も基本的なデータ単位である MongoDB のドキュメントに対応します。これは、JSON 形式に似たキーと値のペアで構成され、さまざまなフィールドを格納できます。フィールドの値には次のものを含めることができます。他のドキュメント、配列、ドキュメント配列。
2. @Id (主キー): メンバー変数の値をドキュメントの _id の値にマップするために使用されます。値を _id に割り当てる方法は、前のドキュメントで説明しています。
3. @Index (インデックス): インデックスは、簡単に走査して読み取ることができるデータ コレクションに格納される特別なデータ構造であり、データ ドキュメント内のデータを並べ替えることができます。インデックスを作成すると、ドキュメント クエリの効率が大幅に向上します。
4. @Field (フィールド): MySQL の列の概念に似た、ドキュメント内のフィールド。
5. @Aggregation(集計):集計は主に統計的な平均や合計などのデータ処理に使用されます。
例:
package com.adn.mongodb.common;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
/**
* 阿丹实体类
* */
@Data
@Document(collection = "ExampleDB")
public class Adn {
@Id
@Field("_id")
private Long id;//阿丹主键
@Field("name")
private String name;//阿丹名称
@Field("gender")
private String gender;//阿丹性别
@Field("specialty")
private String specialty;//特长描述
}
例のドキュメントはコレクションの名前です
知らせ:
必ず注釈 @Field("name") を記述してフィールドの名前にマップしてください。そうしないと、すべての結果が空になります。!!
4. 使用するMongoRepository来完成简单增删改查
これは基礎となるパッケージ化されたコードのすべてです。コードを直接ここに示します。ご不明な点がございましたら、コメント欄でご相談ください
コントローラ制御層
package com.adn.mongodb.controller;
import com.adn.mongodb.common.Adn;
import com.adn.mongodb.service.MongodbService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* 控制层器
* */
@RestController
public class MongodbController {
@Autowired
private MongodbService mongodbService;
/**
* 根据id来进行查询
* */
@GetMapping("/adn/{id}")
public Adn adn(@PathVariable String id) {
System.out.println(id);
return mongodbService.adn(id);
}
/**
* 增加数据插入数据
* */
@PostMapping("/save")
public Adn save(@RequestBody Adn adn) {
return mongodbService.save(adn);
}
// @RequestMapping("/adn")
// public String adn() {
/**
* 修改
* */
@PutMapping("/update")
public Adn update(@RequestBody Adn adn) {
return mongodbService.update(adn);
}
/**
* 插入因为没有对应的方法,所以使用单查询+删除+新增来处理
* */
/**
* 删除
* */
@DeleteMapping("/delete/{id}")
public void delete(@PathVariable String id) {
mongodbService.delete(id);
}
}
サービス層インターフェース
package com.adn.mongodb.service;
import com.adn.mongodb.common.Adn;
public interface MongodbService {
Adn adn(String id);
Adn save(Adn adn);
Adn update(Adn adn);
void delete(String id);
}
サービス層実装クラス
package com.adn.mongodb.service.Impl;
import com.adn.mongodb.common.Adn;
import com.adn.mongodb.mapper.AdnMapper;
import com.adn.mongodb.service.MongodbService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigurationPackage;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
public class MongodbServiceImpl implements MongodbService {
@Autowired
private AdnMapper adnMapper;
@Override
public Adn adn(String id) {
Adn res = null;
Optional<Adn> byId = adnMapper.findById(id);
System.out.println(byId);
boolean present = byId.isPresent();
if(present){
res = byId.get();
}
return res;
}
@Override
public Adn save(Adn adn) {
return adnMapper.save(adn);
}
@Override
public Adn update(Adn adn) {
return adnMapper.updata(adn);
}
@Override
public void delete(String id) {
adnMapper.deleteById(id);
}
}
dao層(慣れてきたのでマッパーを書きました)
キーポイント: MongoRepository クラスを継承するには! !!
package com.adn.mongodb.mapper;
import com.adn.mongodb.common.Adn;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.Optional;
public interface AdnMapper extends MongoRepository<Adn, String> {
}