ポータル:
MongoDB ドキュメント -- 基本概念 - A Single Cheng ブログ - CSDN ブログ
テクノロジーの使用の概要:
概念の説明:
spring-data-mongodb は、MongoTemplate と MongoRepository の 2 つの操作モードを提供します。MongoRepository は
操作が簡単です。欠点は、柔軟性が十分ではないことです。MongoTemplate は
操作が柔軟で、これら 2 つのモードはプロジェクトで柔軟に使用できます
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 データベースにアクセスする宣言的な方法が提供されるため、コードがより簡潔になり、保守しやすくなります。注釈と自動的に実装されたインターフェイスを通じて、基礎となるデータベース操作の詳細を気にすることなく、ビジネス ロジックの実装に集中できます。
使用MongoTemplate完成简单增删改查
常用方法
常用方法
mongoTemplate.findAll(User.class): 查询User文档的全部数据
mongoTemplate.findById(<id>, User.class): 查询User文档id为id的数据
mongoTemplate.find(query, User.class);: 根据query内的查询条件查询
mongoTemplate.upsert(query, update, User.class): 修改
mongoTemplate.remove(query, User.class): 删除
mongoTemplate.insert(User): 新增
Query对象
1、创建一个query对象(用来封装所有条件对象),再创建一个criteria对象(用来构建条件)
2、 精准条件:criteria.and(“key”).is(“条件”)
模糊条件:criteria.and(“key”).regex(“条件”)
3、封装条件:query.addCriteria(criteria)
4、大于(创建新的criteria):Criteria gt = Criteria.where(“key”).gt(“条件”)
小于(创建新的criteria):Criteria lt = Criteria.where(“key”).lt(“条件”)
5、Query.addCriteria(new Criteria().andOperator(gt,lt));
6、一个query中只能有一个andOperator()。其参数也可以是Criteria数组。
7、排序 :query.with(new Sort(Sort.Direction.ASC, "age"). and(new Sort(Sort.Direction.DESC, "date")))
アダム:
MongoDB を使用するMongoTemplate来完成的好处就是可以自己构造Query所以在操作的时候更加的灵活!在加上底层的一些封装。更加的易读易学。
1、引入依赖
MongoDB 独自の依存関係を使用する
<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 ファイルを書き込む
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.example.mongodb_learn2.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. コードをアップロードして、削除、変更、確認を開始します。
コントローラ制御層
package com.example.mongodb_learn2.controller;
import com.example.mongodb_learn2.common.Adn;
import com.example.mongodb_learn2.service.AdnService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class AdnController {
@Autowired
private AdnService adnService;
/**
* 根据id进行查找
* */
@GetMapping("/adnByid/{id}")
public Adn getAdn(@PathVariable String id) {
return adnService.getAdn(id);
}
/**
*添加阿丹
* */
@PostMapping("/saveAdn")
public String saveAdn(@RequestBody Adn adn) {
return adnService.saveAdn(adn);
}
/**
*根据id删除
*/
@GetMapping("/deleteAdn/{id}")
public String deleteAdn(@PathVariable String id) {
return adnService.deleteAdn(id);
}
/**
* 修改
* */
@PostMapping("/updateAdn")
public String updateAdn(@RequestBody Adn adn) {
return adnService.updateAdn(adn);
}
/**
* 查找所有展示列表
* */
@GetMapping("/getAllAdn")
public List<Adn> getAllAdn() {
return adnService.getAllAdn();
}
}
サービス層インターフェース
package com.example.mongodb_learn2.service;
import com.example.mongodb_learn2.common.Adn;
import java.util.List;
public interface AdnService {
Adn getAdn(String id);
String saveAdn(Adn adn);
String deleteAdn(String id);
String updateAdn(Adn adn);
List<Adn> getAllAdn();
}
サービス層実装クラス
package com.example.mongodb_learn2.service.Impl;
import com.alibaba.fastjson.JSON;
import com.example.mongodb_learn2.common.Adn;
import com.example.mongodb_learn2.service.AdnService;
import org.springframework.beans.factory.annotation.Autowired;
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 java.util.List;
@Service
public class AdnServiceImpl implements AdnService {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public Adn getAdn(String id) {
return mongoTemplate.findById(id, Adn.class);
}
@Override
public String saveAdn(Adn adn) {
Adn save = mongoTemplate.save(adn);
return JSON.toJSONString(save);
}
@Override
public String deleteAdn(String id) {
Query query = new Query();
query.addCriteria(Criteria.where("id").is(id));
mongoTemplate.remove(query, Adn.class);
return id;
}
@Override
public String updateAdn(Adn adn) {
Query query = new Query();
query.addCriteria(Criteria.where("id").is(adn.getId()));
Update update = new Update();
update.set("name", adn.getName());
update.set("gender", adn.getGender());
update.set("specialty", adn.getSpecialty());
mongoTemplate.updateFirst(query,update,Adn.class);
Long id = adn.getId();
return id+"";
}
@Override
public List<Adn> getAllAdn() {
return mongoTemplate.findAll(Adn.class);
}
}
を使用して見ることができますMongoTemplate的优势就是更加的灵活。可以自定义化。