SpringSide集成MongoDB

1.环境搭建
1.1简介 
Spring-Data是基于Spring的数据访问、持久化框架。 
SpringSide4.0通过Spring-Data实现持久层对数据的访问、持久化操作。 
MongoDB是NoSql数据库中的一种,基于分布式文件对数据进行存储。 
Spring-Data-MongoDB是Spring-Data操作MongoDB的组件包。 
1.2步骤 
1.2.1 基于SpringSide4.0搭建开发环境(略) 
1.2.2 通过maven在项目中添加MongoDB支持 
SpringSide4.0演示项目quickstart中pom.xml示例:

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId> spring-data-mongodb </artifactId> 
<version> 1.1.0.RELEASE </version>
</dependency>
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId> spring-data-mongodb-cross-store </artifactId> 
<version> 1.1.0.RELEASE </version>
</dependency>
 <dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId> spring-data-mongodb-log4j </artifactId> 
<version> 1.1.0.RELEASE </version>
 </dependency> 
1.2.3 关联配置 
applicationContext-mongo.xml示例:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation=
"http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd" >


<!—引入资源文件-->
<context:property-placeholder location="classpath:applicationContext-mongo.properties"/>


<!—MongoDB映射对象-->
<mongo:mongo host="${mongo.host}" port="${mongo.port}">
<mongo:options 
connections-per-host="${mongo.connectionsPerHost}"
threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
connect-timeout="${mongo.connectTimeout}"
max-wait-time="${mongo.maxWaitTime}"
auto-connect-retry="${mongo.autoConnectRetry}"
socket-timeout="${mongo.socketTimeout}"
/> 
</mongo:mongo>


<!—MongoDB工厂-->
<mongo:db-factory dbname="${mongo.dbname}" mongo-ref="mongo"/>


<!—MongoDB数据操作模板对象-->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
  <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>


<!—只在需要通过实现Spring Data 中Repositories及其子接口进行数据操作的情况下配置,Spring会自动为配置包路径下的接口创建代理实例-->
<mongo:repositories base-package="org.springside.examples.quickstart.service.mongodb" mongo-template-ref="mongoTemplate"/>
</beans>


applicationContext-mongo.properties示例:
mongo.host=127.0.0.1
mongo.port=27017
mongo.dbname=test
mongo.connectionsPerHost=10
mongo.threadsAllowedToBlockForConnectionMultiplier=5
mongo.maxWaitTime=120000
mongo.connectTimeout=0
mongo.socketTimeout=0
mongo.autoConnectRetry=false


1.2.4代码实现 
1.2.4.1 方式一
继承Spring Data 中Repositories针对MongoDB的子接口MongoRepository


示例:
public interface AssetInfoAnnotationService extends MongoRepository<AssetInfo, String> {

@Query(value="{'assetId':?0}",fields="{'assetId':1}")
public List<AssetInfo> findAssetInfo(String assetId);


}
1.2.4.2 方式二
通过注入MongoDB数据操作模板对象mongoTemplate


示例:


@Component
public class AssetInfoService {


@Autowired
private MongoTemplate mongoTemplate;

public List<AssetInfo> findAssetInfo(){

List  result=null;
//查询方案一
Query query=new Query();
query.addCriteria(where("assetId").is("1"));
result=mongoTemplate.find(query,AssetInfo.class);


//查询方案二
String querySql="{assetId:'1'}";
BasicQuery basicQuery=new BasicQuery(querySql);
result=mongoTemplate.find(basicQuery,AssetInfo.class);


return result;
}
}


2.操作
查询
2.1.1  AND 
Query query=new Query();
query.addCriteria(where("assetId").is("1"));
query.addCriteria(where("des").is("精彩"));

等价于

String querySql="{assetId:'1',des:'精彩'}";
BasicQuery basic=new BasicQuery(querySql);

2.1.2 比较
Query query=new Query();
//影片时长大于19 并且 小于21 并且 大于等于20 并且 小于等于21
query.addCriteria(where("runTime").gt(19).lt(21).gte(20).lte(21));

等价于

String querySql="{runTime:{$gt:19},runTime:{$lt:21},runTime:{$gte:20},runTime:{$lte:21}}";
BasicQuery basicQuery=new BasicQuery(querySql);
2.1.3  in、all、nin
Query query=new Query();
String assetIds[]={"1","3"};
query.addCriteria(where("assetId").in(assetIds));

等价于

String querySql="{assetId:{$in:['1','2']}}";
BasicQuery basic=new BasicQuery(querySql);


all与in的区别是all需要匹配所有
nin的作用于in相反


2.1.4  exists判断字段是否存在
Query query=new Query();
query.addCriteria(where("assetId").exists(true));


等价于


String querySql="{assetId:{$exists:true}}";
BasicQuery basic=new BasicQuery(querySql);

2.1.5  ne不等于
Query query=new Query();
query.addCriteria(where("assetId").ne("2"));

等价于

String querySql="{assetId:{$ne:'2'}}";
BasicQuery basic=new BasicQuery(querySql);


2.1.6  or
Query query=new Query();
Criteria c=new Criteria();
c.orOperator(
new Criteria[]{where("assetId").is("1"),where("assetId").is("3")});
query.addCriteria(c);

等价于

String querySql=" {$or:[{assetId:'1'},{assetId:'3'}]}";
BasicQuery basic=new BasicQuery(querySql);

2.2排序
List<Order> orders= new ArrayList<Order>();
Order order=new Order(Direction.DESC,"assetId");
orders.add(order);
Sort sort=new Sort(orders);


Query query= new Query();
query.with(sort);
或者
BasicQuery basic=new BasicQuery(querySql);
basic.with(sort);


2.3 分页
List<Order> orders= new ArrayList<Order>();
Order order=new Order(Direction.DESC,"assetId");
orders.add(order);
Sort sort=new Sort(orders);

Query query= new Query();
query.with(sort);
query.skip(page.getPageSize()*(page.getPageNo()-1));//开始坐标
query.limit(page.getPageSize());//返回记录条数

或者

BasicQuery basic=new BasicQuery(querySql);
basic.with(sort);
basic.skip(page.getPageSize()*(page.getPageNo()-1));//开始坐标
basic.limit(page.getPageSize());//返回记录条数



2.3注解

@Document(collection="assetInfo")---更名
public class AssetInfo implements Serializable{

/**
* 
*/
private static final long serialVersionUID = 1L;

@Id  ----绑定注解
private String id; 

private String showTypeInfo;// Asset类型

private String bandwidth;// 带宽
private String keywords;// 关键字
@Indexed---索引
private String assetId;

@DBRef----外键
private AssetInfo relateAsset;

@Transient---不存储
private String title;// 名字

@Field(value="des")---更名
private String description;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值