mongodb 的 scala 驱动 -> casbah

原创 2015年07月09日 22:35:00

github地址: github.com/1178615156/service

要引的包: “org.mongodb” %% “casbah” % “2.8.1”
web 框架:play
随手封装了下
基本思路:在MongoDao 中实现 镇上查改功能,需要一个隐式参数 用于将 entity 与 DBObject 进行互转
代码
MongoDao—

/**
 * 基于casbah 实现的一个mongo dao
 * @tparam _Value entity value type
 */
abstract class MongoDao[_Value:ClassTag]
{
  type Value =_Value
  import com.mongodb.casbah.Imports._

  /**
   * 链接 mongo 
   */
  lazy val mongoClient  = MongoClient(MongoClientURI.apply(mongoUrl))
  lazy val db           = mongoClient(dbName)
  lazy val collection   = db.getCollection(collectionName)

  //子类可重写
  def mongoUrl:String="mongodb://localhost:27017"
  //子类可重写
  def dbName:String="testdb"

  //在mongo中对应的集合名
  //由子类重写
  def collectionName:String

  /**
   * 查询功能
   * @param mongoDBObject 查询条件
   * @return list 如果 无数据则 list 为 Nil
   */
  def find(mongoDBObject:MongoDBObject=MongoDBObject.empty,
           findParameter: FindParameter=FindParameter.default
            )(implicit read:DBObject=>_Value): List[_Value] ={
    this.collection.
      find(mongoDBObject).
      skip(findParameter.page).limit(findParameter.size).toArray.map(read).toList
  }

  /**
   * 通过Id从数据库中获取对象
   * @param id 查询Id
   * @param read
   * @return
   */
  def getById(id:String)(implicit read:DBObject=>_Value): Option[_Value] =
    this.find(createId(id)).headOption
  /**
   * find 辅助函数
   * @param read
   * @return
   */
  def list(findParameter: FindParameter=FindParameter.default
            )(implicit read:DBObject=>_Value): List[_Value] =
    this.find(findParameter=findParameter)(read)

  /**
   * 保存对象到数据库
   * @param value
   * @param write
   * @return success or failed
   */
  def add(value: _Value)(implicit write:_Value=>DBObject): Try[_Value] ={
    Try{
      this.collection.insert(write(value))
      value
    }
  }

  /**
   *
   * @param id
   * @param read
   * @return
   */
  def remove(id:String)(implicit read:DBObject=>_Value): Try[Option[_Value]] ={
    Try{
      val value=this.find(createId(id)).headOption
      this.collection.remove(createId(id))
      value
    }
  }

  protected def createId(id:String)=MongoDBObject("_id"->new ObjectId(id))
}

MongoImplicitDBObject–

/**
 * 用于将entity 与 DBObject 互转的 工具类
 * @tparam _Value entity value type
 */
class MongoImplicitDBObject[_Value<:EntityId:ClassTag]{
  implicit def EntityToMongoDBObject(entity: _Value): DBObject ={
    if (entity.id isEmpty)
      entity.id=new ObjectId().toString
    val a: Map[String, Any] = entity.ObjToJson.JsonToMap
    val id=a.getOrElse("id","").asInstanceOf[String]
    DBObject(a.-("id").+("_id"->new ObjectId(id)).toList)
  }

  implicit def MongoDBObjectToEntity(dBObject: DBObject): _Value ={
    if (dBObject==null)
      null.asInstanceOf[_Value]
    else{
      val id = dBObject._id.getOrElse("").toString
      dBObject.removeField("_id")
      val a: _Value =dBObject.toString.JsonToObj[_Value]
      a.id=id
      a
    }

  }
  implicit def MongoDBObjectToEntityOpt(dBObject: DBObject): Option[_Value]=
    if (dBObject==null)
      None
    else
      Some(MongoDBObjectToEntity(dBObject))


  def write(entity: _Value): DBObject =EntityToMongoDBObject(entity)
  def read(dBObject: DBObject): _Value =MongoDBObjectToEntity(dBObject)
}

EntityTest

case class EntityTest(
                       @BeanProperty var name:String=""
                       ) extends EntityId
object EntityTest extends MongoImplicitDBObject[EntityTest]

相关文章推荐

Scala连接mongodb数据库

mongodb是一种面向文档的数据库,Scala是一种函数式编程语言,由于项目的关系,需要使用Scala连接mongodb数据库。下面介绍具体的方法。 就像Java连接MySQL数据库需要JDBC一...

play+mongodb+scala的项目搭建

创建Play项目后配置sbt,导入reactiveMongodb:name := """play-scala"""version := "1.0-SNAPSHOT"scalaVersion := "2...

第90讲:基于Scala的Actor之上的分布式并发消息驱动框架Akka初体验学习笔记

第90讲:基于Scala的Actor之上的分布式并发消息驱动框架Akka初体验学习笔记 akka在业界使用非常广泛 spark背后就是由akka驱动的 要写消息驱动的编程模型都首推akka 下...
  • slq1023
  • slq1023
  • 2015年08月20日 21:01
  • 873

mongodb-java-driver-3.5.0.jar最新驱动包

  • 2017年11月10日 15:44
  • 5.42MB
  • 下载

mongodb必用驱动包

  • 2015年06月04日 17:24
  • 409KB
  • 下载

mongodb的java驱动与spring的整合

见蛮多人搜java和Mongodb,那就再写点java操作Mongodb的项目心得。Mongodb的java驱动基本操作可看这里。 其实Mongodb的java驱动可以完成大部分的操作和需求。但...
  • Yahuvi
  • Yahuvi
  • 2012年08月11日 10:08
  • 1314

mongodb的PHP驱动资源

  • 2016年03月22日 11:26
  • 59B
  • 下载

vs2005的mongodb驱动

  • 2011年10月26日 19:53
  • 141KB
  • 下载

MongoDB 3.4版本, C# 驱动 2.4 操作

//数据库连接字符串 #region //获取表对象 IMongoCollection tb = db.GetCollecti...

mongodb驱动PHP版

  • 2015年01月30日 16:09
  • 2.44MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mongodb 的 scala 驱动 -> casbah
举报原因:
原因补充:

(最多只允许输入30个字)