springboot操作MongoDB

该文展示了如何在SpringBoot应用中配置MongoDB,包括创建MongoClient,设置MongoDatabaseFactory,以及使用MongoTemplate进行数据操作。此外,还涉及到事务管理,通过MongoTransactionManager处理MongoDB的事务。同时,文章提供了实体类Book、Repository接口BookDao的示例,以及几个测试用例,如分页查询、字段去重和模糊查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 启动类及配置

import com.mongodb.client.MongoClient;

import com.mongodb.client.MongoClients;

import com.mongodb.client.internal.MongoClientImpl;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.annotation.Bean;

import org.springframework.data.mongodb.MongoDatabaseFactory;

import org.springframework.data.mongodb.MongoTransactionManager;

import org.springframework.data.mongodb.core.MongoTemplate;

import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;

import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication

// 开始事务

@EnableTransactionManagement

public class DemoApplication {

public static void main(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}

@Bean

public MongoTemplate mongoTemplate() {

return new MongoTemplate(mongoDatabaseFactory());

}

@Bean

MongoTransactionManager transactionManager(MongoDatabaseFactory mongoDbFactory){

return new MongoTransactionManager(mongoDbFactory);

}

@Bean

public MongoClient mongoClient() {

// 使用更高级的配置MongoClientSettings(请注意,这些不是建议值)

// MongoClientSettings settings = MongoClientSettings.builder()

// .applyConnectionString(new ConnectionString("mongodb://127.0.0.1:37017/db_name"))

// .applyToConnectionPoolSettings(builder -> ConnectionPoolSettings.builder()

// .maxConnectionLifeTime(10, TimeUnit.SECONDS)

// .maxWaitTime(15, TimeUnit.SECONDS)

// .maxConnectionIdleTime(30, TimeUnit.SECONDS)

// .maintenanceFrequency(10, TimeUnit.SECONDS)

// .maintenanceInitialDelay(11, TimeUnit.SECONDS)

// .minSize(10)

// .maxSize(20)

// .build())

// .build();

// return MongoClients.create(settings);

return MongoClients.create("mongodb://127.0.0.1:27017/appdb");

}

@Bean

public MongoDatabaseFactory mongoDatabaseFactory() {

// new SimpleMongoClientDatabaseFactory()

return new SimpleMongoClientDatabaseFactory(mongoClient(), "appdb");

}

}

  1. 实体类

@Document("book")

@Data

@NoArgsConstructor

@AllArgsConstructor

public class Book {

@Id

private String id;

private String title;

private Integer page;

}

  1. mapper类

@Repository

public interface BookDao extends MongoRepository<Book, String> {

@Query("{'page' : {\"$gt\" : ?0}}")

public List<Book> findByPageGreaterThan(int page);

}

  1. 测试

@Test

public void test16(){

Criteria criteria = Criteria.where("page").gte(10).lte(20);

Query query = new Query(criteria);

List<Book> list = mongoTemplate.find(query, Book.class);

System.out.println(list.size());

}

@Test

// 字段distinct查询

public void testkl(){

Criteria c = Criteria.where("title").is("China");

Query q = new Query();

List<String> distinct = mongoTemplate.findDistinct(

q, //查询条件

"title", //需要去重的列

"book", //表名

String.class //该表对应的实体类

);

distinct.forEach(System.out::println);

}

// 模糊查询

@Test

public void test05(){

Query query = new Query();

String pattern_name = "Zh";

Pattern pattern = Pattern.compile("^"+pattern_name, Pattern.CASE_INSENSITIVE);

query.addCriteria(Criteria.where("title").regex(pattern));

System.out.println(mongoTemplate.find(query, Book.class,"book").size());

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值