第26章 Java操作Mongodb实现数据持久化

任务描述

任务名称 Mongodb基本操作
任务要求 1、熟练掌握安装和配置MongoDB数据库2、掌握数据库、集合和文档概念3、学会如何创建数据库、删除数据库4、学会集合的基本操作5、学会文档的基本操作
任务内容 1、Java语言操作MongoDB数据库;2、获取MongoDB中的所有数据库;3、查看指定数据库(即数据库articledb)中的所有集合;4、创建集合;5、删除集合;6、查看文档;7、插入一个文档;8、更新文档;9、删除文档
提交内容 实践操作

任务准备

  • 安装和配置好Mongdb数据库
  • 熟练Mongodb基本操作
  • 有一定的Java基础
  • 熟悉Maven项目管理工具

任务实施

1、新建一个Maven工程

打开pom.xml文件,添加依赖:junit和mongodb的java驱动

xml 复制代码
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mongodb/mongodb-driver -->
		<dependency>
			<groupId>org.mongodb</groupId>
			<artifactId>mongodb-driver</artifactId>
			<version>3.12.10</version>
		</dependency>

	</dependencies>

2、resources目录下创建一个属性文件mongodb.properties,用来存储Mongdb数据库配置信息,内容如下:

ini 复制代码
host=localhost
port=27017
dbname=articledb

3、在包com.creatorblue.mongodb下新建辅助类MongoUtils.java,用于getMongoClient()获取MongoDB数据库的连接对象,定义一个getMongoConn()方法,用于实现连接指定的MongoDB数据库,内容如下:

ini 复制代码
private static Properties properties;
	private static MongoDatabase mongoDatabase;
	private static InputStream stream = null;
	private static String host;
	private static int port;
	private static String dbname;
	// 1.创建一个静态代码块,用于初始化工具类中的静态变量,该静态代码块在类加载过程中的初始化阶段 执行,并且只执行一次
	static {
		// 判断properties集合对象是否为空,为空则创建一个集合对象
		if (properties == null) {
			properties = new Properties();
		}
		/*
		 * 由于我们调用load方法,而load方法底层抛出了一个IOException异常,此异常为编译时期异常
		 * 所以,我们调用load方法时,需要处理底层抛过来的异常
		 */
		try {
			// 创建一个InputStream字节输入流对象,用于接收mongodb.properties配置文件中的配置参数
			stream = MongoUtils.class.getClassLoader().getResourceAsStream("mongodb.properties");
			// properties集合对象调用load()方法,将配置参数加载到properties集合中
			properties.load(stream);
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 根据mongodb.properties配置文件中的key,获取value值
		host = properties.getProperty("host");
		port = Integer.parseInt(properties.getProperty("port"));
		dbname = properties.getProperty("dbname");
	}

	// 2.定义一个getMongoClient()方法,用于获取MongoDB数据库的连接对象
	public static MongoClient getMongoClient() {
		// 由于MongoClients对象调用create()方法,该方法的参数是一个字符串,因此这里将host 和port拼接成字符串,再作为参数传入到该方法中
		String addr = "mongodb://" + host + ":" + port;
		MongoClient mongoClient = MongoClients.create(addr);
		return mongoClient;
	}

	// 3.定义一个getMongoConn()方法,用于实现连接指定的MongoDB数据库
	public static MongoDatabase getMongoConn() {
		MongoClient mongoClient = getMongoClient();
		mongoDatabase = mongoClient.getDatabase(dbname);
		return mongoDatabase;
	}
}

4、test目录下新建测试类TestMongo.java完成任务中的内容并验证

