环境: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);
}
运行结果这里就不做演示。