通过阅读MongoDB  3.2.1的官方文档中关于java 编程发现最新的文档并没有实现对对象到Document的映射,所以自己有了利用反射实现简单的关系映射.

  1.定义抽象类:AbstractMongoSession

import java.util.List;import org.bson.Document;
import org.bson.conversions.Bson;import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;/** 创建一个会话实现对mongoDB的原子操作* * @author:maybo* * @date:2016-2-1*/
public abstract class AbstractMongoSession {private MongoDatabase db;private Class<?> clazz;private MongoCollection<Document> collection;public MongoCollection<Document> getCollection() {return this.collection;}public Class<?> getClazz() {return clazz;}public void setDb(MongoDatabase db) {this.db = db;}public MongoDatabase getDb() {return db;}protected MongoCollection<Document> Collection(Class<?> clazz) {this.clazz = clazz;Table table = (Table) clazz.getAnnotation(Table.class);String col = null;if (null != table && null != table.name()) {col = table.name();} else {col = clazz.getName();}this.collection = db.getCollection(col);return this.collection;}/** 保存* * @param:实体* * @return:void*/public abstract void save(Object obj);public abstract void saveMany(List<Object> obj);// 删除数据public abstract long delete(Object obj) throws Exception;public abstract long delete(Bson bson) throws Exception;// 删除数据public abstract long deleteMany(List<Object> objs);public abstract long deleteMany(Bson bson);// 修改数据public abstract long upate(Bson bson, Object obj);public abstract long update(Object obj);public abstract long upateMany(Bson bson, Object obj);public abstract long upateMany(Bson bson, List<Object> objs);public abstract long upateMany(List<Object> objs);// 查询数据public abstract Object find(Object obj);// 获取所有的数据public abstract List<Object> finds();// 条件查询数据public abstract List<Object> query(Bson bson);public abstract Object queryOne(Bson bson);public abstract List<Object> query(Bson bson, Bson sort);public abstract Object queryOne(Bson bson, Bson sort);public abstract List<Object> query(Bson bson, Bson sort, int limit);public abstract List<Object> query(Bson bson, Bson sort, int limit, int skip);public abstract List<Object> query(Bson bson, Bson sort, Bson filter);public abstract Object queryOne(Bson bson, Bson sort, Bson Filter);public abstract long count();public abstract long count(Bson bson);}

2. 实现类MongoSession

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;import org.bson.Document;
import org.bson.conversions.Bson;import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;public class MongoSession extends AbstractMongoSession {public MongoSession(Class<?> clazz, MongoDatabase db) {this.setDb(db);this.Collection(clazz);}/** (non-Javadoc)* * @see AbstractMongoSession#save(java.lang.Object)*/@Overridepublic void save(Object obj) {try {this.getCollection().insertOne(BsonUtil.toBson(obj));} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (NoSuchFieldException e) {// TODO Auto-generated catch block
            e.printStackTrace();}}@Overridepublic long delete(Object obj) throws Exception {try {DeleteResult result = this.getCollection().deleteOne(BsonUtil.toBson(obj));long count = result.getDeletedCount();return count;} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (NoSuchFieldException e) {// TODO Auto-generated catch block
            e.printStackTrace();}return 0;}@Overridepublic void saveMany(List<Object> obj) {try {this.getCollection().insertMany(BsonUtil.toBsons(obj));} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (NoSuchFieldException e) {// TODO Auto-generated catch block
            e.printStackTrace();}}@Overridepublic long delete(Bson bson) throws Exception {DeleteResult deleteResult = this.getCollection().deleteOne(bson);return deleteResult.getDeletedCount();}@Overridepublic long deleteMany(List<Object> objs) {List<Document> documents;int count = 0;try {documents = BsonUtil.toBsons(objs);for (int i = 0; null != documents && i < documents.size(); i++) {DeleteResult deleteResult = this.getCollection().deleteOne(documents.get(i));count += deleteResult.getDeletedCount();}return count;} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (NoSuchFieldException e) {// TODO Auto-generated catch block
            e.printStackTrace();}return count;}@Overridepublic long deleteMany(Bson bson) {DeleteResult deleteResult = this.getCollection().deleteMany(bson);return deleteResult.getDeletedCount();}@Overridepublic long upate(Bson bson, Object obj) {try {UpdateResult result = this.getCollection().updateOne(bson,new Document("$set", BsonUtil.toBson(obj)));return result.getMatchedCount();} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (NoSuchFieldException e) {// TODO Auto-generated catch block
            e.printStackTrace();}return 0;}@Overridepublic long update(Object obj) {Document document;try {document = BsonUtil.toBson(obj);UpdateResult updateResult = this.getCollection().updateOne(Filters.eq("_id", document.get("_id")),new Document("$set", document));return updateResult.getMatchedCount();} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (NoSuchFieldException e) {// TODO Auto-generated catch block
            e.printStackTrace();}return 0;}@Overridepublic long upateMany(Bson bson, Object obj) {try {UpdateResult updateResult = this.getCollection().updateMany(bson,new Document("$set", BsonUtil.toBson(obj)));return updateResult.getMatchedCount();} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (NoSuchFieldException e) {// TODO Auto-generated catch block
            e.printStackTrace();}return 0;}@Overridepublic long upateMany(Bson bson, List<Object> obj) {for (int i = 0; null != obj && i < obj.size(); i++) {try {UpdateResult result = this.getCollection().updateMany(bson,new Document("$set", BsonUtil.toBson(obj)));return result.getMatchedCount();} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (NoSuchFieldException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}return 0;}@Overridepublic long upateMany(List<Object> objs) {long count = 0;for (int i = 0; null != objs && i < objs.size(); i++) {try {UpdateResult result = this.getCollection().updateMany(Filters.eq("_id",BsonUtil.toBson(objs.get(i)).get("_id")),new Document("$set", BsonUtil.toBson(objs.get(i))));count += result.getMatchedCount();} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (NoSuchFieldException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}return count;}@Overridepublic Object find(Object obj) {try {Document document = this.getCollection().find(Filters.eq("_id", BsonUtil.toBson(obj).get("_id"))).first();return BsonUtil.toBean(document, this.getClazz());} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (NoSuchFieldException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch block
            e.printStackTrace();}return null;}@Overridepublic List<Object> finds() {FindIterable<Document> doIterable = this.getCollection().find();MongoCursor<Document> cursor = doIterable.iterator();List<Object> objects = new ArrayList<Object>();while (cursor.hasNext()) {Document document = cursor.next();try {objects.add(BsonUtil.toBean(document, this.getClazz()));} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}return objects;}@Overridepublic List<Object> query(Bson bson) {FindIterable<Document> doIterable = this.getCollection().find(bson);MongoCursor<Document> cursor = doIterable.iterator();List<Object> objects = new ArrayList<Object>();while (cursor.hasNext()) {Document document = cursor.next();try {objects.add(BsonUtil.toBean(document, this.getClazz()));} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}return objects;}@Overridepublic Object queryOne(Bson bson) {Document document = this.getCollection().find(bson).first();try {return BsonUtil.toBean(document, this.getClazz());} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
            e.printStackTrace();}return null;}@Overridepublic List<Object> query(Bson bson, Bson sort) {FindIterable<Document> doIterable = this.getCollection().find(bson).sort(sort);MongoCursor<Document> cursor = doIterable.iterator();List<Object> objects = new ArrayList<Object>();while (cursor.hasNext()) {Document document = cursor.next();try {objects.add(BsonUtil.toBean(document, this.getClazz()));} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}return objects;}@Overridepublic Object queryOne(Bson bson, Bson sort) {Document document = this.getCollection().find(bson).sort(sort).first();try {return BsonUtil.toBean(document, this.getClazz());} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
            e.printStackTrace();}return null;}@Overridepublic List<Object> query(Bson bson, Bson sort, int limit) {FindIterable<Document> doIterable = this.getCollection().find(bson).sort(sort);if (limit > 0) {doIterable = doIterable.limit(limit);}MongoCursor<Document> cursor = doIterable.iterator();List<Object> objects = new ArrayList<Object>();while (cursor.hasNext()) {Document document = cursor.next();try {objects.add(BsonUtil.toBean(document, this.getClazz()));} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}return objects;}@Overridepublic List<Object> query(Bson bson, Bson sort, int limit, int skip) {FindIterable<Document> doIterable = this.getCollection().find(bson).sort(sort);if (limit > 0) {doIterable = doIterable.limit(limit);}if (skip > 0) {doIterable = doIterable.skip(skip);}MongoCursor<Document> cursor = doIterable.iterator();List<Object> objects = new ArrayList<Object>();while (cursor.hasNext()) {Document document = cursor.next();try {objects.add(BsonUtil.toBean(document, this.getClazz()));} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}return objects;}@Overridepublic List<Object> query(Bson bson, Bson sort, Bson filter) {FindIterable<Document> doIterable = this.getCollection().find(bson).sort(sort).filter(filter);MongoCursor<Document> cursor = doIterable.iterator();List<Object> objects = new ArrayList<Object>();while (cursor.hasNext()) {Document document = cursor.next();try {objects.add(BsonUtil.toBean(document, this.getClazz()));} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
                e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}return objects;}@Overridepublic Object queryOne(Bson bson, Bson sort, Bson Filter) {Document document = this.getCollection().find(bson).sort(sort).filter(Filter).first();try {return BsonUtil.toBean(document, this.getClazz());} catch (IllegalArgumentException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
            e.printStackTrace();}return null;}@Overridepublic long count() {return this.getCollection().count();}@Overridepublic long count(Bson bson) {// TODO Auto-generated method stubreturn this.getCollection().count(bson);}
}

3. 帮助类:实现Document到Object 以及Object到Document的转换.使用反射技术和注解.

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;import org.bson.Document;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;/** 将mongo的文档转化为对象将对象转化为mongo文档* @author:maybo* @data:2016-2-1*/
public class BsonUtil {public static <T> List<T> toBeans(List<Document> documents, Class<T> clazz)throws IllegalArgumentException, InstantiationException,IllegalAccessException, InvocationTargetException {List<T> list = new ArrayList<T>();for (int i = 0; null != documents && i < documents.size(); i++) {list.add(toBean(documents.get(i), clazz));}return list;}/** 将Bson 转化为对象* * @param:Bson文档* * @param:类pojo* * @param:返回对象*/public static <T> T toBean(Document document, Class<T> clazz)throws InstantiationException, IllegalAccessException,IllegalArgumentException, InvocationTargetException {T obj = clazz.newInstance();// 声明一个对象Field[] fields = clazz.getDeclaredFields();// 获取所有属性Method[] methods = clazz.getMethods();// 获取所有的方法/** 查找所有的属性,并通过属性名和数据库字段名通过相等映射*/for (int i = 0; i < fields.length; i++) {String fieldName = fields[i].getName();Column column = fields[i].getAnnotation(Column.class);Object bson = null;if (null != column && null != column.name()) {bson = document.get(column.name());} else if ("id".equals(fieldName)) {bson = document.get("_id");} else {bson = document.get(fieldName);}if (null == bson) {continue;} else if (bson instanceof Document) {// 如果字段是文档了递归调用bson = toBean((Document) bson, fields[i].getType());} else if (bson instanceof MongoCollection) {// 如果字段是文档集了调用colTOList方法
bson = colToList(bson, fields[i]);}for (int j = 0; j < methods.length; j++) {// 为对象赋值String metdName = methods[j].getName();if (equalFieldAndSet(fieldName, metdName)) {methods[j].invoke(obj, bson);break;}}}return obj;}public static List<Document> toBsons(List<Object> objs)throws IllegalArgumentException, SecurityException,IllegalAccessException, InvocationTargetException,NoSuchFieldException {List<Document> documents = new ArrayList<Document>();for (int i = 0; null != objs && i < objs.size(); i++) {documents.add(toBson(objs.get(i)));}return documents;}/** 将对象转化为Bson文档* * @param:对象* * @param:类型* * @return:文档*/public static Document toBson(Object obj) throws IllegalArgumentException,IllegalAccessException, InvocationTargetException,SecurityException, NoSuchFieldException {if (null == obj) {return null;}Class<? extends Object> clazz = obj.getClass();Document document = new Document();Method[] methods = clazz.getDeclaredMethods();Field[] fields = clazz.getDeclaredFields();for (int i = 0; null != fields && i < fields.length; i++) {Column column = fields[i].getAnnotation(Column.class);// 获取列注解内容NotColumn notColumn = fields[i].getAnnotation(NotColumn.class);// 获取否列String key = null;// 对应的文档键值if (null != column && null != column.name()) {// 存在列映射取值key = column.name();} else if (null != notColumn) {// 不是列的情况continue;} else {key = fields[i].getName();// 默认情况通过属性名映射if ("id".equals(key)) {// 替换id为_idkey = "_id";}}String fieldName = fields[i].getName();/** 获取对象属性值并映射到Document中*/for (int j = 0; null != methods && j < methods.length; j++) {String methdName = methods[j].getName();if (null != fieldName && equalFieldAndGet(fieldName, methdName)) {Object val = methods[j].invoke(obj);// 得到值if (null == val) {continue;}if (isJavaClass(methods[j].getReturnType())) {if (methods[j].getReturnType().getName().equals("java.util.List")) {// 列表处理@SuppressWarnings("unchecked")List<Object> list = (List<Object>) val;List<Document> documents = new ArrayList<Document>();for (Object obj1 : list) {documents.add(toBson(obj1));}document.append(key, documents);} else {// 其它对象处理,基本类型
                            document.append(key, val);}} else {// 自定义类型
                        document.append(key, toBson(val));}}}}return document;}/** 是否是自定义类型】* * false:是自定义*/private static boolean isJavaClass(Class<?> clz) {return clz != null && clz.getClassLoader() == null;}/** 将文档集转化为列表* * @param:文档集* * @param:属性类型* * @return:返回列表*/private static List<Object> colToList(Object bson, Field field)throws InstantiationException, IllegalAccessException,IllegalArgumentException, InvocationTargetException {ParameterizedType pt = (ParameterizedType) field.getGenericType();// 获取列表的类型List<Object> objs = new ArrayList<Object>();@SuppressWarnings("unchecked")MongoCollection<Document> cols = (MongoCollection<Document>) bson;MongoCursor<Document> cursor = cols.find().iterator();while (cursor.hasNext()) {Document child = cursor.next();@SuppressWarnings("rawtypes")Class clz = (Class) pt.getActualTypeArguments()[0];// 获取元素类型@SuppressWarnings("unchecked")Object obj = toBean(child, clz);System.out.println(child);objs.add(obj);}return objs;}/** 比较setter方法和属性相等*/private static boolean equalFieldAndSet(String field, String name) {if (name.toLowerCase().matches("set" + field.toLowerCase())) {return true;} else {return false;}}/** 比较getter方法和属性相等*/private static boolean equalFieldAndGet(String field, String name) {if (name.toLowerCase().matches("get" + field.toLowerCase())) {return true;} else {return false;}}
}

