MongoDB,最终还是要被操作语言调用的。我们最近的一个java项目,业务比较简单,但对超文本的操作比较多,最终选择了MongoDB这款非关系型数据库。下面就看看我们项目中封装的一个类MongoProvider,是如何对MongoDB进行增删改查的。
在说MongoProvider之前,先看一下 “数据库连接” 的这个类。
public class MongoConnect {
public static MongoConnect instance;
private Mongo mongo;
private String dbname= "";
private MongoConnect() {
instance = this;
}
// 单例
public static MongoConnect getInstance() {
if(instance == null)
new MongoConnect();
return instance;
}
// 连接数据库
public void connect() {
System.setProperty("MONGO.POOLSIZE", String.valueOf(200));
try {
String ip = FSConfig.getInstance().getVar("db.ip");
String pt = FSConfig.getInstance().getVar("db.port");
dbname = FSConfig.getInstance().getVar("db.dbname");
if(ip == null || pt == null){
System.out.println("Database not configured!!!!!");
return;
}
int port = Integer.valueOf(pt);
System.out.println("Connecting to db: "+ip+":"+port);
mongo = new Mongo(ip, port);
MongoOptions options = mongo.getMongoOptions();
options.autoConnectRetry = true;
options.connectionsPerHost = 1000;
boolean result = mongo.getDB(dbname).authenticate(FSConfig.getInstance().getVar("db.account"),
FSConfig.getInstance().getVar("db.password").toCharArray());
if(result) {
System.out.println("DB connected");
} else {
System.out.println("DB connection failed!");
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
public DB getDB() {
if(mongo == null)
return null;
return mongo.getDB(dbname);
}
public DB getDB(String dbName) {
if(mongo == null)
return null;
return mongo.getDB(dbName);
}
public void close() {
if(mongo == null)
return;
mongo.close();
}
}
下面,就是重头戏——MongoProvider,封装了一些常用的对MongoDB的增删除改查操作。主要内容都在代码注释里了,直接看代码吧。
public class MongoProvider {
// 图片路径
public static final String PIC_DIR = "./";
// 集合名称
public static final String PLATFORM_USER = "platform_user";
public static final String IM_USERPIC = "im_userpic";
public static final String IM_ATTACHEMENT = "im_attachement";
public static final String IM_MSGTEMPFILE = "im_msgtempfile";
public static final String IM_DEPARTMENT = "im_department";
public static final String IM_SHAREFORDER = "im_shareforder";
public static final String IM_ATTENCEINFO = "im_attenceinfo";
public static final String IM_ATTENCE = "im_attence";
public static final String IM_ATTENCE_SPECIAL = "im_attencespecial";
public static final String IM_FILES = "im_files";
public static final String IM_FILE_PKG = "im_file_pkg";
public static final String IM_FILE_STORAGE = "im_file_storage";
public static final String IM_FILE_TEMP = "im_file_temp";
private static Logger log = Logger.getLogger(MongoProvider.class.getName());
/**
* 查询集合中的文档数
* @param collectionName
* 集合名称
* @param map
* 查询条件
* @return
*
*/
public static long count(String collectionName, DBObject map) {
try {
DBCollection collection = MongoConnect.getInstance().getDB()
.getCollection(collectionName);
if (map == null) {
return collection.count();
} else {
return collection.count(map);
}
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
return 0;
}
/**
* 添加
* @param collectionName
* 集合名称
* @param map
* 查询条件
*/
public static void insert(String collectionName, DBObject map) {
try {
DBCollection collection = MongoConnect.getInstance().getDB()
.getCollection(collectionName);
collection.insert(map);
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
}
/**
* 更新
* @param collectionName
* 集合名称
* @param condition
* 更新条件
* @param doc
* 更新字段
*/
public static void update(String collectionName, DBObject condition,
DBObject doc) {
try {
DBCollection collection = MongoConnect.getInstance().getDB()
.getCollection(collectionName);
collection.update(condition, doc);
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
}
/**
* 更新全部
* @param collectionName
* 集合名称
* @param condition
* 更新条件
* @param doc
* 更新字段
*/
public static void updateAll(String collectionName, DBObject condition, DBObject doc) {
try {
DBCollection collection = MongoConnect.getInstance().getDB()
.getCollection(collectionName);
collection.update(condition, doc, false, true);
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
}
/**
* 更新
* @param collectionName
* 集合名称
* @param condition
* 更新条件
* @param doc
* 更新字段
* @param multi
* mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
*/
public static void update(String collectionName, DBObject condition,
DBObject doc, boolean multi) {
try {
DBCollection collection = MongoConnect.getInstance().getDB()
.getCollection(collectionName);
collection.update(condition, doc, false, multi);
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
}
/**
* 更新
* @param collectionName
* 集合名称
* @param condition
* 更新条件
* @param doc
* 更新字段
* @param upsert
* 如果不存在update的记录,是否插入一条新的,true为插入,默认是false,不插入。
* @param multi
* mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
*/
public static void update(String collectionName, DBObject condition,
DBObject doc, boolean upsert, boolean multi) {
try {
DBCollection collection = MongoConnect.getInstance().getDB()
.getCollection(collectionName);
collection.update(condition, doc, false, multi);
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
}
/**
* 更新或添加
* @param collectionName
* 集合名称
* @param condition
* 条件
* @param doc
* 字段
*/
public static void upsert(String collectionName, DBObject condition,
DBObject doc) {
try {
DBCollection collection = MongoConnect.getInstance().getDB()
.getCollection(collectionName);
collection.update(condition, doc, true, false);
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
}
/**
* 删除文档
* @param collectionName
* 集合名称
* @param condition
* 条件
*/
public static void remove(String collectionName, DBObject condition) {
try {
DBCollection collection = MongoConnect.getInstance().getDB()
.getCollection(collectionName);
collection.remove(condition);
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
}
/**
* 查询
* @param collectionName
* 集合名称
* @param condition
* 查询条件
* @return
*/
public static List<DBObject> find(String collectionName, DBObject condition) {
List<DBObject> map = new ArrayList<DBObject>();
try {
DBCollection collection = MongoConnect.getInstance().getDB()
.getCollection(collectionName);
DBCursor result = collection.find(condition);
while (result.hasNext()) {
DBObject ob = result.next();
map.add(ob);
}
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
return map;
}
/**
* 查询
* @param collectionName
* 集合名称
* @param condition
* 查询条件
* @param keys
* 查询字段
* @return
*/
public static List<DBObject> find(String collectionName,
DBObject condition, DBObject keys) {
List<DBObject> map = new ArrayList<DBObject>();
try {
DBCollection collection = MongoConnect.getInstance().getDB()
.getCollection(collectionName);
DBCursor result = collection.find(condition, keys);
while (result.hasNext()) {
DBObject ob = result.next();
map.add(ob);
}
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
return map;
}
/**
* 查询集合中的所有文档
* @param collectionName
* 集合名称
* @return
*/
public static DBCollection getConection(String collectionName) {
DBCollection collection = MongoConnect.getInstance().getDB()
.getCollection(collectionName);
return collection;
}
// 保存用户图片
public static boolean saveUserPic(String filename, String file, String account) {
try {
GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), IM_USERPIC);
GridFSInputFile input = gfs.createFile(file);
input.setFilename(filename);
input.put("account", account);
input.put("lastupdate", System.currentTimeMillis());
input.save();
} catch (Exception e) {
log.log(Level.WARNING, "", e);
return false;
}
return true;
}
// 保存用户图片
public static boolean saveUserPic(String filename, File file, String account) {
try {
GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), IM_USERPIC);
GridFSInputFile input = gfs.createFile(file);
input.setFilename(filename);
input.put("account", account);
input.put("lastUpdate", System.currentTimeMillis());
input.save();
} catch (Exception e) {
log.log(Level.WARNING, "", e);
return false;
}
return true;
}
// 获取图片的数据流
public static void getPicStream(String account, String filename, OutputStream out) {
try {
GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), IM_USERPIC);
DBObject con = new BasicDBObject();
con.put("account", account);
con.put("filename", filename);
GridFSDBFile output = gfs.findOne(con);
output.writeTo(out);
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
}
// 删除图片
public static void deletePic(String account, String filename) {
try {
GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), IM_USERPIC);
DBObject con = new BasicDBObject();
con.put("account", account);
con.put("filename", filename);
gfs.remove(con);
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
}
// 删除图片
public static void deletePic(DBObject doc) {
try {
GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), IM_USERPIC);
gfs.remove(doc);
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
}
// 保存文件
public static boolean saveFile(String account, String fileId, File file, String collection) {
try {
GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), collection);
GridFSInputFile input = gfs.createFile(file);
input.setFilename(fileId);
input.put("account", account);
input.put("lastupdate", System.currentTimeMillis());
input.save();
} catch (Exception e) {
log.log(Level.WARNING, "", e);
return false;
}
return true;
}
// 保存文件
public static boolean saveFile(String account, String fileId,
InputStream in, String collection) {
try {
GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), collection);
GridFSInputFile input = gfs.createFile(in);
input.setFilename(fileId);
input.put("account", account);
input.put("lastupdate", System.currentTimeMillis());
input.save();
} catch (Exception e) {
log.log(Level.WARNING, "", e);
return false;
}
return true;
}
// 保存共享文件夹
public static boolean saveShareForder(String fileId, String account,
String fileName, String creator, InputStream in, String collection) {
try {
GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), collection);
GridFSInputFile input = gfs.createFile(in);
input.setFilename(fileId);
input.put("account", account);
input.put("lastupdate", System.currentTimeMillis());
input.put("creator", creator);
input.put("displayname", fileName);
input.save();
} catch (Exception e) {
log.log(Level.WARNING, "", e);
return false;
}
return true;
}
// 获取共享文件夹的length
public static long getShareForderLength(String fileId, String account,
OutputStream out, String colletion) {
try {
GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), colletion);
DBObject con = new BasicDBObject();
con.put("account", account);
con.put("filename", fileId);
GridFSDBFile output = gfs.findOne(con);
return output.getLength();
} catch (Exception e) {
log.log(Level.WARNING, "", e);
return 0;
}
}
// 获取文件的数据流
public static void getFileStream(String account, String filename, OutputStream out, String colletion) {
try {
GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), colletion);
DBObject con = new BasicDBObject();
con.put("account", account);
con.put("filename", filename);
GridFSDBFile output = gfs.findOne(con);
output.writeTo(out);
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
}
// 删除文件
public static void deleteFile(String account, String filename, String colletion) {
try {
DBObject con = new BasicDBObject();
con.put("account", account);
con.put("filename", filename);
GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), colletion);
gfs.remove(con);
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
}
// 删除文件
public static void deleteFile(DBObject doc, String collection) {
try {
GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), collection);
gfs.remove(doc);
} catch (Exception e) {
log.log(Level.WARNING, "", e);
}
}
}