我写的一个mongodb工具类,因为需要,研究过一段的时间,这个里面可以实现javaobject到mongodb的数据之间的转换,仅供参考,欢迎评论哈,刚刚入驻csdn,如果有评论我会很兴奋的
package util;
import inter.DBUtilInter;
import java.util.ArrayList;
import java.util.List;
import com.mongodb.DBObject;
/**
* <p>util.MongoConUtil.java</p>
* <p>Description: mongodb基本操作工具类</p>
* <p>Copyright: groups 2014-8-21</p>
* <p>Company: </p>
* @author liu email: 178867729@qq.com
* @date 2014-8-21
* @version 1.0
*/
public class MongoDBUtil implements DBUtilInter{
private MongoDBConnection mongoConUtil;//数据库连接类
private String splitData;//分流方式
/**
* 无参数初始化,默认读取根目录下mongo.config配置文件
*/
public MongoDBUtil(){
this.mongoConUtil=new MongoDBConnection("mongo.config");
this.splitData=mongoConUtil.getSplitData();
}
/**
* 有参初始化,读取指定根目录下配置文件
* @param configFileName 根目录下配置文件名称
*/
public MongoDBUtil(String configFileName){
this.mongoConUtil=new MongoDBConnection(configFileName);
this.splitData=mongoConUtil.getSplitData();
}
/**
*
* <p>getSplitData</p>
* <p>Description: 获得配置文件中的分流数据</p>
* <p>Copyright: groups 2014-10-11</p>
* <p>Company: </p>
* @author bard email:178867729@qq.com
* @date 2014-10-11 下午2:43:46
* @version 1.0
* @return 分流数据
*/
public String getSplitData() {
return splitData;
}
/**
*
* <p>queryAll</p>
* <p>Description: 查询所有数据</p>
* <p>Copyright: groups 2014-8-21</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-21 下午12:29:12
* @version 1.0
* @param tableName 数据表名称
*/
public List<Object> findAll(String tableName,Class clazz) throws Exception{
if(clazz==null) return null;
return DBCursorToJavaObjList(mongoConUtil.getDBConnection(tableName).find(null,(DBObject)com.mongodb.util.JSON.parse("{_id:0}")), clazz);
}
/**
*
* <p>queryAll</p>
* <p>Description: 查询所有数据 支持分页</p>
* <p>Copyright: groups 2014-8-21</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-21 下午12:29:12
* @version 1.0
* @param tableName 表名称
* @param pageSize 页面大小
* @param page 页数
*/
public List<Object> findAll(String tableName,Class clazz,int pageSize,int page) throws Exception{
if(clazz==null) return null;
return DBCursorToJavaObjList(mongoConUtil.getDBConnection(tableName).find(null,(DBObject)com.mongodb.util.JSON.parse("{_id:0}")).skip((page - 1) * pageSize).limit(pageSize), clazz);
}
/**
*
* <p>findOne</p>
* <p>Description:根据条件查询一条数据,如果有多条结果返回第一条 </p>
* <p>Copyright: groups 2014-8-21</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-21 下午3:27:29
* @version 1.0
* @param tableName 表名称
* @param pareObj 查询条件对象
* @return 查询结果对象
*/
@Override
public Object findOne(String tableName, Object pareObj) throws Exception{
List<Object> rsList=findByPara(tableName, pareObj);
if(rsList==null) return null;
return rsList.size()==0?null:rsList.get(0);
}
/**
*
* <p>findByPara</p>
* <p>Description: 根据条件查询</p>
* <p>Copyright: groups 2014-8-21</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-21 下午3:28:23
* @version 1.0
* @param tableName 表名称
* @param pareObj 条件参数对象
* @return 返回结果为一个集合
*/
@Override
public List<Object> findByPara(String tableName, Object pareObj) throws Exception{
return DBCursorToJavaObjList(mongoConUtil.getDBConnection(tableName).find(JavaObjToDBObj(pareObj),(DBObject)com.mongodb.util.JSON.parse("{_id:0}")), pareObj.getClass());
}
/**
*
* <p>findByPara</p>
* <p>Description: 根据条件查询 支持分页</p>
* <p>Copyright: groups 2014-8-21</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-21 下午3:28:23
* @version 1.0
* @param tableName 表名称
* @param pareObj 条件参数对象
* @param pageSize 页面大小
* @param page 页数
* @return 返回结果为一个集合
*/
@Override
public List<Object> findByPara(String tableName, Object pareObj,int pageSize,int page) throws Exception{
return DBCursorToJavaObjList(mongoConUtil.getDBConnection(tableName).find(JavaObjToDBObj(pareObj),(DBObject)com.mongodb.util.JSON.parse("{_id:0}")).skip((page - 1) * pageSize).limit(pageSize), pareObj.getClass());
}
/**
*
* <p>addList</p>
* <p>Description: 插入一个集合list</p>
* <p>Copyright: groups 2014-8-21</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-21 下午12:58:13
* @version 1.0
* @param tableName 表名称
* @param addObjList java对象集合
* @return 成功返回1
*/
@Override
public int addList(String tableName, List<Object> addObjList) throws Exception{
List<DBObject> DBObjList=null;
try {
DBObjList=new ArrayList<DBObject>();
for (Object javaObj : addObjList) {
DBObjList.add(JavaObjToDBObj(javaObj));
}
} catch (Exception e) {
e.printStackTrace();
}
return mongoConUtil.getDBConnection(tableName).insert(DBObjList).getN();
}
/**
*
* <p>add</p>
* <p>Description:插入一条数据 </p>
* <p>Copyright: groups 2014-8-21</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-21 下午3:31:44
* @version 1.0
* @param tableName 表名称
* @param addObj 插入对象
* @return 成功返回1
*/
@Override
public int add(String tableName, Object addObj) throws Exception{
return mongoConUtil.getDBConnection(tableName).insert(JavaObjToDBObj(addObj)).getN();
}
/**
*
* <p>update</p>
* <p>Description: 数据更新</p>
* <p>Copyright: groups 2014-8-21</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-21 下午1:09:43
* @version 1.0
* @param tableName 表名称
* @param newObj 修改之后的java对象
* @param paraObj 修改条件 java对象
* * @return 成功返回1
*/
@Override
public int update(String tableName, Object paraObj, Object newObj) throws Exception{
// return mongoConUtil.getDBConnection(tableName).update(JavaObjToDBObj(whereObj), JavaObjToDBObj(dataObj), false/*如果数据库不存在,是否添加*/, false/*多条修改*/).getN();
return mongoConUtil.getDBConnection(tableName).update(JavaObjToDBObj(paraObj), (com.mongodb.DBObject) com.mongodb.util.JSON.parse("{\"$set\":"+com.alibaba.fastjson.JSON.toJSONString(newObj)+"}"), false/*如果数据库不存在,是否添加*/, true/*多条修改*/).getN();
}
/**
*
* <p>delete</p>
* <p>Description:删除数据 </p>
* <p>Copyright: groups 2014-8-21</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-21 下午1:51:29
* @version 1.0
* @param tableName 表名称
* @param delObj 删除条件
* @return 成功返回1
*/
@Override
public int delete(String tableName, Object delObj) throws Exception{
return mongoConUtil.getDBConnection(tableName).remove(JavaObjToDBObj(delObj)).getN();
}
/**
*
* <p>close</p>
* <p>Description: 关闭数据连接(一般不用手动关闭,mongo自带关闭机制)</p>
* <p>Copyright: groups 2014-8-22</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-22 上午8:26:50
* @version 1.0
*/
@Override
public void close()throws Exception{
mongoConUtil.close();
mongoConUtil=null;
}
/**
*
* <p>JavaObjToDBObj</p>
* <p>Description: 将java对象转换成json的DBObject对象 封装条件参数对象</p>
* <p>Copyright: groups 2014-8-18</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-18 下午12:45:49
* @version 1.0
* @param javaObj java对象
* @return DBObject 参数对象
*/
private com.mongodb.DBObject JavaObjToDBObj(Object javaObj) throws Exception{
return (com.mongodb.DBObject) com.mongodb.util.JSON.parse(com.alibaba.fastjson.JSON.toJSONString(javaObj));
}
/**
*
* <p>DBCursorToJavaObj</p>
* <p>Description:将DBCursor结果集转换成java对象集合 </p>
* <p>Copyright: groups 2014-8-18</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-18 下午3:20:48
* @version 1.0
* @param dbCursor DBCursor结果集
* @param clazz java类型
* @return java对象集合 List
*/
private java.util.List<Object> DBCursorToJavaObjList(com.mongodb.DBCursor dbCursor,Class clazz) throws Exception{
java.util.List<Object> list=new java.util.ArrayList<Object>();
while(dbCursor.hasNext()){
String cur=dbCursor.next().toString();//去除数据库自动生成的ObjectId
// cur=cur.replace(cur.split(",")[0], "{").replace("{,", "{");
list.add(jsonStrToJavaObj(cur, clazz));
}
return list;
}
/**
*
* <p>jsonStrToJavaObj</p>
* <p>Description: 将json字符串转换成java对象</p>
* <p>Copyright: groups 2014-8-18</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-18 下午4:16:02
* @version 1.0
* @param jsonStr json字符串
* @param clazz java类型
* @return java对象Object
*/
private Object jsonStrToJavaObj(String jsonStr,Class clazz) throws Exception{
return com.alibaba.fastjson.JSON.toJavaObject(com.alibaba.fastjson.JSON.parseObject(jsonStr), clazz);
}
/**
*
* <p>getCount</p>
* <p>Description: 获得数据数量</p>
* <p>Copyright: groups 2014-8-18</p>
* <p>Company: </p>
* @author liu email:178867729@qq.com
* @date 2014-8-18 下午4:16:02
* @version 1.0
* @param tableName 表名称
* @param paraObj 参数对象
* @return 结果数
*/
@Override
public int getCount(String tableName, Object paraObj) throws Exception {
return mongoConUtil.getDBConnection(tableName).find(JavaObjToDBObj(paraObj)).count();
}
}