持久层添加对MangoDB数据库的支持

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CJCMS.Data;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using MongoDB.Driver.GridFS;
using MongoDB.Driver.Linq;
using System.Linq.Expressions; namespace CJCMS.Data
{
public class MangoDBRepository<T> : IRepository<T> where T : IEntity
{ MongoCollection<T> _session = null; public MangoDBRepository()
{
//读配置
string connectionString = "mongodb://localhost"; MongoClient client = new MongoClient(connectionString); var server = client.GetServer(); //读配置
var database = server.GetDatabase("test"); //获取T的名称
_session = database.GetCollection<T>("tableName");
} public void Add(T entity)
{
_session.Insert(entity);
} public IQueryable<T> Table { get { return _session.AsQueryable<T>(); } } public void Update(T entity)
{
_session.Save(entity);
} public void Save(T entity)
{
_session.Save(entity);
} public void Delete(T entity)
{
var query = Query<T>.EQ(e => e.Id, entity.Id);
_session.Remove(query);
} public void Delete(string id)
{
var query = Query<T>.EQ(e => e.Id, id);
_session.Remove(query);
} public T GetByKey(string id)
{
var query = Query<T>.EQ(e => e.Id, id);
T t = _session.FindOneAs<T>(query);
return t;
} public int Count(Expression<Func<T, bool>> predicate)
{
return Table.Count(predicate);
} private IQueryable<T> FetchQuery(Expression<Func<T, bool>> predicate)
{
return Table.Where(predicate);
} private IQueryable<T> FetchQuery(Expression<Func<T, bool>> predicate, Action<Orderable<T>> order, out string OrderName)
{
var orderable = new Orderable<T>(FetchQuery(predicate));
order(orderable);
OrderName = orderable.OrderName;
return orderable.Queryable;
} public IList<T> Fetch(Expression<Func<T, bool>> predicate)
{
object t = null; if (t == null)
{
t = FetchQuery(predicate).ToList();
return (IList<T>)t;
}
else
{
return (IList<T>)t;
}
} public IList<T> Fetch(Expression<Func<T, bool>> predicate, Action<Orderable<T>> order)
{
object t = null;
string key = string.Empty;
IQueryable<T> q = FetchQuery(predicate, order, out key);
if (t == null)
{
t = q.ToList();
return (IList<T>)t;
}
else
{
q = null;
return (IList<T>)t;
}
} public IList<T> Fetch(Expression<Func<T, bool>> predicate, Action<Orderable<T>> order, int index, int count)
{
object t = null;
string key = string.Empty;
IQueryable<T> q = FetchQuery(predicate, order, out key); if (t == null)
{
t = q.Skip(index * count).Take(count).ToList(); return (IList<T>)t;
}
else
{
q = null;
return (IList<T>)t;
}
} public void Persist()
{ }
}
}

CJCMS系列--持久层对MangoDB的支持的更多相关文章

  1. Spring集成MyBatis持久层框架

    一.MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,可以使用简单的XML ...

  2. MyBatis 是一款优秀的持久层框架

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...

  3. Mybatis详解系列(一)--持久层框架解决了什么及如何使用Mybatis

    简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository ...

  4. 对spring 对持久层的支持和数据库连接池的理解

    1.spring对持久层的支持在于,得到数据库连接之后操作上的封装,将操作简化了.也就是说以后操作sql语句就用XXXTemplate(就是一个工具类)对象了. 2.数据库连接池的作用只在于得到数据库 ...

  5. MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...

  6. MyBatis知多少(7)持久层

    持久层是适合使用MyBatis的地方.在面向对象的系统中,持久层主要关注对象(或者更精确地说应该是存储在那些对象中的数据)的存取.在企业应用程序中持久层通常用关系数据库系统来存储数据,虽然某些情况下其 ...

  7. .NET平台下,关于数据持久层框架

    在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...

  8. .NET开源项目介绍及资源推荐:数据持久层

    在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...

  9. MyBatis持久层框架学习之01 MyBatis的起源和发展

    一.MyBatis的简介  MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.    MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyB ...

随机推荐

  1. [游戏开发-学习笔记]菜鸟慢慢飞(九)- NGUI- UIWidget(官方说明翻译)

  2. 第三方Android 模拟器流畅速度快,适合开发人员

    “工欲善其事,必先利其器.” 使用Android模拟器开发和调试应用肯定比使用真机方便.但相比XCODE的IOS模拟器,Android SDK自带的AVD实在不争气,不过一些第三方的模拟器却表现不俗! ...

  3. linux-虚拟机centos6.5安装tools

    1.在VMWare选VM -> Install VMWare Tools-,就会在桌面出现VMWare Tools图示让你安裝 2.进入CentOS桌面后,将光盘打开,看到了VMWareTool ...

  4. hibernate三种状态

    转自:http://www.cnblogs.com/xiaoluo501395377/p/3380270.html 学过hibernate的人都可能都知道hibernate有三种状态,transien ...

  5. [No00008D]腾讯通RTX联系方式批量获取

    公司用的RTX让我一直很不爽,QQ比RTX好多少为啥不让用,微信都有企业版了为啥还用腾讯通?终于今天发现唯一的好处是可以从服务器上拉公司妹子们的联系方式!!当然,我要这些联系方式,只是为了联tiao系 ...

  6. java socket收发http协议内容

    来自:https://www.oschina.net/code/snippet_2009881_48232 import java.io.BufferedReader; import java.io. ...

  7. SpringMVC(四) RequestMapping请求方式

    常见的Rest API的Get和POST的测试参考代码如下,其中web.xml和Springmvc的配置文件参考HelloWorld测试代码中的配置. 控制类的代码如下: package com.ti ...

  8. [LeetCode] Count Complete Tree Nodes 求完全二叉树的节点个数

    Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from W ...

  9. 抱歉!15:44-16:39阿里云RDS故障造成全站不能正常访问

    非常非常抱歉!2016年3月7日15:44-16:39,由于阿里云RDS(云数据库)故障,造成全站不能正常访问,给您带来了很大很大的麻烦,恳请您的谅解! 故障是在15:44开始出现的,应用日志中出现大 ...

  10. 佛祖保佑 永无bug

    /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : | ...