MongoDB入门(5)- 我们自己封装的MongoDB-Java版本
2016-08-23 14:43
761 查看
用法
实体定义package com.wisdombud.mongotool; import java.io.Serializable; import java.util.Date; import java.util.List; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "Project") public class Project extends MongoDbEntity implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String ProjectId; private String weituodanwei; private String weituodanweidizhi; private String post; private String yangpinzhizaodanwei; private String zhizaodanweidizhi; private String phone; private String contact; private String yangpinjiazhi; public String getProjectId() { return ProjectId; } public void setProjectId(String projectId) { ProjectId = projectId; } public String getWeituodanwei() { return weituodanwei; } public void setWeituodanwei(String weituodanwei) { this.weituodanwei = weituodanwei; } public String getWeituodanweidizhi() { return weituodanweidizhi; } public void setWeituodanweidizhi(String weituodanweidizhi) { this.weituodanweidizhi = weituodanweidizhi; } public String getPost() { return post; } public void setPost(String post) { this.post = post; } public String getYangpinzhizaodanwei() { return yangpinzhizaodanwei; } public void setYangpinzhizaodanwei(String yangpinzhizaodanwei) { this.yangpinzhizaodanwei = yangpinzhizaodanwei; } public String getZhizaodanweidizhi() { return zhizaodanweidizhi; } public void setZhizaodanweidizhi(String zhizaodanweidizhi) { this.zhizaodanweidizhi = zhizaodanweidizhi; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getContact() { return contact; } public void setContact(String contact) { this.contact = contact; } public String getYangpinjiazhi() { return yangpinjiazhi; } public void setYangpinjiazhi(String yangpinjiazhi) { this.yangpinjiazhi = yangpinjiazhi; } public String getShenqingleixing() { return shenqingleixing; } public void setShenqingleixing(String shenqingleixing) { this.shenqingleixing = shenqingleixing; } public String getYangpinmingcheng() { return yangpinmingcheng; } public void setYangpinmingcheng(String yangpinmingcheng) { this.yangpinmingcheng = yangpinmingcheng; } public String getXinghao() { return xinghao; } public void setXinghao(String xinghao) { this.xinghao = xinghao; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public String getJianceyiju() { return jianceyiju; } public void setJianceyiju(String jianceyiju) { this.jianceyiju = jianceyiju; } public List<String> getJiancexiangmu() { return jiancexiangmu; } public void setJiancexiangmu(List<String> jiancexiangmu) { this.jiancexiangmu = jiancexiangmu; } public String getYangpinzhuangkuang() { return yangpinzhuangkuang; } public void setYangpinzhuangkuang(String yangpinzhuangkuang) { this.yangpinzhuangkuang = yangpinzhuangkuang; } public String getYangpinxuhao() { return yangpinxuhao; } public void setYangpinxuhao(String yangpinxuhao) { this.yangpinxuhao = yangpinxuhao; } public String getYangpinfujian() { return yangpinfujian; } public void setYangpinfujian(String yangpinfujian) { this.yangpinfujian = yangpinfujian; } public String getYangpintijiaofangshi() { return yangpintijiaofangshi; } public void setYangpintijiaofangshi(String yangpintijiaofangshi) { this.yangpintijiaofangshi = yangpintijiaofangshi; } public String getYangpinbaogaotijiaofangshi() { return yangpinbaogaotijiaofangshi; } public void setYangpinbaogaotijiaofangshi(String yangpinbaogaotijiaofangshi) { this.yangpinbaogaotijiaofangshi = yangpinbaogaotijiaofangshi; } public String getYangpinchuzhifangshi() { return yangpinchuzhifangshi; } public void setYangpinchuzhifangshi(String yangpinchuzhifangshi) { this.yangpinchuzhifangshi = yangpinchuzhifangshi; } public Date getCreateDay() { return CreateDay; } public void setCreateDay(Date createDay) { CreateDay = createDay; } private String shenqingleixing; private String yangpinmingcheng; private String xinghao; private String number; private String jianceyiju; private List<String> jiancexiangmu; private String yangpinzhuangkuang; private String yangpinxuhao; private String yangpinfujian; private String yangpintijiaofangshi; private String yangpinbaogaotijiaofangshi; private String yangpinchuzhifangshi; private Date CreateDay; }
DAO实现
package com.wisdombud.mongotool; import org.springframework.data.mongodb.core.MongoOperations; public class ProjectDaoImpl extends SimpleMongoDaoImpl<Project, String> implements ProjectDao { public ProjectDaoImpl(MongoOperations mongoOper) { super(mongoOper); } }
核心源码
package com.wisdombud.mongotool; import java.io.Serializable; import java.lang.reflect.Field; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.ArrayUtils; import org.bson.types.ObjectId; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Order; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import common.toolkit.java.entity.PageEntity; import common.toolkit.java.orm.hibernate.GeneralQuery; import common.toolkit.java.util.ReflectUtils; public class SimpleMongoDaoImpl<T, PK extends Serializable> implements SimpleMongoDao<T, PK> { @Autowired protected MongoOperations mongoOper; protected Class<T> entityClazz; /** * 字符串分隔的标志符号,现在用:表示,在关联查询的时候用。 ***/ private final String splitMarker = "::"; public SimpleMongoDaoImpl(MongoOperations mongoOper) { this.mongoOper = mongoOper; this.entityClazz = ReflectUtils.getSuperClassGenricType(getClass()); } @Override public PK save(T entity) { return null; } @Override public void update(T entity) { mongoOper.save(entity); } @Override public void saveOrUpdate(T entity) { mongoOper.save(entity); } @Override public void saveOrUpdate(Collection<T> entities) { for (T entity : entities) { mongoOper.save(entity); } } @Override public void delete(T entity) { mongoOper.remove(entity); } @Override public void deleteAll(Collection<T> entities) { for (T entity : entities) { mongoOper.remove(entity); } } @Override public void deleteById(PK id) { mongoOper.remove(new Query(Criteria.where("_id").is(id)), entityClazz); } @Override public T get(PK id) { return mongoOper.findById(id, entityClazz); } @Override public List<T> getAll() { return this.mongoOper.findAll(entityClazz); } @Override public T load(PK id) { // TODO Auto-generated method stub return null; } @Override public void refresh(T entity) { // TODO Auto-generated method stub } @Override public void merge(T entity) { // TODO Auto-generated method stub } @Override public void merge(String entityName, T entity) { // TODO Auto-generated method stub } @Override public void evict(T entity) { // TODO Auto-generated method stub } @Override public boolean contains(Object entity) { // TODO Auto-generated method stub return false; } @Override public List<T> findBy(String propertyName, Object value) { HashMap<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put(propertyName, value); return this.findBy(paramMap, null); } @Override public List<T> findBy(Map<String, Object> paramMap, List<Order> orderList) { Query query = this.buildQuery(paramMap, orderList); return mongoOper.find(query, entityClazz); } @Override public T findUniqueBy(String propertyName, Object value) { HashMap<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put(propertyName, value); Query query = this.buildQuery(paramMap, null); return mongoOper.findOne(query, entityClazz); } @Override public T findUniqueBy(Map<String, Object> paramMap, List<Order> orderList) { Query query = this.buildQuery(paramMap, orderList); return mongoOper.findOne(query, entityClazz); } @Override public void pageList(Map<String, Object> paramMap, List<Order> orderList, PageEntity<T> pageEntity) { Query query = this.buildQuery(paramMap, orderList); pageEntity.setTotalResults(mongoOper.count(query, entityClazz));// 总记录数 pageEntity.setTotalPages();// 总页数 query.skip(pageEntity.getStart()); query.limit(pageEntity.getPageSize()); pageEntity.setResults(mongoOper.find(query, entityClazz));// 分页数据 pageEntity.setCurrentPageLength(pageEntity.getResults().size());// 当前页面记录数 } public Class<T> getEntityClazz() { return entityClazz; } public void setEntityClazz(Class<T> entityClazz) { this.entityClazz = entityClazz; } protected void buildQuery(String key, Object value, Query query) { // 如果为数字 if (key.contains("_id")) { query.addCriteria(Criteria.where(key).is(new ObjectId(value.toString()))); } else { if (value instanceof Integer || value instanceof Float || value instanceof Double || value instanceof Boolean) { query.addCriteria(Criteria.where(key).is(value)); } else { // 字符串 模糊查询 // i为查询大小写不敏感 query.addCriteria(Criteria.where(key).regex(value.toString(), "i")); } } } protected Query buildQuery(Map<String, Object> paramMap, List<Order> orderList) { Query query = new Query(); if (paramMap != null && paramMap.size() > 0) { for (String key : paramMap.keySet()) { Object value = paramMap.get(key); if (key.contains(this.splitMarker)) {// 处理关联查询的情况 String[] arr = key.split(this.splitMarker); if (arr.length != 2) { continue; } String p1 = arr[0]; String p2 = arr[1]; Class<T> clazz = ReflectUtils.getSuperClassGenricType(getClass()); Field[] fs = this.getAllFields(clazz); // ReflectUtils.getAllFields(clazz); Class<?> clazz1 = null; for (Field f : fs) { if (f.getName().equals(p1)) { clazz1 = f.getType(); break; } } Query query0 = new Query(); this.buildQuery(p2, value, query0); query.addCriteria(Criteria.where(p1).in(mongoOper.find(query0, clazz1))); } else { this.buildQuery(key, value, query); } } } if (orderList != null && orderList.size() > 0) { Sort sort = new Sort(orderList); query.with(sort); } return query; } private Field[] getAllFields(Class<? super T> clazz) { Class<?> originClazz = clazz; Field[] resultField = clazz.getDeclaredFields(); for (; clazz != Object.class; clazz = clazz.getSuperclass()) { if (clazz == originClazz) { continue; } try { Field[] superFields = clazz.getDeclaredFields(); resultField = (Field[]) ArrayUtils.addAll(resultField, superFields); } catch (Exception e) { System.out.println("error"); } } return resultField; } @Override public List<T> findBy(Map<String, Object> paramsMap) { // TODO Auto-generated method stub return null; } @Override public GeneralQuery<T> createGeneralQuery() { // TODO Auto-generated method stub return null; } }
相关文章推荐
- MongoDB入门(6)- 我们自己封装的MongoDB-C#版本
- 将Java中的数组进行二次封装成属于我们自己的数组
- Eclipse平台入门之一:什么是Eclipse,我们将开始介绍Java 开发环境(JDE)。
- J2ME入门学习指南(一)----JAVA版本谈
- Java--对于 class文件进行加密 然后通过我们自己写的类加载器进行加载指定类
- Mongodb快速入门之使用Java操作Mongodb
- java -version 发现不是自己安装的jdk 版本
- 你知道java每一个版本都有自己的名字吗?
- JAVA封装Mongodb操作之一:MongoRepository
- Mongodb快速入门之使用Java操作Mongodb
- MongoDB安装以及java开发入门<二>
- 【java】自己封装的httpHelper访问类及其相关联的类 访问http
- 自己封装了一个Java数据库访问管理类
- Java Tutorial(Java操作MongoDB入门)
- java中的Object、封装类(J2SE入门8)
- Java中如何封装自己的类,建立并使用自己的类库?
- mapxtreme java 版本分布式部署。自己的应用和mapxtreme渲染器不在同一台机器上
- 高性能服务器架构之路-MongoDB(一):MongoDB快速入门(java版)(草稿)
- MongoDB入门简介 java
- Mongodb快速入门之使用Java操作Mongodb