SpringSide集成MongoDB

来源:互联网 发布:科幻电影推荐 知乎 编辑:程序博客网 时间:2024/06/07 04:09
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/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/data/mongohttp://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsdhttp://www.springframework.org/schema/beanshttp://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.1mongo.port=27017mongo.dbname=testmongo.connectionsPerHost=10mongo.threadsAllowedToBlockForConnectionMultiplier=5mongo.maxWaitTime=120000mongo.connectTimeout=0mongo.socketTimeout=0mongo.autoConnectRetry=false1.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示例:@Componentpublic class AssetInfoService {@Autowiredprivate 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 并且 小于等于21query.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、ninQuery 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  orQuery 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 0
原创粉丝点击