MongoDB+Spring

Stella981
• 阅读 725

Java端要向mongoDB插入java对象时,我用了到morphia开源组件。官网:code.google.com/p/morphia

 只写了DAO层的java代码,能够满足常用的增、删、改、查、分页等操作。

db.properties配置文件:

 db.host=localhost //主机地址
 db.port=27017      //端口(默认)
 app.db.name=app   //数据库名

Spring配置文件:

 <context:property-placeholder location="classpath:db.properties" />

 
  
  
 

 
 
 
  
  
  
 

DAO代码:

package com.my.dao;

import java.util.List;
import java.util.regex.Pattern;

import org.bson.types.ObjectId;

import com.google.code.morphia.Datastore;
import com.google.code.morphia.Morphia;
import com.google.code.morphia.dao.BasicDAO;
import com.google.code.morphia.query.Query;
import com.mongodb.Mongo;
import com.my.entity.BaseEntity;
import com.my.page.Page;

public class BaseDao extends BasicDAO<BaseEntity, ObjectId> {
 private Datastore dt;

 protected BaseDao(Mongo mongo, Morphia morphia, String dbName) {
  super(mongo, morphia, dbName);
  dt = morphia.createDatastore(mongo, dbName);
 }

 
 public void save(Object entity) {
  dt.save(entity);
 }

 
 @SuppressWarnings("unchecked")
 public List findAll(Class clazz) {
  return dt.find(clazz).asList();
 }

 
 @SuppressWarnings( { "unchecked" })
 public List findByNameFuzzyQuery(Class clazz, String title, Object value) {
  Query query = dt.createQuery(clazz);
  // Pattern pattern = Pattern.compile("^.*" + key +
  // ".*$",Pattern.CASE_INSENSITIVE);
  Pattern pattern = Pattern.compile(value.toString(),
    Pattern.CASE_INSENSITIVE);
  query.filter(title, pattern);
  return query.asList();
 }

 
 @SuppressWarnings("unchecked")
 public List findByName(Class clazz, String title, Object value) {
  Query query = dt.createQuery(clazz);
  query.filter(title, value);
  return query.asList();
 }

 
 @SuppressWarnings("unchecked")
 public List findById(Class clazz, Object id) {
  Query query = dt.createQuery(clazz);
  query.filter("_id", id);
  return query.asList();
 }

 
 @SuppressWarnings("unchecked")
 protected Query createNameQuery(Class clazz,String title, Object value) {
  return (Query) dt.createQuery(clazz).field(title).equal(value);
 }

 
 @SuppressWarnings("unchecked")
 protected Query createQuery(Class clazz){
  return dt.createQuery(clazz);
 }
 
 public void update(Object object) {
  dt.save(object);
 }

 
 @SuppressWarnings("unchecked")
 public void deleteAll(Class clazz) {
  Query query = this.createQuery(clazz);
  dt.delete(query);
 }

 
 @SuppressWarnings("unchecked")
 public void deleteByName(Class clazz, String title, Object value) {
  Query query = this.createNameQuery(clazz,title, value);
  dt.delete(query);
 }
 
 @SuppressWarnings("unchecked")
 public Query pagingQuery(Class clazz,Page page){
  Query q = this.createQuery(clazz);
  if(page != null){
   q.limit(page.getPageSize()).offset((page.getCurrentPageNo() - 1) * page.getPageSize());
   page.setTotal((int)q.countAll());
  }
  return q;
 }
}

分页用到的Page类:

package com.my.page;

public class Page {
 private int currentPageNo; //当前页数
 private int total;        //总页数
 private int pageSize;     //每页显示条数

 
 // 得到总页数
 public int getTotalPages() {
  if (total == 0)
   return 1;
  return (total + pageSize - 1) / pageSize;
 }

 // 得到第一页页号
 public int getFirstPageNo() {
  return 1;
 }

 // 得到最后一页页号
 public int getLastPageNo() {
  return getTotalPages();
 }

 // 得到上一页页号
 public int getPrePageNo() {
  if (currentPageNo == 1) {
   return 1;
  }
  return currentPageNo - 1;
 }

