Spring data 自定义Repository 实现Mongodb的Group by

来源:互联网 发布:淘宝买家差评怎么删除 编辑:程序博客网 时间:2024/06/05 01:19

第一、首先定义一个接口,注意以下几点:

1、接口名称默认必须以:Custom结尾;

2、接口权限设置为包内访问


import java.util.List;import com.xhh.ssi.mongodb.model.SrUserExtGroup;interface BaseRepositoryCustom {List<SrUserExtGroup> myCustomMethod();}

   


第二、定义接口BaseRepositoryCustom实现类,注意名称以Impl结尾,也可以通过配置其他的方式结尾repository-impl-postfix


import java.util.List;import javax.annotation.Resource;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.core.aggregation.Aggregation;import org.springframework.data.mongodb.core.aggregation.AggregationResults;import org.springframework.data.mongodb.core.aggregation.GroupOperation;import org.springframework.data.mongodb.core.aggregation.ProjectionOperation;import com.xhh.ssi.mongodb.model.SrUserExtGroup;class BaseRepositoryImpl implements BaseRepositoryCustom {@Resourceprivate MongoTemplate mongoTemplate;@Overridepublic List<SrUserExtGroup> myCustomMethod() {GroupOperation groupOperation = Aggregation.group("uid").count().as("count");ProjectionOperation project = Aggregation.project("count").and("_id").as("uid");Aggregation agg = Aggregation.newAggregation(groupOperation, project);AggregationResults<SrUserExtGroup> results = mongoTemplate.aggregate(agg, "sr_user_ext", SrUserExtGroup.class);List<SrUserExtGroup> mappedResult = results.getMappedResults();return mappedResult;}}

第三、定义Repository接口

import java.io.Serializable;import org.springframework.data.repository.CrudRepository;import com.xhh.ssi.mongodb.model.SrUserExtGroup;public interface BaseRepository extendsCrudRepository<SrUserExtGroup, Serializable>, BaseRepositoryCustom {}

备注:SrUserExtGroup定义:

public class SrUserExtGroup {private intuid;private intcount;public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}}


最后测试方法:


@Testpublic void sortTest() {List<SrUserExtGroup> extGroups = baseRepository.myCustomMethod();if (extGroups != null) {for (SrUserExtGroup group : extGroups) {System.out.println("-->>UID:" + group.getUid() + ",COUNT:"+ group.getCount());}}}



注意增加XML配置:<mongo:repositories base-package="包路径.*.repositories" />


阅读全文
0 0
原创粉丝点击