新版api java两种方式连接带有密码权限的MongoDB(MongoTemplate,MongoClient)

环境:MongoDB为上篇文章docker安装并且启动的,启动的时候是带有认证,需要用户名和密码才可以登录,需创建数据库并设置相关用户的读写权限。Jdk8+idea

上篇文章的链接

一:通过MongoDB的客户端链接

导入SpringDataMobgodb的包,这里选择的是最新版本的包

相关文档建议参考官方https://docs.spring.io/spring-data/mongodb/docs/2.2.6.RELEASE/reference/html/#reference

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

MongoDB的文档数据为,其中数据库为上篇文章的psytest,集合为spit

db.getCollection("spit").insert( {
    _id: "2",
    content: "加班到半夜",
    userid: "1013",
    nickname: "凯 撒",
    visits: NumberInt("1023")
} );
db.getCollection("spit").insert( {
    _id: "3",
    content: "手机流量超了咋 办?",
    userid: "1013",
    nickname: "凯撒",
    visits: NumberInt("111")
} );
db.getCollection("spit").insert( {
    _id: "4",
    content: "坚持就是胜利",
    userid: "1014",
    nickname: "诺 诺",
    visits: NumberInt("1223")
} );
db.getCollection("spit").insert( {
    _id: "14",
    nickname: "Joe",
    userid: "244",
    visits: NumberInt("188"),
    content: "新的测试",
    _class: "psyTestClass"
} );

2:java实体类(其中@Document指明了MongoDB数据的数据映射的java对象。@TypeAlias是数据中_class的别名)

@Document("spit")
@TypeAlias("psyTestClass")
public class MonTest implements Serializable {
    private String nickname;

    private String userid;
    private Integer visits;

    private String content;

    private String _id;

    public MonTest(String nickname, String userid, Integer visits, String content, String _id) {
        this.nickname = nickname;
        this.userid = userid;
        this.visits = visits;
        this.content = content;
        this._id = _id;
    }
}

3:第一种链接方式的main方法以及测试的结果

导入的包为

import com.mongodb.client.*;
import org.springframework.data.annotation.TypeAlias;
import org.springframework.data.mongodb.core.mapping.Document;

主要的链接方法如下代码 


    public static void main(String[] args) {
//        创建MongoDB的链接客户端,用户名为:psymongo,密码为:123456,数据库为:psytest,集合为:spit
        MongoClient mongoClient = MongoClients.create("mongodb://psymongo:123456@172.10.1.10:27017/?authSource=psytest");
//        获取对应的数据库
        MongoDatabase psytest = mongoClient.getDatabase("psytest");
//        获取对应的文档集合
        MongoCollection<org.bson.Document> spit = psytest.getCollection("spit");
//        查询该集合中的所有文档
        FindIterable<org.bson.Document> documents = spit.find();
//        遍历文档数据,打印出nickname的值
        for (org.bson.Document document : documents) {

            System.out.println(document.getString("nickname"));

        }

    }

运行后的结果:

以上是第一种链接方式。

二:通过MongoTemplate链接并且更新查询增加删除数据 

注意:MongoTemplate是线程安全的,并且可以在多个实例之间重用。

下面是导包的代码

import com.mongodb.client.MongoClients;
import com.mongodb.client.result.UpdateResult;
import org.springframework.data.annotation.TypeAlias;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDbFactory;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

main方法的代码,具体的说明包含在注释之中。


    public static void main(String[] args) {
//      创建链接,用户名为:psymongo,密码为:123456,数据库为:psytest,集合为:spit
        MongoOperations mongoOps = new MongoTemplate(new SimpleMongoClientDbFactory(MongoClients.create("mongodb://psymongo:123456@172.10.1.10:27017/?authSource=psytest"), "psytest"));
//      创建一个数据插入
        MonTest p = new MonTest("Joe", "244", 112, "测试MongoDBTemplate", "14");
        // 插入数据
        mongoOps.insert(p);
        log.info("增加: " + p);

        // 根据id查找一个数据
        p = mongoOps.findById(p.get_id(), MonTest.class);
        log.info("查询: " + p);

        // 更新数据
        Query query = new Query();
//      查询nickname为Joe的数据
        query.addCriteria(Criteria.where("nickname").is("Joe"));
        Update update = new Update();
//       将visits的字段值更新为2002
        update.set("visits", 2002);
        mongoOps.updateFirst(query, update, MonTest.class);

        p = mongoOps.findOne(query, MonTest.class);
        log.info("更新: " + p);

        // 删除一个数据
        mongoOps.remove(p);

        //查询所有的数据
        List<MonTest> monTests = mongoOps.findAll(MonTest.class);
        log.info("数据的总量为 = : " + monTests.size());

//        删除这个集合
        mongoOps.dropCollection(MonTest.class);

    }

运行结果这里就不做演示。 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值