Java项目集成MongoDB,手动集成之使用mongoDatabase

上一篇文章介绍了springboot自动集成MongoDB,今天分享的是手动集成MongoDB,使用MongoDatabase,不使用spring的MongoTemplate

这里还是用上次建立的用户连接test库

手动集成配置一样非常简单
1.pom.xml文件:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

还是一样只需要spring-boot-starter-data-mongodb就ok

2.application配置文件:

# 自己利用mongoDatabase集成MongoDB
mongo.username=mrzhou
mongo.password=123456
mongo.database=test
mongo.authDatabase=test
mongo.hosts=localhost:27017

多台MongoDB集群还是一样用逗号分隔:ip1:port1,ip2:port2

3.创建mongoConfig.java文件:

@Configuration
public class MongoConfig {

    @Value("${mongo.username}")
    private String username;
    @Value("${mongo.password}")
    private String password;
    @Value("${mongo.database}")
    private String database;
    @Value("${mongo.authDatabase}")
    private String authDatabase;
    @Value("${mongo.hosts}")
    private String hosts;

    @Bean
    public MongoDatabase mongoDatabase() {
        // 支持集群
        String[] hostPort;
        ServerAddress serverAddress;
        List<ServerAddress> addressList = new ArrayList<>();
        String[] host = hosts.indexOf(",") == -1? new String[]{hosts}:hosts.split(",");
        for (int i = 0; i < host.length; i++) {
            hostPort = host[i].split(":");
            serverAddress = new ServerAddress(hostPort[0], Integer.parseInt(hostPort[1]));
            addressList.add(serverAddress);
        }
        // mongo用户信息认证
        MongoCredential mongoCredential = MongoCredential.createScramSha1Credential(username, authDatabase, password.toCharArray());
        // mongo连接属性
        MongoClientOptions.Builder options = new MongoClientOptions.Builder();
        MongoClient mongoClient = new MongoClient(addressList, mongoCredential, options.build());
        return mongoClient.getDatabase(database);
    }
}

全部配置都已完成,接下来验证下是否OK?
service:

public interface IMongoDemoService {

    String query();

}

实现类serviceImpl:

@Service
public class MongoDemoServiceImpl implements IMongoDemoService {

    private final static String COLLECTION_NAME = "myTest";
    @Autowired
    private MongoDatabase mongoDatabase;

    @Override
    public String query() {
        String result = null;
        MongoCollection mongoCollection = mongoDatabase.getCollection(COLLECTION_NAME);
        BasicDBObject basicDBObject = new BasicDBObject();
        basicDBObject.put("value", "hello world");
        FindIterable<Document> iterable = mongoCollection.find();
        for (Document document : iterable) {
            result = document.get("value").toString();
        }
        return result;
    }
}

对于上面查询条件有疑惑的去看看MongoDB查询语法,他是Bson结构的(跟json语法差不多);返回结果也是Bson,在项目中使用最好写一个公共的方法,将Document转换成JavaBean及将JavaBean转换成Document。
controller:

@RestController
@RequestMapping("/demo")
public class MongoDemoController {

    @Autowired
    private IMongoDemoService mongoDemoServiceImpl;


    @PostMapping("/query")
    public String query() {
        return mongoDemoServiceImpl.query();
    }
}

用postman请求,得到结果:
在这里插入图片描述
或者用uri配置:

@Configuration
public class MongoConfig {
	
	// 建议写到配置文件
    private String uri = "mongodb://mrzhou:123456@localhost:27017/test";

    @Bean
    public MongoDatabase mongoDatabase() {
        // 支持集群,多台MongoDB服务:mongodb://user:pwd@ip1:port1,ip2:port2/test
        MongoClientOptions.Builder options = new MongoClientOptions.Builder();
        MongoClientURI mongoClientURI = new MongoClientURI(uri, options);
        MongoClient mongoClient = new MongoClient(mongoClientURI);
        return mongoClient.getDatabase(database);
    }
}

是不是没有想象中那么难,那么你更喜欢用哪种方式呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值