Orm 常见查询实例
一、Moon.Orm框架总述 (您还用hibernate?实体框架?)
1.框架名:Moon 意思是月亮,而非Mono.因为很喜欢明月,所以以此为名.它是一个.NET下的Orm框架.
2.发展历史:历经近乎三年的发展历程,起因是EF框架的起初性能原因,为项目实战而生.
3.项目经验:经过数家公司项目实战、以及众多用户的肯定.
Moon.Orm的追求方向:
1)高性能.
连接地址:Moon洗冤录
2)易用性强
3)多数据库多数据源支持
如果您需要换数据库:直接修改配置文件然后一键生成实体层即可;
如果您需要多数据库:直接添加配置文件即可.详情:Moon使用配置说明
4)智能感知
这个不用讲了,值得一提的是MQL,她能够为你提供强大的智能感知功能,并且无数据库类型差异.
详情:MQL无linq化的战役
5).NET 2.0原生支持.
有人问:为什么没有LINQ、lambda,其实我只想说:没有必要做这些了,因为微软一个团队在做实体框架,去做一些不必要的事情,
真的没有意思. 觉得MQL复杂的兄弟们,有了智能感知,你们就适应适应,因为这是萝卜白菜的问题.
6) 使用便捷.
这个其实上面的链接也谈到,详情见:http://www.cnblogs.com/humble/p/3293500.html
二、Moon.Orm的功能预览
2.MQL查询分类讲解
2.1 MQL的标准查询
Where(ClassSet.ClassName.Contains("s").And(ClassSet.ClassID.BiggerThan(9)));
@p1=%s%
@p2=9
2.2 MQL的嵌套查询(含有Top查询:支持mysql、oracle、postgreSQL、sqlserver、sqlite)
ScoreSet.UserID.In(UserSet.Select(UserSet.UserID).Where(
UserSet.ClassID.In(
ClassSet.Select(ClassSet.ClassID).Where(
ClassSet.ClassName.Equal(c.ClassName).And(ClassSet.ClassID.BiggerThan(0))
)
)
)
)
).Top(1);
@p1=综合测试ClassName2
@p2=0
2.3 MQL的分组查询
Where(ScoreSet.ScoreM.BiggerThanOrEqual(100)).
GroupBy(ScoreSet.TypeName).
Having(ScoreSet.ScoreM.Sum().BiggerThan(300));
@p1=100
@p2=300
2.4 MQL的连接查询
.LeftJoin(
UserSet.Select(UserSet.UserID))
.ON(ClassSet.ClassID.Equal(UserSet.UserID))
.Where(UserSet.UserID.BiggerThan(9));
@p1=9
2.5 MQL的Union查询
.Union(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2)));
.UnionAll(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2)));
@p1=1
@p2=2
@p1=1
@p2=2
3.MQL查询结果预览
{
using (var db=Db.CreateDefaultDb()) {
db.TransactionEnabled=true;
db.DebugEnabled=true;
Console.WriteLine("---------------嵌套查询---------------------");
var qiantao=ScoreSet.SelectAll().Where(
ScoreSet.UserID.In(UserSet.Select(UserSet.UserID).Where(
UserSet.ClassID.In(
ClassSet.Select(ClassSet.ClassID).Where(
ClassSet.ClassName.Equal(c.ClassName).And(ClassSet.ClassID.BiggerThan(0))
)
)
)
)
).Top(1);
Console.WriteLine("---------------分组查询---------------------");
var mql=ScoreSet.Select(ScoreSet.ScoreM.Sum().AS("sum"),ScoreSet.TypeName).Where(ScoreSet.ScoreM.BiggerThanOrEqual(100)).GroupBy(ScoreSet.TypeName).Having(ScoreSet.ScoreM.Sum().BiggerThan(300));
Console.WriteLine("---------------连接查询---------------------");
var m1=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName)
.LeftJoin(
UserSet.Select(UserSet.UserID))
.ON(ClassSet.ClassID.Equal(UserSet.UserID))
.Where(UserSet.UserID.BiggerThan(9));
}
Console.WriteLine("---------------Union测试---------------------");
using (var db=Db.CreateDefaultDb()) {
db.TransactionEnabled=true;
db.DebugEnabled=true;
var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))
.Union(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2)));
}
三、Moon.Orm的开源发布
1)Moon.Orm 5.0之前的版本以(LGPL)开源发布
2)之后的版本步步开源,对于参与者提供源代码.
当然您可以资金支持.十块钱那也是支持,请注明,您的邮箱地址.
5.0社区版代码生成器下载:http://www.cnblogs.com/humble/p/3312018.html
四、Moon.Orm的技术文档
如果您喜欢它,请推荐支持一下吧:)
待续