第一、首先定义一个接口,注意以下几点:
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 {
@Resource
private MongoTemplate mongoTemplate;
@Override
public 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 extends
CrudRepository<SrUserExtGroup, Serializable>, BaseRepositoryCustom {
}
备注:SrUserExtGroup定义:
public class SrUserExtGroup {
private int uid;
private int count;
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;
}
}
最后测试方法:
@Test
public 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" />