在JAVA中使用MongoDB
jopen
10年前
在一个项目中决定了使用nosql中的mongdb,在本篇博文中记录了在java中创建mongdb连接,配置mongdb连接池和简单的CRUD操作,慢慢会更新一些其他操作.
首先,下载mongdb对JAVA的支持,点击这里下载驱动包,这里博主下载的是2.10.1版。
mongdb版本为2.4.9
在项目中导入该驱动包。
打开shell,在终端输入mongo,显示如下
只有默认的三个数据库。
新建一个java project
代码如下,
1.操控mongdb连接,使用MongoOptions来设置一些参数。
package Util; import java.net.UnknownHostException; import com.mongodb.DB; import com.mongodb.Mongo; import com.mongodb.MongoOptions; //数据库工具类 public class MongoDBUtil { private static Mongo mongo = null; private static String DBString = "MongoDBTest";//数据库名 private static String hostName = "localhost";//主机名 private static int port = 27017;//端口号 private static int poolSize = 10;//连接池大小 private MongoDBUtil(){ } //获取数据库连接 public static DB getDB(){ if(mongo == null){ init(); } return mongo.getDB(DBString); } //初始化数据库 private static void init(){ try { //实例化Mongo mongo = new Mongo(hostName, port); MongoOptions opt = mongo.getMongoOptions(); //设置连接池大小 opt.connectionsPerHost = poolSize; } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
2.基本操作接口
package DAO; import java.util.List; import com.mongodb.BasicDBObject; //数据库CRUD基本操作 public interface BaseDAO { public boolean insert(String collectionName, BasicDBObject bean); public boolean delete(String collectionName, BasicDBObject bean); public List find(String collectionName, BasicDBObject bean); public boolean update(String collectionName, BasicDBObject oldBean, BasicDBObject newBean); }
3.基本操作实现
package DAO.Impl; import java.util.List; import com.mongodb.BasicDBObject; import com.mongodb.DB; import Util.MongoDBUtil; import DAO.BaseDAO; //数据库基本操作实现 public class BaseDAOImpl implements BaseDAO { @Override public boolean insert(String collectionName, BasicDBObject bean) { DB db = MongoDBUtil.getDB(); db.getCollection(collectionName).insert(bean); return false; } @Override public boolean delete(String collectionName, BasicDBObject bean) { DB db = MongoDBUtil.getDB(); db.getCollection(collectionName).remove(bean); return false; } @Override public List find(String collectionName, BasicDBObject bean) { DB db = MongoDBUtil.getDB(); List list = db.getCollection(collectionName).find(bean).toArray(); return list ; } @Override public boolean update(String collectionName, BasicDBObject oldBean, BasicDBObject newBean) { DB db = MongoDBUtil.getDB(); db.getCollection(collectionName).update(oldBean, newBean); return false; } }
4.基本操作测试
4.1添加文档操作
BaseDAOImpl baseDAOImpl = new BaseDAOImpl(); BasicDBObject beanOne = new BasicDBObject(); beanOne.put("name", "kakakaka"); beanOne.put("sex", "男"); beanOne.put("age", 20); baseDAOImpl.insert("test", beanOne);
执行后结果
可以看到mongdb会自动检测是否存在数据库MongoDBTest,如果不存在则新建一个,然后再检测是否存在文档集合test,如果不存在则新建一个,最后插入数据。
4.2查询文档操作
List<BasicDBObject> list = baseDAOImpl.find("test", new BasicDBObject("name", "kakakaka")); for(BasicDBObject i : list){ System.out.println(i.get("name")); System.out.println(i.get("sex")); System.out.println(i.get("age")); }
输出结果如下
kakakaka 男 20
4.3修改文档操作如下
BasicDBObject oldBean = (BasicDBObject) baseDAOImpl.find("test", new BasicDBObject("name", "kakakaka")).get(0); BasicDBObject newBean = (BasicDBObject) oldBean.clone(); newBean.put("name", "gugugugu"); System.out.println(oldBean.get("name")); System.out.println(newBean.get("name")); baseDAOImpl.update("test", oldBean, newBean);
控制台输出结果
kakakaka gugugugu
4.4删除文档
先再向数据库插入一条数据
注意,mongdb区分一个文档中的不同数据是依赖它自己向每条数据中赋的"_id"
所以再插入这样一条数据
BaseDAOImpl baseDAOImpl = new BaseDAOImpl(); BasicDBObject beanOne = new BasicDBObject(); beanOne.put("name", "gugugugu"); beanOne.put("sex", "男"); beanOne.put("age", 20); baseDAOImpl.insert("test", beanOne);
结果如下
执行删除操作
首先根据"_id"将文档中第二条数据修改
baseDAOImpl.update("test", new BasicDBObject("_id", new ObjectId("5471c9db44aeeb8b5524f2ea")) , new BasicDBObject("name","kakakaka").append("age", 20));
结果如下
将"name" 等于 "kakakaka"的数据删除
baseDAOImpl.delete("test", new BasicDBObject("name","kakakaka"));
后续其他操作更新。