 // 得到下一页页号
 public int getNextPageNo() {
  if (currentPageNo == getTotalPages()) {
   return currentPageNo;
  }
  return currentPageNo + 1;
 }
 
 public int getCurrentPageNo() {
  return currentPageNo;
 }

 public void setCurrentPageNo(int currentPageNo) {
  this.currentPageNo = currentPageNo;
 }

 public int getTotal() {
  return total;
 }

 public void setTotal(int total) {
  this.total = total;
 }

 public int getPageSize() {
  return pageSize;
 }

 public void setPageSize(int pageSize) {
  this.pageSize = pageSize;
 }

实体类(javaBean):

package com.my.entity;

import java.io.Serializable;
import java.util.Date;

import org.bson.types.ObjectId;

import com.google.code.morphia.annotations.Entity;
import com.google.code.morphia.annotations.Id;

@Entity
//默认是要持久所有对象
public class BaseEntity implements Serializable{
 private static final long serialVersionUID = 1L;
 @Id
 private ObjectId id;
 // @Transient 这个表示不持久
 private String title;  //标题
 private String place;  //地点
 private Date createTime; //创建时间

 public ObjectId getId() {
  return id;
 }

 public void setId(ObjectId id) {
  this.id = id;
 }

 public String getTitle() {
  return title;
 }

 public void setTitle(String title) {
  this.title = title;
 }

 public String getPlace() {
  return place;
 }

 public void setPlace(String place) {
  this.place = place;
 }

 public Date getCreateTime() {
  return createTime;
 }

 public void setCreateTime(Date createTime) {
  this.createTime = createTime;
 }

}

Test类:

import java.util.Date;
import java.util.List;

import org.bson.types.ObjectId;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.google.code.morphia.query.Query;
import com.my.dao.BaseDao;
import com.my.entity.BaseEntity;
import com.my.page.Page;

public class Test {

 public static void main(String[] args) {
  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  BaseDao baseDao = (BaseDao) context.getBean("baseDao");
  
  System.out.println("-------------------");
  
  //添加
//  BaseEntity be = new BaseEntity();
//  be.setTitle("aha");
//  be.setPlace("成都");
//  be.setCreateTime(new Date());
//  try{
//   baseDao.save(be);
//   System.out.println("成功!!!!!!!!!!!!");
//  }catch (Exception e) {
//   e.printStackTrace();
//   System.out.println("失败-------------");
//  }
  
  //查询全部
//  List list = baseDao.findAll(BaseEntity.class);
//  for(BaseEntity be : list){
//   System.out.println(be.getTitle()+" "+be.getPlace()+" "+be.getCreateTime()+" "+be.getId());
//  }
//  System.out.println("*****************");
  //模糊查询和非模糊查询
//  List list = baseDao.findByNameFuzzyQuery(BaseEntity.class, "title","a");
//  List list = baseDao.findByName(BaseEntity.class,"title", "hao");
//  
//  System.out.println(list.size());
//  
//  for(BaseEntity be : list){
//   System.out.println(be.getTitle()+" "+be.getPlace());
//  }
  
  //根据ID查询
//  List list = baseDao.findById(BaseEntity.class, ObjectId.massageToObjectId("4d99992acf8755ee859cbcdb"));
//  for(BaseEntity be : list){
//   System.out.println(be.getId()+" "+be.getTitle());
//  }
  
  //根据自定义进行修改
//  try{
//   List l = baseDao.findByName(BaseEntity.class, "title", "hehehe");
//   if(l.size() == 0){
//    System.out.println("名称不存在..........");
//   }else{
//    for(BaseEntity be : l){
//     be.setTitle("abc");
//     be.setPlace("北京");
//     baseDao.update(be);
//    }
//    
//    System.out.println("成功!!!!!!!!!!!!!!");
//   }
//  }catch (Exception e) {
//   System.out.println(e);
//  }
  
  //分页查询
//  Page p = new Page();
//  p.setCurrentPageNo(1);
//  p.setPageSize(3);
//  
//  Query l = baseDao.pagingQuery(BaseEntity.class, p);
//  for(BaseEntity be : l){
//   System.out.println(be.getTitle()+" "+be.getPlace()+" "+p.getTotal());
//  }

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这