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;
}
SpringSide集成MongoDB
最新推荐文章于 2019-10-11 10:26:38 发布