CJCMS系列--持久层对MangoDB的支持
持久层添加对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的支持的更多相关文章
- Spring集成MyBatis持久层框架
一.MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,可以使用简单的XML ...
- MyBatis 是一款优秀的持久层框架
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...
- Mybatis详解系列(一)--持久层框架解决了什么及如何使用Mybatis
简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository ...
- 对spring 对持久层的支持和数据库连接池的理解
1.spring对持久层的支持在于,得到数据库连接之后操作上的封装,将操作简化了.也就是说以后操作sql语句就用XXXTemplate(就是一个工具类)对象了. 2.数据库连接池的作用只在于得到数据库 ...
- MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...
- MyBatis知多少(7)持久层
持久层是适合使用MyBatis的地方.在面向对象的系统中,持久层主要关注对象(或者更精确地说应该是存储在那些对象中的数据)的存取.在企业应用程序中持久层通常用关系数据库系统来存储数据,虽然某些情况下其 ...
- .NET平台下,关于数据持久层框架
在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...
- .NET开源项目介绍及资源推荐:数据持久层
在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...
- MyBatis持久层框架学习之01 MyBatis的起源和发展
一.MyBatis的简介 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyB ...
随机推荐
- node.js express 4.x 安装指南
前几天express 推出了4.0,得知这个消息,自己尝试了一下,突然发现用以前的文档上的操作出现了各种问题.结果只能去看文档,现在在这个给大家分享下4.0版本的安装. 先说下如果需要用express ...
- win10用户文件夹重命名,启用administrator账户,删除文件夹时提示找不到该项目
这一切都源自楼主洁癖一般的强迫症. 楼主在重置win10后的安装过程中用microsoft账户登录的电脑,发现用户文件夹名称怪怪的,于是想重命名一下.楼主发现重命名用户文件夹并不能简单地用F2搞定,于 ...
- Qt 开启鼠标跟踪,自动激活mouseMoveEvent的问题
最近在Qt上实现一个功能,鼠标在图片上移动,触发mouseMoveEvent事件,进而生成一个小的半透明窗口,放大显示以鼠标为中心的一个区域的图像并随鼠标移动.但是,必须鼠标摁下,才触发mouseMo ...
- [LeetCode] Range Sum Query 2D - Mutable 二维区域和检索 - 可变
Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...
- [LeetCode] Shortest Palindrome 最短回文串
Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...
- 【WCF】wcf不支持的返回类型
亲测不支持 DateView 不支持函数重载 参看:http://www.cnblogs.com/zeroone
- linux的常用文件系统格式
文件系统指文件存在的物理空间.在Linux系统中,每个分区都是一个文件系统,都有自己的目录层次结构.Linux的最重要特征之一就是支持多种文件系统,这样它更加灵活,并可以和许多其它种操作系统共存.Vi ...
- git 分支管理
本地主分支提交到远程分支 git push origin master:branch-test 本地分支提交到远程主分支 git push origin branch-test:master 切换分支 ...
- Linux配置JDK1.7和Resin4.0
1.安装JDK1.7 (1)下载 官网下载路径:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-18802 ...
- bzoj1500
1500: [NOI2005]维修数列 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 12544 Solved: 3970[Submit][Statu ...