typescript 复制代码
private static MongoDatabase mongoDatabase;
	    public static void main(String[] args) {
	        mongoDatabase = MongoUtils.getMongoConn();
	    }
	    /*
	    * 获取MongoDB中的所有数据库
	    */
	    @Test
	    public void getDBs() {
	        MongoClient mongoClient = MongoUtils.getMongoClient();
	        MongoIterable<String> databaseNames = mongoClient.listDatabaseNames();
	        for (String databaseName : databaseNames) {
	            System.out.println(databaseName);
	        }
	    }


	    /*
	    * 查看指定数据库(即数据库articledb)中的所有集合
	    * */
	    @Test
	    public void getCollection() {
	        mongoDatabase = MongoUtils.getMongoConn();
	        MongoIterable<String> listCollectionNames = mongoDatabase.listCollectionNames();
	        for (String collectionName : listCollectionNames) {
	            System.out.println(collectionName.toString());
	        }
	    }
	    /*
	    * 创建集合
	    */
	    @Test
	    public void createCollection(){
	        mongoDatabase = MongoUtils.getMongoConn();
	        mongoDatabase.createCollection("creatorblue");
	    }
	    /*
	    * 删除集合
	    */
	    @Test
	    public void dropCollection(){
	        mongoDatabase = MongoUtils.getMongoConn();
	        MongoCollection<Document> itcast = mongoDatabase.getCollection("creatorblue");
	        itcast.drop();

	    }
	    /*
	     * 查看文档
	     * */
	    @Test
	    public void findDocument(){
	        mongoDatabase = MongoUtils.getMongoConn();
	        MongoCollection<Document> comment = mongoDatabase.getCollection("comment");
	        FindIterable<Document> documents = comment.find();
	        for (Document document : documents) {
	            System.out.println(document);
	        }
	    }


	    /*
	    * 插入一个文档
	    * */
	    @Test
	    public void insertOneDocument(){
	        mongoDatabase = MongoUtils.getMongoConn();
	        MongoCollection<Document> comment = mongoDatabase.getCollection("comment");
	        Document document = new Document("_id", "7").append("articleid","100001")
	                .append("content","吃饭前,先喝杯水或一碗汤,可减少饭量,对控制体重有帮助")
	                .append("userid","1007").append("nickname","玛丽莲•梦露").append("age","18")
	                .append("phone"," 13937165554").append("createdatetime",new Date())
	                .append("likenum","8888").append("state","null");
	        comment.insertOne(document);
	    }

	    /*
	     * 更新文档
	     * */
	    @Test
	    public void updateDocument(){
	        mongoDatabase = MongoUtils.getMongoConn();
	        MongoCollection<Document> comment = mongoDatabase.getCollection("comment");
	        Document document = new Document("content","饭后半小时最好不要喝大量的水,以免冲淡胃液,稀释胃酸,损害消化功能");
	                comment.updateOne(Filters.eq("content","吃饭前,先喝杯水或一碗汤,可减少饭量,对控制体重有明显的帮助"),new Document("$set",document));
	    }

	    /*
	     * 删除文档
	     * */
	    @Test
	    public void deleteDocument(){
	        mongoDatabase = MongoUtils.getMongoConn();
	        MongoCollection<Document> comment = mongoDatabase.getCollection("comment");
	        comment.deleteOne(Filters.eq("_id","7"));
	    }

5、运行Junit测试类

6、查看articledb数据库 是否创建集合comment和creatorblue,comment集合中是否插入文档成功

源代码

gitee.com/ossbar/stud...

相关推荐
bug菌¹28 分钟前
滚雪球学Oracle[4.2讲]:PL/SQL基础语法
数据库·oracle
逸巽散人38 分钟前
SQL基础教程
数据库·sql·oracle
月空MoonSky1 小时前
Oracle中TRUNC()函数详解
数据库·sql·oracle
momo小菜pa1 小时前
【MySQL 06】表的增删查改
数据库·mysql
杨哥带你写代码1 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端
AskHarries2 小时前
读《show your work》的一点感悟
后端
A尘埃2 小时前
SpringBoot的数据访问
java·spring boot·后端
yang-23072 小时前
端口冲突的解决方案以及SpringBoot自动检测可用端口demo
java·spring boot·后端
Marst Code2 小时前
(Django)初步使用
后端·python·django
代码之光_19802 小时前
SpringBoot校园资料分享平台:设计与实现
java·spring boot·后端