JAVA如何操作MongoDB数据库

一、为什么要使用mangoDB


        MongoDB是一个由C++语言编写、基于分布式文件存储的数据库。。针对关系型数据库性能瓶颈来设计的,处理关系型数据库不擅长做的业务场景,可以让项目性能更好。

        Mongo 最大的一个特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查 询的绝大部分功能,而且还支持对数据建立索引。

        一个mongodb中可以建立多个数据库。MongoDB的默认数据库为"db",该数据库存储在data目录中。MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

在Java中使用Mongo可以更好的完善一些功能。类似:抖音等app的点赞、评论等。

二、如何在Java中使用MongoDB

1、导入mongodb驱动包

        导入所需的jar包

2.建立dao层

package com.ape.dao;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;

public class MongoUtil {
	
	
	private static MongoClient mongoClient;
	
	public static MongoDatabase getDB() {
		 MongoClient mongoClient = new MongoClient("localhost",27017);
		 MongoDatabase database = mongoClient.getDatabase("bookComm");
		 return database;
	}
	
	public static void closeMongo() {
		if(mongoClient != null) {
			mongoClient.close();
		}
	}
	
	public static Gson getGosn() {
		
		Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
		return gson;	
	}
	

}

3.查看所有库名

//获取链接对象,参数1为url,参数2为端口号
MongoClient mongoclient=new MongoClient("127.0.0.1",27017);
//获取所有库名的迭代器
MongoIterable<String> list= mongoclient.listDatebaseNames();
for(String str:list){
    System.out.println(str);//查看所有库名
}


4.查看所有集合名

//获取链接对象,参数1为url,参数2为端口号
MongoClient mongoclient=new MongoClient("127.0.0.1",27017);
//获取库对象,参数为库名
MongoDatabase db=mongoclient.getDatabase("school");
//获取当前库对象的所有集合名的迭代器
MongoIterable<String> list=db.getlistCollectionNames();
for(String str:list){
    System.out.println(str);//获取所有集合名
}
//获取集合对象,参数为集合名
MongoCollention<Document> collection=db.getCollection("student");


三.对数据库进行增删改查

1.新增数据

//获取集合对象
MongoCollection<Document> collection = db.getCollection("student");
//新增时创建一个Docuement对象,以键值对的形式传入内容
Document document = new Document();
document.put("name", "黑蛋");
document.put("age", 9);
document.put("sex", "公");
//添加一条数据,没有返回值
collection.insertOne(document);
//新增多条数据,传入一个document集合
collection.insertMany(null);
2.修改数据


//修改条件
Bson eq = Filters.eq("name","黑蛋");
//修改匹配到的第一条
UpdateResult updateOne = collection.updateOne(
    eq, new Document("$set",new Document("age",20)));
//修改匹配的多条
collection.updateMany(eq, null);
修改的返回值内容
AcknowledgedUpdateResult{matchedCount=0, modifiedCount=0, upsertedId=null}
matchedCount:代表匹配到的文档数

modifiedCount:代表被修改的文档数

upsertedId:代表修改的文档id(主键)

3.数据删除

//条件
Bson eq = Filters.eq("name","黑蛋");
//删除一条符合的
DeleteResult deleteOne = collection.deleteOne(eq);
//删除 所有符合条件的
DeleteResult deleteMany = collection.deleteMany(eq);
删除的返回值内容
AcknowledgedDeleteResult{deletedCount=0}
deletedCount:被删除的文档数

4.查询数据

//无条件全查
FindIterable<Document> find = collection.find();
//带条件查询
Bson eq = Filters.regex("name", "蛋");
FindIterable<Document> find = collection.find(eq);
查询的结果集映射
 这种解析方式我们必须知道文档中的各个字段名

//全查
FindIterable<Document> find = collection.find();
 
//创建一个实体类集合准备接收结果
List<Student>  slist = new ArrayList<Student>();
//获取结果集迭代器对象    
MongoCursor<Document> iterator = find.iterator();
 
while(iterator.hasNext()) {
    Student s =  new Student();
            
    Document next = iterator.next();
    s.setSname(next.getString("name"));
    s.setSsex(next.getString("sex"));
    s.setSid(next.getInteger("sid"));    
    
    //将结果添加至实体类集合
    slist.add(s);


Filters类(过滤器) 
        删除,修改,查询时传入的筛选条件

Filters.eq()    等值
Filters.gt()    大于指定值(gte大于等于)
Filters.lt()    小于指定值(lte小于等于)
Filters.ne()    不等于指定
Filters.nin()    不等于数组中的值
Filters.and()    传入多个Bson对象,and连接
Filters.regex()    模糊查询
Filters.exists()    存在改字段

/*
 * 1. 确定的资源 确定的 /url 
 * 2. 某个文件夹下的资源(虚拟的文件夹)  /xxxx/*
 * 3. 以什么什么为后缀    *.xxx
 * 4. 所有的资源 /*
 */

@WebFilter("*.do")
public class BookFilter extends HttpFilter implements Filter {
       

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here

		// 处理乱码
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");

		// 非法访问
		HttpSession session = ((HttpServletRequest)request).getSession();
		
		String url = ((HttpServletRequest)request).getServletPath();
		
		// 可以直接访问的白名单
		List<String> urllist = new ArrayList<String>();
		urllist.add("/login.do");
		urllist.add("/LoginController.do");
		urllist.add("/register.do");
		urllist.add("/RegisterController.do");
		urllist.add("/forget.do");
		urllist.add("/forget.do");
		urllist.add("/SendCodeServlet");
		urllist.add("/verification.do");
		urllist.add("/VerificationController.do");
		
		if(urllist.contains(url)) {
			chain.doFilter(request, response);
		}else{
			if(session.getAttribute("loginuser") == null) {
				((HttpServletResponse)response).sendRedirect("login.do");
				return ;
			}else {
				chain.doFilter(request, response);
			}
		}
	}
}


 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值