启动类及配置
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");
}
}
实体类
@Document("book")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {
@Id
private String id;
private String title;
private Integer page;
}
mapper类
@Repository
public interface BookDao extends MongoRepository<Book, String> {
@Query("{'page' : {\"$gt\" : ?0}}")
public List<Book> findByPageGreaterThan(int page);
}
测试
@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());
}