给java mongodb 官方driver 增加bean 操作
package gsralex; import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.net.UnknownHostException; import org.bson.types.ObjectId; import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBObject;
import com.mongodb.Mongo; public abstract class Dao {
private static final ThreadLocal<Mongo> threadLocal = new ThreadLocal<Mongo>(); private static final String connectAddress = "127.0.0.1";
private static final int connectPort = 27017; public static Mongo getMongo()
{
Mongo mongo = threadLocal.get();
if ( mongo == null )
{
try {
mongo = new Mongo( connectAddress, connectPort );
} catch ( UnknownHostException e ) {
/* TODO Auto-generated catch block */
e.printStackTrace();
}
threadLocal.set( mongo );
}
return(mongo);
} public static void close()
{
Mongo mongo = threadLocal.get(); if ( mongo != null )
{
mongo.close();
threadLocal.set( null );
}
} public static DB getDefaultDb()
{
return(getDb( "gsralex" ) );
} public static DB getDb( String dbName )
{
Mongo mongo = getMongo(); if ( mongo != null )
{
return(mongo.getDB( dbName ) );
} return(null);
} public static int insert( Object bean )
{
Class clazz = bean.getClass(); Field[] fields = clazz.getDeclaredFields(); MongoColumn column;
DBObject dbObject = new BasicDBObject(); try {
for ( Field field : fields )
{
column = field.getAnnotation( MongoColumn.class );
if ( column == null )
{
continue;
} Object filedValue = field.get( bean );
dbObject.put( column.name(), filedValue );
}
} catch ( Exception e ) {
/* TODO Auto-generated catch block */
e.printStackTrace();
} MongoCollection collection = (MongoCollection) clazz
.getAnnotation( MongoCollection.class );
return(getDefaultDb().getCollection( collection.name() ).insert( dbObject )
.getN() > 0 ? 0 : -1);
} public static int update( Object obj, String collectionName )
{
Class clazz = obj.getClass(); Field[] fields = clazz.getDeclaredFields(); MongoColumn column;
DBObject dbObject = new BasicDBObject(); try {
for ( Field field : fields )
{
column = field.getAnnotation( MongoColumn.class );
if ( column == null )
{
continue;
} Object filedValue = field.get( obj );
dbObject.put( column.name(), filedValue );
}
} catch ( Exception e ) {
/* TODO Auto-generated catch block */
e.printStackTrace();
} ObjectId _id = getObjectId( obj, clazz );
return(getDefaultDb().getCollection( collectionName ).update(
new BasicDBObject( "_id", _id ), dbObject ).getN() > 0 ? 0 : -1);
} private static ObjectId getObjectId( Object obj, Class clazz )
{
ObjectId _id = null;
try {
_id = (ObjectId) clazz.getField( "_id" ).get( obj );
} catch ( Exception e ) {
/* TODO Auto-generated catch block */
e.printStackTrace();
} return(_id);
} public static Object getBean( DBObject dbObject, Class clazz )
{
if ( dbObject == null )
{
return(null);
} Object obj = null;
try {
obj = clazz.newInstance(); Field[] fields = clazz.getDeclaredFields(); MongoColumn column;
for ( Field field : fields )
{
column = field.getAnnotation( MongoColumn.class ); if ( column == null )
continue; field.setAccessible( true );
Object filedValue = dbObject.get( column.name() );
field.set( obj, filedValue );
}
} catch ( Exception e ) {
e.printStackTrace();
} return(obj);
}
}
package gsralex; import java.lang.annotation.ElementType;
import java.lang.annotation.Target; @Target( { ElementType.TYPE } )
public @interface MongoCollection {
public String name() default "";
} package gsralex; import java.lang.annotation.ElementType;
import java.lang.annotation.Target; @Target( { ElementType.FIELD, ElementType.METHOD } )
public @interface MongoColumn {
public String name() default "";
}
郑州 6月23日 晴
给java mongodb 官方driver 增加bean 操作的更多相关文章
- MongoDB .Net Driver(C#驱动) - 内嵌数组/嵌入文档的操作(增加、删除、修改、查询(Linq 分页))
目录 一.前言 1. 运行环境 二.前期准备工作 1. 创建 MongoDBContext MongoDb操作上下文类 2.创建测试类 3.创建测试代码 三.内嵌数组增加元素操作 1.Update.S ...
- 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类)
近期工作中有使用到 MongoDb作为日志持久化对象,需要实现对MongoDb的增.删.改.查,但由于MongoDb的版本比较新,是2.4以上版本的,网上已有的一些MongoDb Helper类都是基 ...
- 适用于app.config与web.config的ConfigUtil读写工具类 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类) 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD) C# 实现AOP 的几种常见方式
适用于app.config与web.config的ConfigUtil读写工具类 之前文章:<两种读写配置文件的方案(app.config与web.config通用)>,现在重新整理一 ...
- MongoDB C Driver使用教程
MongoDB C Driver使用教程 转载请注明出处http://www.cnblogs.com/oloroso/ 本指南提供简介 MongoDB C 驱动程序. 在 C API 的详细信息,请参 ...
- Scala对MongoDB的增删改查操作
=========================================== 原文链接: Scala对MongoDB的增删改查操作 转载请注明出处! ==================== ...
- [原创]MongoDB C++ 驱动部分问题解决方案(MongoDB C++ Driver)
本文为我长时间开发以及修改MongoDB C++ Driver时的一些问题和解决方案.目前本文所介绍的相关引擎也已经发布闭源版本,请自行下载 库版本以及相关位置:http://code.google. ...
- Java实现单链表的各种操作
Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素 4.实现链表的反转 5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...
- 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)
构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...
- Mongodb学习笔记五(C#操作mongodb)
mongodb c# driver(驱动)介绍 目前基于C#的mongodb驱动有两种,分别是官方驱动(下载地址)和samus驱动(下载地址). 本次我们只演示官方驱动的使用方法. 官方驱动文档查看 ...
随机推荐
- 同步图计算实现最短路径Dijkstra算法
同上篇讲述pageRank一样,考虑一个顶点V. 根据顶点算法通常步骤1) 接收上个超步发出的入邻居的消息2) 计算当前顶点的值3) 向出邻居发消息 1.接收入邻居的消息 2.求入邻居的最小值,加上顶 ...
- CSIC_716_20191028【爬小破站】
1.爬取小破站的弹幕 2.展示爬取内容 打开网页,用教的方法找到cid 和header import requests from bs4 import BeautufulSoup import pan ...
- 2019云栖大会开幕,5G边缘计算成首日焦点
9月25日,全球顶尖科技盛会——2019云栖大会如期上演,1000余位当代技术领军人物与数万名开发者集结杭州,聚焦数字经济,共话面向未来20年的基础科学.科技创新与应用突破.其中,边缘计算技术领域因5 ...
- 在任务管理中显示进程ID号
- scrpy--分布式爬虫
原来的scrapy中的Scheduler维护的是当前机器中的任务队列(存放着Request对象以及回调函数等信息) + 当前的去重队列(存放访问过的url地址) 实现分布式的关键就是需要找一台专门的主 ...
- webpack 简单笔记(一)
安装部分不介绍了 (一)第一个最简单的demo,单入口,单文件 目录结构: webapck.config.js中代码: 'use strict' const path = require('path' ...
- Gabor filter for image processing and computer vision
介绍 我们已经知道,傅里叶变换是一种信号处理中的有力工具,可以帮助我们将图像从空域转换到频域,并提取到空域上不易提取的特征.但是经过傅里叶变换后,图像在不同位置的频度特征往往混合在一起,但是Gabor ...
- Android开发 layer-list详解
参考:https://blog.csdn.net/speverriver/article/details/80925686 挖坑,以后填坑
- ZOJ2562
ZOJ2562https://vjudge.net/problem/11781/origin<=n的且因子数最多的那个数做法:同因子数取最小,dfs更新答案 #include <iostr ...
- 如何在屏幕上查看命令的输出以及在Linux中写入文件
在Linux中输出命令可以做很多事情(http://www.nanke0834.com) 您可以将命令的输出分配给变量,将其发送到另一个命令/程序以通过管道进行处理或将其重定向到文件以进行进一步分析. ...