4.用到的注解Column ,NotColumn,Table

Column:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {public String name();public String text() default "这是一个属性映射";
}
N otColumn:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NotColumn {public String text() default "不是属性字段";
}
Table:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {public String name();public String text() default "表格映射";
}

  5. MongoObject

import java.util.ArrayList;
import java.util.List;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ReadPreference;
import com.mongodb.ServerAddress;
import com.mongodb.WriteConcern;public class MongoObject {private List<String> hostPorts;private int port=27017;private String host="127.0.0.1";private int connectionsPerHost=5;// 每个主机的连接数private int threadsAllowedToBlockForConnectionMultiplier=30;// 线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值。如果连接线程排满了队列就会抛出“Out// // to get// db”错误。private long maxWaitTime=5000;// 最大等待连接的线程阻塞时间private long connectTimeout=5000;// 连接超时的毫秒。0是默认和无限private long socketTimeout=5000;// socket超时。0是默认和无限private boolean autoConnectRetry=false;// 这个控制是否在一个连接时,系统会自动public void setHostPorts(List<String> hostPorts) {this.hostPorts = hostPorts;}public MongoObject() {// TODO Auto-generated constructor stub}public int getPort() {return port;}public void setPort(int port) {this.port = port;}public String getHost() {return host;}public void setHost(String host) {this.host = host;}public int getConnectionsPerHost() {return connectionsPerHost;}public void setConnectionsPerHost(int connectionsPerHost) {this.connectionsPerHost = connectionsPerHost;}public int getThreadsAllowedToBlockForConnectionMultiplier() {return threadsAllowedToBlockForConnectionMultiplier;}public void setThreadsAllowedToBlockForConnectionMultiplier(int threadsAllowedToBlockForConnectionMultiplier) {this.threadsAllowedToBlockForConnectionMultiplier = threadsAllowedToBlockForConnectionMultiplier;}public long getMaxWaitTime() {return maxWaitTime;}public void setMaxWaitTime(long maxWaitTime) {this.maxWaitTime = maxWaitTime;}public long getConnectTimeout() {return connectTimeout;}public void setConnectTimeout(long connectTimeout) {this.connectTimeout = connectTimeout;}public long getSocketTimeout() {return socketTimeout;}public void setSocketTimeout(long socketTimeout) {this.socketTimeout = socketTimeout;}public boolean isAutoConnectRetry() {return autoConnectRetry;}public void setAutoConnectRetry(boolean autoConnectRetry) {this.autoConnectRetry = autoConnectRetry;}public MongoClient run() {if (null != hostPorts) {if (null != host && port > 0) {hostPorts.add(host + ":" + port);}} else {hostPorts = new ArrayList<String>();if (null != host && port > 0) {hostPorts.add(host + ":" + port);} else {return null;}}List<ServerAddress> addresses = new ArrayList<ServerAddress>();for (String hostPort : hostPorts) {String[] spits = hostPort.split(":");ServerAddress address = new ServerAddress(spits[0],Integer.valueOf(spits[1]));addresses.add(address);}MongoClient client = new MongoClient(addresses, getConfOptions());return client;}@SuppressWarnings("deprecation")private MongoClientOptions getConfOptions() {return new MongoClientOptions.Builder().socketKeepAlive(true)// 是否保持长链接.connectTimeout((int) this.connectTimeout)// 链接超时时间.socketTimeout((int) this.socketTimeout)// read数据超时时间.readPreference(ReadPreference.primary())// 最近优先策略.connectionsPerHost(this.connectionsPerHost)// 每个地址最大请求数.maxWaitTime((int) this.maxWaitTime)// 长链接的最大等待时间.threadsAllowedToBlockForConnectionMultiplier(this.threadsAllowedToBlockForConnectionMultiplier) // 一个socket最大的等待请求数.writeConcern(WriteConcern.NORMAL).build();}
}

  6.MongoDB用于生产数据库对象

