spring mongodb
来源:互联网 发布:中国气象数据服务网 编辑:程序博客网 时间:2024/05/20 06:29
1
<!-- mongodb spring -->
2
<
dependency
>
3
<
groupId
>org.springframework.data</
groupId
>
4
<
artifactId
>spring-data-mongodb</
artifactId
>
5
<
version
>1.0.0.M5</
version
>
6
</
dependency
>
然后是配置文件
01
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
02
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
03
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:context
=
"http://www.springframework.org/schema/context"
04
xmlns:mongo
=
"http://www.springframework.org/schema/data/mongo"
05
xsi:schemaLocation="http://www.springframework.org/schema/context
06
http://www.springframework.org/schema/context/spring-context-3.0.xsd
07
http://www.springframework.org/schema/data/mongo
08
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
09
http://www.springframework.org/schema/beans
10
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
11
<
context:property-placeholder
location
=
"classpath*:META-INF/mongodb/mongodb.properties"
/>
12
13
<!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,replica-set设置集群副本的ip地址和端口 -->
14
<
mongo:mongo
id
=
"mongo"
replica-set
=
"localhost:27017"
>
15
<!-- 一些连接属性的设置 -->
16
<
mongo:options
17
connections-per-host
=
"${mongo.connectionsPerHost}"
18
threads-allowed-to-block-for-connection-multiplier
=
"${mongo.threadsAllowedToBlockForConnectionMultiplier}"
19
connect-timeout
=
"${mongo.connectTimeout}"
20
max-wait-time
=
"${mongo.maxWaitTime}"
21
auto-connect-retry
=
"${mongo.autoConnectRetry}"
22
socket-keep-alive
=
"${mongo.socketKeepAlive}"
23
socket-timeout
=
"${mongo.socketTimeout}"
24
slave-ok
=
"${mongo.slaveOk}"
25
write-number
=
"1"
26
write-timeout
=
"0"
27
write-fsync
=
"true"
/>
28
</
mongo:mongo
>
29
30
<!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
31
<
mongo:db-factory
dbname
=
"test"
mongo-ref
=
"mongo"
/>
32
33
<!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成 -->
34
<
bean
id
=
"mongoTemplate"
class
=
"org.springframework.data.mongodb.core.MongoTemplate"
>
35
<
constructor-arg
name
=
"mongoDbFactory"
ref
=
"mongoDbFactory"
/>
36
</
bean
>
37
38
<!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们作为mongodb的一个collection的映射 -->
39
<
mongo:mapping-converter
base-package
=
"com.xxx.xxx.domain"
/>
40
41
<!-- mongodb bean的仓库目录,会自动扫描扩展了MongoRepository接口的接口进行注入 -->
42
<
mongo:repositories
base-package
=
"com.xxx.xxx.persist.mongodb"
/>
43
44
<!-- To translate any MongoExceptions thrown in @Repository annotated classes -->
45
<
context:annotation-config
/>
46
47
</
beans
>
spring-data-mongodb中的实体映射是通过
MongoMappingConverter这个类实现的。它可以通过注释把
java类转换为mongodb的文档。
它有以下几种注释:
@Id - 文档的唯一标识,在mongodb中为ObjectId,它是唯一的,通过时间戳+机器标识+进程ID+自增计数器(确保同一秒内产生的Id不会冲突)构成。
@Document - 把一个java类声明为mongodb的文档,可以通
过collection参数指定这个类对应的文档。
@DBRef - 声明类似于关系数据库的关联关系。ps:暂不支持级联的保存功能,当你在本实例中修改了DERef对象里面的值时,单独保存本实例并不能保存DERef引用的对象,它要另外保存,如下面例子的Person和Account。
@Indexed - 声明该字段需要索引,建索引可以大大的提高查询效率。
@CompoundIndex - 复合索引的声明,建复合索引可以有效地提高多字段的查询效率。
@GeoSpatialIndexed - 声明该字段为地理信息的索引。
@Transient - 映射忽略的字段,该字段不会保存到
mongodb。
@PersistenceConstructor - 声明构造函数,作用是把从数据库取出的数据实例化为对象。该构造函数传入的值为从DBObject中取出的数据。
以下引用一个官方文档的例子:
Person类
01
@Document
(collection=
"person"
)
02
@CompoundIndexes
({
03
@CompoundIndex
(name =
"age_idx"
, def =
"{'lastName': 1, 'age': -1}"
)
04
})
05
public
class
Person<T
extends
Address> {
06
07
@Id
08
private
String id;
09
@Indexed
(unique =
true
)
10
private
Integer ssn;
11
private
String firstName;
12
@Indexed
13
private
String lastName;
14
private
Integer age;
15
@Transient
16
private
Integer accountTotal;
17
@DBRef
18
private
List<Account> accounts;
19
private
T address;
20
21
22
public
Person(Integer ssn) {
23
this
.ssn = ssn;
24
}
25
26
@PersistenceConstructor
27
public
Person(Integer ssn, String firstName, String lastName, Integer age, T address) {
28
this
.ssn = ssn;
29
this
.firstName = firstName;
30
this
.lastName = lastName;
31
this
.age = age;
32
this
.address = address;
33
}
1
@Document
2
public
class
Account {
3
4
@Id
5
private
ObjectId id;
6
private
Float total;
7
8
}
与HibernateRepository类似,通过继承MongoRepository接口,我们可以非常方便地实现对一个对象的增删改查,要使用Repository的功能,先继承MongoRepository<T, TD>接口,其中T为仓库保存的bean类,TD为该bean的唯一标识的类型,一般为ObjectId。之后在service中注入该接口就可以使用,无需实现里面的方法,spring会根据定义的规则自动生成。
例:
1
public
interface
PersonRepository
extends
2
3
MongoRepository<Person, ObjectId>{
4
//这里可以添加额外的查询方法
5
}
例:
1
public
interface
PersonRepository
extends
2
3
MongoRepository<Person, ObjectId>{
4
//查询大于age的数据
5
public
Page<Product> findByAgeGreaterThan(
int
age,Pageable page) ;
6
}
GreaterThan(大于)
findByAgeGreaterThan(int age)
{"age" : {"$gt" : age}}
LessThan(小于)
findByAgeLessThan(int age)
{"age" : {"$lt" : age}}
Between(在...之间)
findByAgeBetween(int from, int to)
{"age" : {"$gt" : from, "$lt" : to}}
IsNotNull, NotNull(是否非空)
findByFirstnameNotNull()
{"age" : {"$ne" : null}}
IsNull, Null(是否为空)
findByFirstnameNull()
{"age" : null}
Like(模糊查询)
findByFirstnameLike(String name)
{"age" : age} ( age as regex)
(No keyword) findByFirstname(String name)
{"age" : name}
Not(不包含)
findByFirstnameNot(String name)
{"age" : {"$ne" : name}}
Near(查询地理位置相近的)
findByLocationNear(Point point)
{"location" : {"$near" : [x,y]}}
Within(在地理位置范围内的)
findByLocationWithin(Circle circle)
{"location" : {"$within" : {"$center" : [ [x, y], distance]}}}
Within(在地理位置范围内的)
findByLocationWithin(Box box)
{"location" : {"$within" : {"$box" : [ [x1, y1], x2, y2]}}}
尽管以上查询功能已经很丰富,但如果还不能满足使用情况的话可以用一下方法---基于mongodb原本查询语句的查询方式。
例:在原接口中加入
1
@Query
(
"{ 'name':{'$regex':?2,'$options':'i'}, sales': {'$gte':?1,'$lte':?2}}"
)
2
public
Page<Product> findByNameAndAgeRange(String name,
double
ageFrom,
double
ageTo,Pageable page);
注释Query里面的就是mongodb原来的查询语法,我们可以定义传进来的查询参数,通过坐标定义方法的参数。
还可以在后面指定要返回的数据字段,如上面的例子修改如下,则只通过person表里面的name和age字段构建person对象。
1
@Query
(value=
"{ 'name':{'$regex':?2,'$options':'i'}, sales':{'$gte':?1,'$lte':?2}}"
,fields=
"{ 'name' : 1, 'age' : 1}"
)
2
public
Page<Product> findByNameAndAgeRange(String name,
double
ageFrom,
double
ageTo,Pageable page);
- spring mongodb
- Spring Mongodb
- Spring Mongodb
- MongoDB 整合Spring(spring-data-mongodb)
- spring-data-mongodb MongoDB 整合 Spring
- Spring MongoDB集成
- Spring Mongodb入门
- spring-data 集成mongodb
- mongodb and spring
- spring管理mongodb
- mongodb与spring集成
- Spring整合- mongodb
- spring mongodb集成
- MongoDB的Spring配置
- spring MongoDB 集成(分页)
- Spring Mongodb集成
- spring+Mongodb简单整合
- spring mongodb学习
- 冒烟测试、阿尔法测试、贝塔测试和性能测试
- 频繁项集挖掘之apriori和fp-growth
- 如何获取ResultSet的行数和列数
- windows系统下编译最新版本ffmpeg
- AUI常见列子
- spring mongodb
- 被忽略却很有用的html标签
- 《Windows程序设计》之BITMASK
- Qt MSQL数据库访问测试程序
- Microsoft ActiveSync
- cocos2d-x 使用CCLabelAtlas自定义字体
- js邮箱验证正则表达式
- 一个计算机爱好者的不完整回忆(二)
- Java实用经验总结--Swing篇一