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

本文介绍了如何在Spring Data中自定义Repository实现MongoDB的Group by操作。首先定义一个以Custom结尾的接口,限制包内访问。接着创建实现类,以Impl结尾。然后定义Repository接口,并在XML配置中指定base-package,以启用相关Repository。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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" />


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值