JeecgBoot與MongoDB集成實戰(zhàn)文檔
1. 坐標引入依賴
<dependency>
????<groupId>org.springframework.boot</groupId>
????<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2. 增加配置類
package?org.jeecg.config;
?
import?com.mongodb.client.MongoClient;
import?org.springframework.context.annotation.Bean;
import?org.springframework.context.annotation.Configuration;
import?org.springframework.data.mongodb.core.MongoClientFactoryBean;
import?org.springframework.data.mongodb.core.MongoOperations;
import?org.springframework.data.mongodb.core.MongoTemplate;
?
public?class?MongoConfig?{
?
????
????public?MongoClientFactoryBean?mongoClientFactoryBean()?{
????????MongoClientFactoryBean?factoryBean?=?new?MongoClientFactoryBean();
????????factoryBean.setHost("127.0.0.1");
????????factoryBean.setPort(27017);
????????return?factoryBean;
????}
????
????public?MongoTemplate?mongoTemplate(MongoClient?mongoClient)?{
????????return?new?MongoTemplate(mongoClient,?"springboot-db");
????}
}
說明:新建springboot工程,引入坐標,然后在application.properties文件中加入
spring.data.mongodb.uri=mongodb://localhost:27017/springboot-db
springboot就能支持MongoRepository和MongoTemplate讀寫MongoDb,測試很順利。
但是將springboot工程中的代碼加入到jeecgboot中,運行后一直提示錯誤

用這個配置類,代替yml中的mongodb配置可解決該錯誤。
3. 升級積木報表
針對上面提到的mongoTemplate錯誤,官方已經提供了最新的解決方案,將積木報表升級。這樣就可以不用配置類。
<dependency>
????<groupId>org.jeecgframework.jimureport</groupId>
????<artifactId>jimureport-spring-boot-starter</artifactId>
????<version>1.4.2</version>
</dependency>
之后在application-dev.yml文件中,加入mongoDb的配置項
spring:
??data:
????mongodb:
??????uri:?mongodb://localhost:27017/springboot-db
4. 創(chuàng)建實體類
package?org.jeecg.modules.mongodb.entity;
import?org.springframework.data.annotation.Id;
?
public?class?Customer?{
?
????@Id
????public?String?id;
?
????public?String?firstName;
????public?String?lastName;
?
????public?Customer()?{}
?
????public?Customer(String?firstName,?String?lastName)?{
????????this.firstName?=?firstName;
????????this.lastName?=?lastName;
????}
?
????@Override
????public?String?toString()?{
????????return?String.format(
????????????????"Customer[id=%s,?firstName='%s',?lastName='%s']",
????????????????id,?firstName,?lastName);
????}
?
}
5. 創(chuàng)建Repository
package?org.jeecg.modules.mongodb.dao;
?
import?org.jeecg.modules.mongodb.entity.Customer;
import?org.springframework.data.mongodb.repository.MongoRepository;
?
import?java.util.List;
?
public?interface?CustomerRepository?extends?MongoRepository<Customer,?String>?{
?
?????Customer?findByFirstName(String?firstName);
?????List<Customer>?findByLastName(String?lastName);
?
}
6. 測試用例
用兩種方式測試mongoDB,分別為MongoRepository和MongoTemplate
package?org.jeecg.modules.mongodb;
?
import?org.jeecg.common.api.vo.Result;
import?org.jeecg.modules.mongodb.dao.CustomerRepository;
import?org.jeecg.modules.mongodb.entity.Customer;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.data.mongodb.core.MongoTemplate;
import?org.springframework.web.bind.annotation.*;
?
import?java.util.HashMap;
import?java.util.Map;
?
?
/**
?*?測試mongodb
?*/
@RestController
@RequestMapping("/mongo")
public?class?MongoController?{
?
????@Autowired
????private?MongoTemplate?mongoTemplate;
????@Autowired
????private?CustomerRepository?repository;
?
????@GetMapping("/test1")
????public?Result<?>?TestMongoDb(){
????????Map<String,String>?map?=?new?HashMap<>();
????????map.put("jeecg","mongodb-jeecg");
????????mongoTemplate.insert(map,?"testMongoDb");
?
????????return?Result.OK("存入成功");
????}
?
????@GetMapping("/test2")
????public?Result<?>?TestMongoDb2(){
????????repository.deleteAll();
?
????????//?save?a?couple?of?customers
????????repository.save(new?Customer("Alice",?"Smith"));
????????repository.save(new?Customer("Bob",?"Smith"));
?
????????//?fetch?all?customers
????????System.out.println("Customers?found?with?findAll():");
????????System.out.println("-------------------------------");
????????for?(Customer?customer?:?repository.findAll())?{
????????????System.out.println(customer);
????????}
????????System.out.println();
?
????????//?fetch?an?individual?customer
????????System.out.println("Customer?found?with?findByFirstName('Alice'):");
????????System.out.println("--------------------------------");
????????System.out.println(repository.findByFirstName("Alice"));
?
????????System.out.println("Customers?found?with?findByLastName('Smith'):");
????????System.out.println("--------------------------------");
????????for?(Customer?customer?:?repository.findByLastName("Smith"))?{
????????????System.out.println(customer);
????????}
?
????????return?Result.OK("存入成功");
????}
?
}
7. 測試結果
測試后的數據庫截圖


