给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驱动(下载地址). 本次我们只演示官方驱动的使用方法. 官方驱动文档查看 ...
随机推荐
- Python3批量修改指定目录下面的图片/文件名
需求: 从网上下载的N张.png图片保存到image目录中,将下载下来的图片全部重命名test1.png/test2.png... 实现代码: 目录结构: config-->setting.py ...
- JS对象 返回/设置年份方法 get/setFullYear() 返回/设置年份,用四位数表示。.顺序格式依次为:星期、月、日、年、时、分、秒、时区。(火狐浏览器)
返回/设置年份方法 get/setFullYear() 返回/设置年份,用四位数表示. var mydate=new Date();//当前时间2014年3月6日 document.write(myd ...
- Python全栈开发:django网络框架(二)
Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...
- CSS动画库——animate.css的使用
Animate.css是一款强大的CSS3动画库 官网地址:https://daneden.github.io/animate.css/ 使用方法如下所示: (1)下载animate.css 下载地址 ...
- Sublime Text自定制代码片段(Code Snippets)
在编写代码的整个过程中,开发人员经常会一次又一次的改写或者重用相同的代码段,消除这种重复过程的方法之一是把我们经常用到的代码保存成代码片段(snippets),这使得我们可以方便的检索和使用它们. 为 ...
- Eclipse注释快捷键、如何生成API以及可能遇到的问题解决
1.Java注释方式单行注释// 快捷键:ctrl+/多行注释/* 快捷键:shift+ctrl+/*/文档注释/** 快捷键:shift+Alt+j */ 2.生成API文档 打开index.htm ...
- SpringCloudConfig
方便服务配置文件统一管理,实时更新 组成 在spring cloud config组件中,分两个角色,一是config server,二是config client Config Server是一个可 ...
- day17 文件处理及简单函数
Python之路,Day5 = Python基础5 常亮 用大写来做提示 chr() # 数字转字符ord() # 字符转数字 读文件 要以读文件的模式打开一个文件对象,使用Python内置的open ...
- Java-Maven-pom.xml-project-build-plugins:plugins
ylbtech-Java-Maven-pom.xml-project-build-plugins:plugins 1. platform返回顶部 1.maven-compiler-plugin < ...
- hexo next中遇到的bug,引发出的关于jquery中click()函数和on("click",function())的区别
个人博客:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io 背景: 本人在维护博客的时候加入了aplaye ...