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 ...
随机推荐
- Warm myself by my hand
周末的尾巴了. 前几天白日里的气温降到10摄氏度以下,穿上了秋裤.隔天跑一次步,晚上九点多,5公里,25分钟左右.换上薄薄的运动裤,两件运动衣.一出宿舍门就没觉得冷,跑着跑着就愈加热了起来.遇到的问题 ...
- Spark机器学习· 实时机器学习
Spark机器学习 1 在线学习 模型随着接收的新消息,不断更新自己:而不是像离线训练一次次重新训练. 2 Spark Streaming 离散化流(DStream) 输入源:Akka actors. ...
- plain framework 1 1.0.3更新 优化编译部分、网络压缩和加密
有些东西总是姗姗来迟,就好比这新年的钟声,我们盼望着新年同时也不太旧的一年过去.每当这个时候,我们都会总结一下在过去的一年中我们收获了什么,再计划新的一年我们要实现什么.PF并不是一个十分优秀的框架, ...
- jquery的bind跟on绑定事件的区别
jquery的bind跟on绑定事件的区别:主要是事件冒泡: jquery文档中bind和on函数绑定事件的用法: .bind(events [,eventData], handler) .on(ev ...
- 【转】BAT 批处理脚本 教程
第一章 批处理基础第一节 常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以在 ...
- [LeetCode] Multiply Strings 字符串相乘
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...
- ElasticSearch第二步-CRUD之Sense
ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...
- 递推 hdu 1330
http://www.cnblogs.com/rainydays/archive/2013/01/16/2862235.html 看样例的答案 #include<stdio.h> #inc ...
- jdbc读取数据库,表相关信息(含注释)
读取数据库中的所有的表名 private Set<String> getTableNameByCon(Connection con) { Set<String> set = n ...
- 关于pc端直播
写这篇文章首先是想给自己一个总结.整理,还有就是给那些 没有特别明白直播是怎么回事的人一点 思路 最近公司想要做pc端直播,作为一个自认为很菜的前端实在是不知从何下手,所以只能用国人最爱的百度,搜索了 ...