1,创建maven项目,并在pom.xml引入以下依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.9</version>
</dependency>
2,启动MongoDB服务实例
mongod.exe --dbpath D:\UserData\mongodb --auth
3,获取MongoClient对象
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import java.util.Arrays;
public class MongoUtil {
public static MongoClient getInstance1(){
MongoCredential credential = MongoCredential.createScramSha256Credential("admin", "admin", "123456".toCharArray());
return MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("127.0.0.1", 27017))))
.credential(credential)
.build());
}
public static MongoClient getInstance2(){
return MongoClients.create("mongodb://admin:123456@127.0.0.1:27017/?authSource=admin&authMechanism=SCRAM-SHA-256");
}
public static CodecRegistry codecRegistry(){
return CodecRegistries.fromRegistries(MongoClientSettings.getDefaultCodecRegistry(),
CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build()));
}
}
4,创建Student实体
import org.bson.types.ObjectId;
public class Student {
private ObjectId id;
private String name;
private int age;
private char sex;
private Address address;
public Student() {
}
public Student(String name, int age, char sex, Address address) {
this.name = name;
this.age = age;
this.sex = sex;
this.address = address;
}
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
public class Address {
private String country;
private String province;
private String city;
private String street;
public Address() {
}
public Address(String country, String province, String city, String street) {
this.country = country;
this.province = province;
this.city = city;
this.street = street;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
}
5,使POJO对象进行CRUD操作
import cn.hutool.core.lang.Console;
import cn.hutool.json.JSONUtil;
import com.lcj.mongodb.sync.MongoUtil;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.InsertManyResult;
import com.mongodb.client.result.InsertOneResult;
import com.mongodb.client.result.UpdateResult;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
public class UsePOJOCRUDTest {
private static MongoClient client;
private static MongoCollection<Student> student;
@BeforeClass
public static void setUp() {
client = MongoUtil.getInstance1();
MongoDatabase mongoDatabase = client.getDatabase("test").withCodecRegistry(MongoUtil.codecRegistry());
student = mongoDatabase.getCollection("student",Student.class);
}
@AfterClass
public static void close() {
client.close();
}
@Test
public void insertOne() {
Student s = new Student("张三",18,'男',new Address("中国","湖北","十堰市","北京路38号"));
InsertOneResult insertOneResult = student.insertOne(s);
if (insertOneResult.wasAcknowledged()) {
Console.log("插入文档成功,文档id:{}", insertOneResult.getInsertedId().toString());
} else {
System.out.println("插入文档失败");
}
}
@Test
public void insertMany() {
List<Student> students = Arrays.asList(
new Student("李四",34,'女',new Address("中国","河北","合肥市","北京路38号"))
,new Student("王五",10,'女',new Address("中国","湖北","襄樊市","大连路67号"))
,new Student("赵六",58,'男',new Address("中国","湖北","宜昌市","北京路38号"))
);
InsertManyResult insertManyResult = student.insertMany(students);
if (insertManyResult.wasAcknowledged()) {
Console.log("插入文档成功,文档id:{}", insertManyResult.getInsertedIds());
} else {
System.out.println("插入文档失败");
}
}
@Test
public void findFirst() {
Student s = student.find().first();
if (Objects.nonNull(s)) {
System.out.println(JSONUtil.toJsonStr(s));
}
}
@Test
public void findAll() {
try (MongoCursor<Student> iterator = student.find().iterator()) {
while (iterator.hasNext()) {
Student next = iterator.next();
System.out.println(JSONUtil.toJsonStr(next));
}
}
}
@Test
public void findFirstByFilter() {
Student first = student.find(Filters.eq("address.city", "十堰市")).first();
if (Objects.nonNull(first)) {
System.out.println(JSONUtil.toJsonStr(first));
}
}
@Test
public void findAllByFilterGt() {
try (MongoCursor<Student> iterator = student.find(Filters.gt("age", 20)).iterator()) {
while (iterator.hasNext()) {
Student next = iterator.next();
System.out.println(JSONUtil.toJsonStr(next));
}
}
}
@Test
public void findAllByFilterAnd() {
try (MongoCursor<Student> iterator = student.find(Filters.and(Filters.gte("age", 20), Filters.eq("sex", "女"))).iterator()) {
while (iterator.hasNext()) {
Student next = iterator.next();
System.out.println(JSONUtil.toJsonStr(next));
}
}
}
@Test
public void updateOne() {
UpdateResult updateResult = student.updateOne(Filters.eq("name", "李四"), Updates.combine(Updates.set("age", 50),Updates.set("address.province", "黑龙江")));
if(updateResult.wasAcknowledged()){
System.out.println("更新数量: " + updateResult.getModifiedCount());
}
}
@Test
public void updateMany() {
UpdateResult updateResult = student.updateMany(Filters.eq("address.province", "湖北"), Updates.inc("age", 2));
Console.log("更新数量:{}", updateResult.getModifiedCount());
}
@Test
public void replaceOne() {
Student s = new Student("张三",18,'男',new Address("中国","湖北","十堰市","北京路38号"));
UpdateResult updateResult = student.replaceOne(Filters.eq("name", "张三"), s);
System.out.println("更新数: " + updateResult.getModifiedCount());
}
@Test
public void deleteOne() {
DeleteResult deleteResult = student.deleteOne(Filters.eq("address.city", "襄樊市"));
Console.log("删除数量: {}", deleteResult.getDeletedCount());
}
@Test
public void deleteMany() {
DeleteResult deleteResult = student.deleteMany(Filters.eq("address.province", "湖北"));
Console.log("删除数量: {}", deleteResult.getDeletedCount());
}
}
6,单测结果