当前位置:   article > 正文

BaseDB MongoDb dao数据库操作类

basedb
  1. package cn.ohalo.db.mongodb;
  2. import java.lang.reflect.ParameterizedType;
  3. import java.lang.reflect.Type;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import org.apache.commons.logging.Log;
  7. import org.apache.commons.logging.LogFactory;
  8. import com.alibaba.fastjson.util.TypeUtils;
  9. import com.mongodb.BasicDBObject;
  10. import com.mongodb.DBCollection;
  11. import com.mongodb.DBCursor;
  12. import com.mongodb.DBObject;
  13. import com.mongodb.WriteConcern;
  14. import com.mongodb.WriteResult;
  15. /**
  16. *
  17. * @author halo
  18. *
  19. */
  20. public class BaseDb<T extends MongoBaseEntity> {
  21. public static Log logger = LogFactory.getLog(BaseDb.class);
  22. private DBCollection collection;
  23. private String collectionName;
  24. private Class<T> entityClass;
  25. public String getCollectionName() {
  26. return collectionName;
  27. }
  28. public void initDBCollection() {
  29. MongoConnection.initMongodb();
  30. MongoConnection.setWriteConcern(WriteConcern.SAFE);
  31. }
  32. public void setCollectionName(String collectionName) {
  33. this.collectionName = collectionName;
  34. collection = MongoConnection.initCollection(collectionName);
  35. }
  36. public DBCollection getCollection() {
  37. return collection;
  38. }
  39. @SuppressWarnings("unchecked")
  40. public BaseDb() {
  41. initDBCollection();
  42. Type genericType = getClass().getGenericSuperclass();
  43. Type[] params = ((ParameterizedType) genericType)
  44. .getActualTypeArguments();
  45. entityClass = (Class<T>) params[0];
  46. }
  47. public T findOne() {
  48. return TypeUtils.castToJavaBean(collection.findOne().toMap(),
  49. entityClass);
  50. }
  51. /**
  52. * 根据参数查询所有的文档信息
  53. *
  54. * @param params
  55. * 查询参数
  56. * @return 返回文档集合
  57. */
  58. public List<T> findAll(DBObject params) {
  59. return findAllAndSortAndLimit(params, null, null, null);
  60. }
  61. /**
  62. * 根据参数查询所有的文档信息
  63. *
  64. * @param params
  65. * 查询参数
  66. * @return 返回文档集合
  67. */
  68. public List<T> findAll(T t) {
  69. return findAll(t == null ? null : t.toDBObject());
  70. }
  71. /**
  72. * 查询所有的文档信息,并进行排序
  73. *
  74. * @param params
  75. * 查询参数
  76. * @param sortparams
  77. * 排序参数 1为正序排列 , -1为倒序排列
  78. * @return 返回文档集合
  79. */
  80. public List<T> findAllAndSort(DBObject params, DBObject sortparams) {
  81. return findAllAndSortAndLimit(params, sortparams, null, null);
  82. }
  83. /**
  84. * 查询所有的文档信息,并进行排序
  85. *
  86. * @param params
  87. * 查询参数
  88. * @param sortparams
  89. * 排序参数 1为正序排列 , -1为倒序排列
  90. * @return 返回文档集合
  91. */
  92. public List<T> findAllAndSort(T t, DBObject sortparams) {
  93. return findAllAndSort(t == null ? null : t.toDBObject(), sortparams);
  94. }
  95. /**
  96. * 查询符合条件的文档数量
  97. *
  98. * @param params
  99. * 查询参数
  100. * @return
  101. */
  102. public Long count(DBObject params) {
  103. return collection.count(params);
  104. }
  105. /**
  106. * 查询符合条件的文档数量
  107. *
  108. * @param params
  109. * 查询参数
  110. * @return
  111. */
  112. public Long count(T t) {
  113. return count(t == null ? null : t.toDBObject());
  114. }
  115. /**
  116. * 查询所有的文档记录信息,并且对这些信息进行排序和分页
  117. *
  118. * @param params
  119. * 查询参数
  120. * @param sortparams
  121. * 排序参数
  122. * @param skip
  123. * 从第几个位置开始
  124. * @param limit
  125. * 查询几条记录
  126. * @return
  127. */
  128. public List<T> findAllAndSortAndLimit(DBObject params, DBObject sortparams,
  129. Integer skip, Integer limit) {
  130. DBCursor cursor = null;
  131. if (params == null) {
  132. cursor = collection.find();
  133. } else {
  134. cursor = collection.find(params);
  135. }
  136. if (sortparams != null) {
  137. cursor = cursor.sort(sortparams);
  138. }
  139. if (skip != null) {
  140. cursor = cursor.skip(skip);
  141. }
  142. if (limit != null && limit > 0) {
  143. cursor = cursor.limit(limit);
  144. }
  145. List<T> list = new ArrayList<T>();
  146. while (cursor.hasNext()) {
  147. T t = TypeUtils.castToJavaBean(cursor.next().toMap(), entityClass);
  148. list.add(t);
  149. }
  150. return list;
  151. }
  152. /**
  153. * 查询所有的文档记录信息,并且对这些信息进行排序和分页
  154. *
  155. * @param params
  156. * 查询参数
  157. * @param sortparams
  158. * 排序参数
  159. * @param skip
  160. * 从第几个位置开始
  161. * @param limit
  162. * 查询几条记录
  163. * @return
  164. */
  165. public List<T> findAllAndSortAndLimit(T t, DBObject sortparams,
  166. Integer skip, Integer limit) {
  167. return findAllAndSortAndLimit(t == null ? null : t.toDBObject(),
  168. sortparams, skip, limit);
  169. }
  170. /**
  171. * 查询多条文档
  172. *
  173. * @param objs
  174. * 文档集合
  175. * @return 返回插入的文档成功或者是失败 ,true 为成功, false 为失败
  176. */
  177. public boolean insert(List<DBObject> objs) {
  178. boolean flag = false;
  179. try {
  180. WriteResult result = collection.insert(objs);
  181. if (result.getN() > 0) {
  182. flag = true;
  183. }
  184. } catch (Exception e) {
  185. logger.error("插入数据库出现异常,数据库名称:" + this.getCollectionName()
  186. + ",插入参数:" + objs == null ? "null" : objs.toString(), e);
  187. }
  188. return flag;
  189. }
  190. /**
  191. * 插入单条文档
  192. *
  193. * @param obj
  194. * 单个文档
  195. * @return 返回插入的文档成功或者是失败 ,true 为成功, false 为失败
  196. */
  197. public boolean insert(DBObject obj) {
  198. boolean flag = false;
  199. try {
  200. WriteResult result = collection.insert(obj);
  201. if (result.getN() > 0) {
  202. flag = true;
  203. }
  204. } catch (Exception e) {
  205. logger.error("插入数据库出现异常,数据库名称:" + this.getCollectionName()
  206. + ",插入参数:" + obj == null ? "null" : obj.toString(), e);
  207. }
  208. return flag;
  209. }
  210. /**
  211. * 插入更新数据库
  212. *
  213. * @param obj
  214. * @return
  215. */
  216. public boolean saveOrUpdate(DBObject obj) {
  217. boolean flag = false;
  218. try {
  219. WriteResult result = collection.save(obj);
  220. if (result.getN() > 0) {
  221. flag = true;
  222. }
  223. } catch (Exception e) {
  224. logger.error("插入数据库或者是更新数据库出现异常,数据库名称:" + this.getCollectionName()
  225. + ",插入参数:" + obj == null ? "null" : obj.toString(), e);
  226. }
  227. return flag;
  228. }
  229. /**
  230. * 插入更新数据库
  231. *
  232. * @param obj
  233. * @return
  234. */
  235. public boolean saveOrUpdate(T t) {
  236. return saveOrUpdate(t == null ? null : t.toDBObject());
  237. }
  238. /**
  239. * 插入单条文档
  240. *
  241. * @param obj
  242. * 单个文档
  243. * @return 返回插入的文档成功或者是失败 ,true 为成功, false 为失败
  244. */
  245. public boolean insert(T t) {
  246. return insert(t == null ? null : t.toDBObject());
  247. }
  248. /**
  249. * 更新文档信息
  250. *
  251. * @param queryParams
  252. * 查询参数
  253. * @param obj
  254. * 更新文档
  255. * @return 返回插入的文档成功或者是失败 ,true 为成功, false 为失败
  256. */
  257. public boolean update(DBObject queryParams, DBObject obj) {
  258. boolean flag = false;
  259. try {
  260. WriteResult result = collection.update(queryParams,
  261. new BasicDBObject().append("$set", obj), true, true);
  262. if (result.getN() > 0) {
  263. flag = true;
  264. }
  265. } catch (Exception e) {
  266. logger.error(
  267. "更新数据库出现异常,数据库名称:" + this.getCollectionName() + ",更新参数:"
  268. + obj == null ? "null" : obj.toString() + ",查询参数:"
  269. + queryParams == null ? "null" : queryParams
  270. .toString(), e);
  271. }
  272. return flag;
  273. }
  274. /**
  275. * 更新文档信息
  276. *
  277. * @param queryParams
  278. * 查询参数
  279. * @param obj
  280. * 更新文档
  281. * @return 返回插入的文档成功或者是失败 ,true 为成功, false 为失败
  282. */
  283. public boolean update(DBObject queryParams, T t) {
  284. return update(queryParams, t == null ? null : t.toDBObject());
  285. }
  286. /**
  287. * 删除数据库的文档信息
  288. *
  289. * @param obj
  290. * @return
  291. */
  292. public boolean remove(DBObject obj) {
  293. boolean flag = false;
  294. try {
  295. WriteResult result = collection.remove(obj);
  296. if (result.getN() > 0) {
  297. flag = true;
  298. }
  299. } catch (Exception e) {
  300. logger.error("删除数据出现异常,数据库名称:" + this.getCollectionName()
  301. + ",删除参数:" + obj == null ? "null" : obj.toString(), e);
  302. }
  303. return flag;
  304. }
  305. /**
  306. * 删除数据库的文档信息
  307. *
  308. * @param obj
  309. * @return
  310. */
  311. public boolean remove(T t) {
  312. return remove(t == null ? null : t.toDBObject());
  313. }
  314. /**
  315. * 删除这个collection所有文档信息
  316. */
  317. public void removeAll() {
  318. collection.drop();
  319. }
  320. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/924665
推荐阅读
相关标签
  

闽ICP备14008679号