- 浏览: 290775 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
Mo-康少:
感谢
eclipse安装freemarker插件 -
cmy0:
非常受用,感謝
eclipse安装freemarker插件 -
liuyuanhui0301:
RTMP 简介 -
xa_zbl:
最后没有采用这种方法,发现原因出在jquery1.7和vali ...
jQuery的validate 在ie9和火狐下能用 在ie8下无效解决方法。 -
woshixushigang:
你好,我也遇到jquery vaidate 再ie下失效问题, ...
jQuery的validate 在ie9和火狐下能用 在ie8下无效解决方法。
Introduction(简介)
Query接口是个相当直接的方法。他允许非常确切的过滤方式(基于属性),排序,一个偏移和限制返回结果的数量。
query实现也实现了QueryResults接口,此接口允许在查询中访问结果。
Filter(过滤)
一般的.filter(criteria, value)语法被支持。标准语法是属性名和操作("field > ", or "field in")的整合。所有的语法被逻辑"and" 暗暗的联系在一起。
1
|
Datastore ds = ...
|
2
|
Query q = ds.createQuery(MyEntity.
class
).filter(
"foo >"
,
12
);
|
3
|
Datastore ds = ... Query q = ds.createQuery(MyEntity.
class
).filter(
"foo >"
,
12
);
|
查询foo在12和30之间的实体对象,的方法如下:
1
|
Datastore ds = ...
|
2
|
3
|
Query q = ds.createQuery(MyEntity.
class
).filter(
"foo >"
,
12
).filter(
"foo <"
,
30
);
|
4
|
Datastore ds = ... Query q = ds.createQuery(MyEntity.
class
).filter(
"foo >"
,
12
).filter(
"foo <"
,
30
);
|
Operators(操作符)
操作符被用在fileter(...)和MongoDB的查询操作紧密的匹配。
operator |
mongo op |
= | $eq |
!=, <> | $ne |
>,<,>=,<= | $gt,$lt,$gte,$lte |
in | $in |
nin | $nin |
elem | $elemMatch |
exists | $exists |
all | $all |
size | $size |
... | ... |
操作符被用在fileter(...)和MongoDB的查询操作紧密的匹配。
operator |
mongo op |
= | $eq |
!=, <> | $ne |
>,<,>=,<= | $gt,$lt,$gte,$lte |
in | $in |
nin | $nin |
elem | $elemMatch |
exists | $exists |
all | $all |
size | $size |
... | ... |
Fluent Interface
沿着.filter(...)方法,这里有个流水型的方法。这些提供一个非常已读的格式。
fluent 接口以field(name)开始。接着一下任何一个方法都可以添加到这个格式中,
-
1
Query q = ds.createQuery(MyEntity.
class
).field(
"foo"
).equal(
1
);
2
3
q.field(
"bar"
).greaterThan(
12
);
4
q.field(
"bar"
).lessThan(
40
);
Methods(方法)
method | operation | comment |
exists | $exists | |
doesNotExist | $exists | |
greaterThan,greatherThanOrEq,lessThan,lessThanOrEe | $gt,$gte,$lt,$lte | |
equal,notEqual | $eq, $ne | |
hasThisOne | $eq | |
hasAllOf | $all | |
hasAnyOf | $in | |
hasNoneOf | $nin | |
hasThisElement | $elemMatch | |
sizeEq | $size |
Geo-spatial
所有的geo-spatial方法都被分解为"near, 和within"。所有的near查询将会产生结果,按远程和最近的结果。
下面的方法接受一个球形的最后参数,表名他们是否应该使用$sphere选项。
near(x, y) | $near | |
near(x, y, r) | $near | (w/maxDistance of r) |
within(x, y, r) | $within + $center | |
within(x1, y1, x2, y2) | $within + $box |
-
01
@Entity
02
static
private
class
Place {
03
@Id
protected
ObjectId id;
04
protected
String name =
""
;
05
@Indexed
(IndexDirection.GEO2D)
06
protected
double
[] loc =
null
;
07
08
public
Place(String name,
double
[] loc) {
09
this
.name = name;
10
this
.loc = loc; }
11
12
private
Place() {}
13
}
14
15
Place place1 =
new
Place(
"place1"
,
new
double
[] {
1
,
1
});
16
ds.save(place1);
17
18
Place found = ds.find(Place.
class
).field(
"loc"
).near(, ).get();
Or
使用流式查询接口时你也可以像一下这样使用"or"查询
-
1
Query<Person> q = ad.createQuery(Person.
class
);
2
q.or(
3
q.criteria(
"firstName"
).equal(
"scott"
),
4
q.criteria(
"lastName"
).equal(
"scott"
)
5
);
Fields
属性名也可以像在本地MongoDB查询中那样使用"."标识
-
1
Query q = ds.createQuery(Person.
class
).field(
"addresses.city"
).equal(
"San Francisco"
);
2
//or with filter, or with this helper method
3
Query q = ds.find(Person.
class
,
"addresses.city"
,
"San Francisco"
);
Validation(验证)
验证被应用在属性名,和数据类型上。如果在查询中使用的属性名在指定的java类中没有找到将会抛出一个异常。如果一个属性名被“.”标识连接,那么这个表达式的每个
部分都将会在指定的java对象中进行验证(有一个异常Map来记录那个属性 名被跳过)。
数据类型问题(比较属性类型和参数类型)作为警告被记录,由于服务器可能会把数据强制转换,或者你发送意思不那么的有意义;服务器使用字节表示一些参数,所以有些类型
不同的数值也可以匹配(例如数字)。
Disabling validation(是验证无效)
通过调用disableValidation()可以使验证变为无效,在开始等于查询或每个查询语句上。
1
|
Datastore ds = ...
|
2
|
Query q = ds.createQuery(MyEntity.
class
).disableValidation();
|
3
|
|
4
|
//or it can be disabled for just one filter
|
5
|
|
6
|
Query q = ds.createQuery(MyEntity.
class
).disableValidation().filter(
"someOldField"
, value).enableValidation().filter(
"realField"
, otherVal);
|
Sort(排序)
你可以通过一个或多个属性名对结果进行升序或降序排序
1
|
Datastore ds = ...
|
2
|
Query q = ds.createQuery(MyEntity.
class
).filter(
"foo >"
,
12
).order(
"dateAdded"
);
|
3
|
...
// desc order
|
4
|
Query q = ds.createQuery(MyEntity.
class
).filter(
"foo >"
,
12
).order(
"-dateAdded"
);
|
5
|
...
// asc dateAdded, desc foo
|
6
|
Query q = ds.createQuery(MyEntity.
class
).filter(
"foo >"
,
12
).order(
"dateAdded, -foo"
);
|
Offset(skip)
你可以通过在查询是指定一个偏移值是服务器跳过一些记录元素。这将比使用几个属性的范围进行查询要低效的多。如下所示:
1
|
Datastore ds = ...
|
2
|
Query q = ds.createQuery(MyEntity.
class
).filter(
"foo >"
,
12
).offset(
1000
);
|
Ignoring Fields(忽略属性)
MongoDB也支持只返回一些属性。这在应用中显得有点奇怪,但是这个在修剪掉一部分嵌套时是非常有用的方法。这将会导致局部实体对象,应该不慎重使用,如果可以的话。
01
Datastore ds = ...
02
MyEntity e = ds.createQuery(MyEntity.
class
).retrievedFields(
true
,
"foo"
).get();
03
04
val = e.getFoo();
// only field returned
05
06
...
07
08
MyEntity e = ds.createQuery(MyEntity.
class
).retrievedFields(
false
,
"foo"
).get();
09
10
val = e.getFoo();
// only field not returned
11
Datastore ds = ... MyEntity e = ds.createQuery(MyEntity.
class
).retrievedFields(
true
,
"foo"
).get(); val = e.getFoo();
//
only field returned ... MyEntity e =
ds.createQuery(MyEntity.class).retrievedFields(false, "foo").get(); val =
e.getFoo(); // only field not returned
仅仅访问QueryResults的一个方法就可以返回你的数据。没有一个方法会影响Query。他们将会单独的离开Query,因此你可以继续通过调用相应的方法来获取你想要的数据。
get() | 返回第一个Entity,--使用limit(1) |
asList() | 以一个集合的方式返回所有的结果项, 如果一个大的数据结果将会付出代价 |
fetch() | 明确的返回一个Iterable实例 |
asKeyList() | 以List的方式返回所有数据项的Key<T> ---仅仅在服务器中得到ID属性 |
fetchEmptyEntities() | 仅仅想fetch()方法,但是使用id属性填充 |
01
Datastore ds = ...
02
Query q = ds.createQuery(MyEntity.
class
).filter(
"foo >"
,
12
);
03
04
//single entity
05
MyEntity e = q.get();
06
07
e = q.sort(
"foo"
).get();
08
09
//for
10
for
(MyEntity e : q)
11
print(e);
12
13
//list
14
List<MyEntity> entities = q.asList()
发表评论
-
net.sf.ezmorph.bean.MorphDynaBean cannotbe cast to xxx
2016-09-30 10:36 1041net.sf.ezmorph.bean.MorphDynaBe ... -
内连接 外连接 交叉连接 笛卡尔积
2016-07-25 11:45 686首先划分一下,连接分为三种:内连接、外连接、交叉连接 ... -
MySQL数据类型DECIMAL
2016-02-23 10:28 704DECIMAL 类型不同于FLOAT ... -
ibatis 批量删除数据
2013-08-29 17:38 2792<delete id="deleteMem ... -
使用 apache common dbcp +common pool+mysql连接无效的问题
2012-11-28 11:51 989Throwable occurred: org.sprin ... -
100多个数据据表字段说明(二)
2011-11-03 16:52 1848messageid 信息ID userid 用 ... -
100多个数据据表字段说明
2011-11-03 15:57 3187第一个表_admin (管理 ... -
浅谈char,Varchar,NVarchar的区别
2010-04-14 17:45 1291这3种字符串数据类型是 ... -
[转贴]hsql数据库入门
2010-03-18 15:07 1241前言:该文章只是简单 ... -
关于数据库获取数据出现java.sql.SQLException: Underlying input stream returned zero bytes
2009-10-28 14:40 1304出现如题的异常: 原因是text类型字段在作怪.因为数据表中 ... -
Mysql5.0中文乱码问题解决方案
2009-04-15 23:17 1977需注意以下三点: 1、创建数据库的时候:CREATE DAT ... -
如何把SQLSERVER里表里的数据导出成为insertinto脚本
2008-12-01 03:15 1580新建如下的存储过程:(执行该存储过程会生成一条查询语句,执行查 ... -
Oracle中的大字段 Blob/Clob
2008-05-28 12:29 5157数据库中提供了两种字段类型 Blob 和 Clob 用于存 ... -
连接池的应用
2008-05-22 01:04 1164连接池:初始化(建立)一些连接,常驻内存,用的时候向连接池要, ...
相关推荐
例如,`mongox-main`可能是一个MongoDB ORM框架的核心库或者项目主文件,包含了框架的主要功能和接口。开发者可以通过导入和初始化这个库,然后利用其提供的API进行数据库操作。例如,创建一个新的模型、执行查询、...
在Java开发中,Morphia是一个优秀的对象数据映射(ODM)框架,它简化了与MongoDB之间的交互,使得开发者可以像操作传统关系型数据库那样操作文档数据库。本文将深入探讨如何使用Morphia框架来操作MongoDB。 首先,...
在本文中,我们将探讨MongoDB的ORM框架Morphia,并结合Spring Data MongoDB的使用来创建一个集成应用。ORM(对象关系映射)框架是将数据库操作转化为对象模型的方法,简化了开发过程,使得开发者可以专注于业务逻辑...
mongodb-orm简介Mongodb ORM是基于java的ORM框架,简化了SDK的使用,使代码变得更清晰、简单。 与Ibatis类似,将查询、执行语句封装在xml中,与代码隔离。简称MQL。 项目中使用加入mongodb orm的支持包1. 添加jar...
在传统的SQL世界里,ORM框架如Hibernate简化了与数据库的交互,而在NoSQL领域,Morphia扮演着相同的角色,使得开发者能够以面向对象的方式操作MongoDB数据,而无需直接编写低级的MongoDB查询语言。 **1. MongoDB和...
MongoDB的ORM(Object-Relational Mapping)框架使得Java开发者能够更方便地将数据模型与数据库交互,而无需关注底层的MongoDB API细节。在本文中,我们将讨论如何基于`mongodb-driver`开发一个简单的ORM实现,以...
这个压缩包“基于mongodb官方Java驱动的orm框架,允许子类嵌套.zip”显然是一个ORM(对象关系映射)框架,旨在简化Java应用与MongoDB之间的数据操作,特别是支持子类的嵌套结构。 ORM框架允许开发者用面向对象的...
后续提交放在https://github.com/zdsiyan/watermelon 上, 用eclipse导入该工程需安装m2eclipse,jetty等查件. 另外.settings下的org.eclipse.wst.common.component文件如下: ...</project-modules>
Morphia 是一个 Java 框架,它为 MongoDB 提供了对象数据映射(Object Data Mapping,简称 ODM)功能,使得开发者可以更方便地在 Java 对象与 MongoDB 文档之间进行转换。本篇文章将详细介绍如何使用 Morphia 和 ...
在企业级应用开发中,数据持久化是必不可少的一部分,ORM(Object-Relational Mapping)框架则解决了对象与关系数据库之间的映射问题,使得开发更加便捷。Spring 提供了对多种 ORM 框架的集成支持,如 Hibernate、...
Spring Data MongoDB提供了Repository接口,通过该接口可以方便地执行增删改查等操作,无需编写大量的DAO层代码。 **整合流程** 1. **配置环境**:首先,需要在项目中引入SpringMVC、Shiro和MongoDB的相关依赖,...
标题"mongodb-orm-master"可能是指一个MongoDB的ORM框架或库,用于简化和优化对MongoDB数据库的访问。这个项目可能是为了提供一个高效、易用的接口,使得开发者在使用MongoDB时可以更加专注于业务逻辑,而不是数据库...
尽管未明确指出,但Node.js社区中有许多其他流行的ORM选项,如TypeORM(适用于TypeScript),Mongoose(针对MongoDB),或者Objection.js等。每个框架都有其独特的特性和优势,比如Mongoose提供了强大的Schema和...
在IT行业中,Spring框架是Java开发者的首选工具之一,它为构建企业级应用程序提供了全面的解决方案。MongoDB则是一款流行的NoSQL数据库系统,适合处理大量非结构化数据。Morphia是Google开发的一个用于Java的MongoDB...
Morphia 是一个 Java ORM(对象关系映射)库,用于简化 MongoDB 的数据操作,将数据模型与数据库文档之间的转换自动化。在本文中,我们将深入探讨如何使用 Morphia 进行 MongoDB 的操作。 首先,为了在 Java 项目中...
Iridium尝试采用一种难以置信的轻量级实现,而不是采用Mongoose和其朋友之类的ODM经常喜欢的“重新实现一切”方法,而是要求您学习全新的API并将您锁定为特定的编码样式,当您想做任何更复杂的事情时,它会变得很...
这个接口可能包含了连接MongoDB数据库、执行查询、插入数据、更新数据以及删除数据等方法。 例如,接口可能包含以下方法: ```java public interface IMongoJDBCUtilCJB { void connect(String connectionString, ...
Morphia是针对MongoDB的一个Java持久层框架,它提供了简单易用的API,使得开发者能够方便地在Java应用程序中操作MongoDB数据库。 【Morphia的安装与配置】 要在Java项目中使用Morphia,首先需要下载MongoDB的Java...
该项目是基于MyBatisPlus模式的MongoDB操作框架设计源码,总计315个文件,其中包括299个Java源文件、5个XML配置文件、2个Git忽略文件、2个Markdown文档、2个PNG图片文件、1个LICENSE文件以及多个配置文件(包括...