import com.mongodb.client.MongoDatabase;public class MongoDB{private String db;private MongoObject client;public void setClient(MongoObject client) {this.client = client;}public void setDb(String db) {this.db = db;}
public MongoDB(MongoObject client,String db){this.client=client;this.db=db;
}
public MongoDatabase excute(){return client.run().getDatabase(db);
}
}

  7.DaoImpl

import java.util.List;public class DaoImpl implements Dao{private MongoTemplate template;
private MongoSession session;
private String className;
public void setClassName(String className) {this.className = className;
}
public MongoSession getSession() {return session;
}
public DaoImpl(){}
public DaoImpl(MongoTemplate template,String className){this.template = template;this.className=className;try {this.session=template.session(Class.forName(className));} catch (ClassNotFoundException e) {// TODO Auto-generated catch block
        e.printStackTrace();}
}
public void setTemplate(MongoTemplate template) {this.template = template;try {this.session=template.session(Class.forName(className));} catch (ClassNotFoundException e) {// TODO Auto-generated catch block
        e.printStackTrace();}
}@Overridepublic void save(Object obj) {this.session.save(obj);}@Overridepublic void delete(Object obj) {try {this.session.delete(obj);} catch (Exception e) {// TODO Auto-generated catch block
            e.printStackTrace();}}@Overridepublic void update(Object obj) {this.session.update(obj);}@Overridepublic Object find(Object obj) {// TODO Auto-generated method stubreturn this.session.find(obj);}@Overridepublic List<Object> finds() {// TODO Auto-generated method stubreturn this.session.finds();}@Overridepublic long total() {// TODO Auto-generated method stubreturn this.session.count();}@Overridepublic List<Object> finds(int index, int offset) {// TODO Auto-generated method stubreturn this.session.query(null, null, offset, index);}}

8. Test

public class MongoDBTest {private static MongoTemplate template1;private static MongoTemplate template2;private static MongoTemplate template3;private static Dao dao1;private static Dao dao2;private static Dao dao3;static {MongoObject mongoObject = new MongoObject();mongoObject.setPort(12345);MongoDB demo1 = new MongoDB(mongoObject, "demo1");MongoDB demo2 = new MongoDB(mongoObject, "demo2");MongoDB demo3 = new MongoDB(mongoObject, "demo3");template1 = new MongoTemplate(demo1);template2 = new MongoTemplate(demo2);template3 = new MongoTemplate(demo3);dao1 = new DaoImpl(template1, "MidStu");dao2 = new DaoImpl(template2, "MidStu");dao3 = new DaoImpl(template3, "MidStu");}@Testpublic void save() {MidStu midStu = new MidStu();midStu.setHabit("zuqiu");midStu.setId("saflfgsddsf35");dao1.save(midStu);MidStu midStuFind = new MidStu();midStuFind.setId("saflfgsddsf35");System.out.println(dao1.find(midStuFind).toString());dao2.save(midStu);System.out.println(dao2.find(midStuFind).toString());dao3.save(midStu);System.out.println(dao3.find(midStuFind).toString());}
}

  

转载于:https://www.cnblogs.com/maybo/p/5182439.html

通过java反射实现简单的关于MongoDB的对象关系映射(ORM).相关推荐

  1. python中通过元类(TYPE)简单实现对象关系映射(ORM)

    ORM是创建一个实例对象,用创建他的类名当做数据表名,用创建他的类属性对应数据表的字段,不需要在自己写复杂的sql语句,而是通过对实例对象的操作时,能让代码自动帮我们整理为对应的sql语句. clas ...

  2. java对象关系映射ROM

    一.对象关系映射ORM概述 对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术:简单的说,ORM是通过使 ...

  3. Java 反射将配置文件数据加载到对象属性中

    Java 反射将配置文件数据加载到对象属性中 Java 反射 可以根据类名找到相应的类,也可以将配置文件中的值加载到对应属性中. 需要用到的包:spring-core-3.1.2.Release.ja ...

  4. Java中带有NetSuite数据实体的对象关系映射(ORM)

    对象关系映射(ORM)技术使使用关系数据源更容易,并且可以将逻辑业务模型与物理存储模型联系在一起. 遵循本教程,将与NetSuite数据的连接集成到基于Java的ORM框架Hibernate中. 您可 ...

  5. Java对象关系映射(ORM)

    一.什么是对象关系映射 简单来说,对象关系映射即是将Java中的对象一一对应映射到MySQL(本文基于MySQL)的Table(表)中,通过对对象各个属性赋值来更新数据库. 官方的说,对象关系映射(O ...

  6. Java的对象关系映射

    KeyAccess的 1.4版现已发布. KeyAccess是Java的对象关系映射(ORM)工具,旨在减少在域对象模型和基础数据库之间进行手动更新的需要. 它使用现有数据库作为生成域模型的起点,并且 ...

  7. Java反射机制简单使用

    1.Java反射相关类所在package: java.lang.reflect.* 2.开始使用Reflection: 使用reflect相关类,遵循三个步骤: a.获取想要操作类的 java.lan ...

  8. Java反射之Filed(类中的属性对象)

    通过反射机制获取类中的属性对象. 1.获取类中所有的public属性(包括父类):getFields(): public class TestFiled {class A{public int age ...

  9. rabbitmq原理总结,Java反射的简单入门

    @author 70241 */ public class ClassDemo { @Testpublic void classTest1() {try {Class class1 = Class.f ...

最新文章

  1. QT5.3 + vs2012 + box2d环境配置
  2. SpiderData 2019年2月12日 DApp数据排行榜
  3. JavaScript模块化开发技术概述
  4. 浅谈多目标跟踪中的相机运动
  5. cordova自定义android插件,Cordova 自定义插件(Android版本)
  6. MS UC 2013-0-虚拟机-标准化-部署-1-虚拟化-部署
  7. 【LuoguP3241】[HNOI2015] 开店
  8. JAVA入门级教学之(连接运算符)
  9. MySQL字符集详解
  10. 小微金融的常规策略架构与流程是什么?
  11. 远程服务器网刻系统,网刻-wu123119-ChinaUnix博客
  12. 数字孪生工厂解决方案,3DGIS+视频融合+时空位置智能(LI)技术
  13. Python文本相似度识别(附图形化界面)
  14. 分享一些可用的淘宝(1688)关于订单信息获取的相关接口(开放API收费)
  15. HTML+CSS例子>太极
  16. 7个等级 容灾等级_容灾备份的柒个国际标准等级(一)
  17. 码支付系统 无授权—个人免签约支付系统二维码收款即时到账源码 –
  18. LeetCode 712. 两个字符串的最小ASCII删除和
  19. csp计算机认证考试题,CCF数图 | 第22次CSP认证题目精讲已收录
  20. 使用jQuery实现echars智能图表面板(附代码)

热门文章

  1. html中相同结构标签怎么区分,html标签结构总结
  2. 双盘转子动力学仿真c语言程序,递归牛顿欧拉(正)动力学仿真
  3. python的ctypes模块详解数组_python ctypes结构数组
  4. python划分训练集和测试集_杨涛的Python机器学习3:单特征与多特征、训练集与测试集,杨桃...
  5. Web前端笔记-通过Thymeleaf把数组传输给echarts并显示曲线图
  6. Spring Boot通过url设置国际化
  7. Qt工作笔记-双击TreeWidget列进行数据修改
  8. c语言中小数在内存中的存储,c语言中小数在内存中的存储
  9. java 数据结构_Java数据结构学习方法
  10. Apollo配置中心热加载mysql_Apollo 配置中心部署注意事项