首先在配置中加入
<!-- MongoDB配置 -->
<mongo:mongo-client replica-set="${jdbc.mongoDB.replicaSet}" credentials="${jdbc.mongoDB.credentials}" id="mongo">
<mongo:client-options write-concern="SAFE" connections-per-host="100" threads-allowed-to-block-for-connection-multiplier="50"/>
</mongo:mongo-client>
<mongo:db-factory id="mongoDbFactory" dbname="XXX" mongo-ref="mongo"/>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>
然后写出工具类
@Component
public class MongoCacheUtil {
@Autowired(required = false)
private MongoTemplate mongoTemplate;
public void saveMsg(RecordDetailDto recordDetailDto) {
mongoTemplate.save(recordDetailDto, ImConstant.ZM_IM_RECORD_DETAIL);
}
public List<RecordDetailDto> findRecordDetail(RecordDetailDto recordDetailDto, Integer start, Integer size) {
Query query = new Query();
query.skip(start);
query.limit(size);
query.addCriteria(Criteria.where("fCommunicationRecordId").is(recordDetailDto.getfCommunicationRecordId()).andOperator(Criteria.where("deleteFlag").is(ImConstant.DB_CORRECT)));
query.with(new Sort(new Sort.Order(Sort.Direction.DESC, "fSendTime")));
return mongoTemplate.find(query, RecordDetailDto.class, ImConstant.ZM_IM_RECORD_DETAIL);
}
public Long getMsgCount(RecordDetailDto recordDetailDto) {
Query query = new Query();
query.addCriteria(Criteria.where("fCommunicationRecordId").is(recordDetailDto.getfCommunicationRecordId()).andOperator(Criteria.where("deleteFlag").is(ImConstant.DB_CORRECT)));
return mongoTemplate.count(query, RecordDetailDto.class, ImConstant.ZM_IM_RECORD_DETAIL);
}
public RecordDetailDto getLastMsg(RecordDetailDto recordDetailDto) {
Query query = new Query();
query.skip(0);
query.limit(1);
query.addCriteria(Criteria.where("fCommunicationRecordId").is(recordDetailDto.getfCommunicationRecordId()).andOperator(Criteria.where("deleteFlag").is(ImConstant.DB_CORRECT)));
query.with(new Sort(new Sort.Order(Sort.Direction.DESC, "fSendTime")));
return mongoTemplate.findOne(query, RecordDetailDto.class, ImConstant.ZM_IM_RECORD_DETAIL);
}
public RecordDetailDto getLastMsgByFromAndTargetUser(RecordDetailDto recordDetailDto) {
Query query = new Query();
query.addCriteria(Criteria.where("fTargetUser").is(recordDetailDto.getfTargetUser()).orOperator(Criteria.where("fTargetUser").is(recordDetailDto.getfFromUser())));
query.addCriteria(Criteria.where("fFromUser").is(recordDetailDto.getfFromUser()).orOperator(Criteria.where("fFromUser").is(recordDetailDto.getfTargetUser())));
query.with(new Sort(new Sort.Order(Sort.Direction.DESC, "fSendTime")));
return mongoTemplate.findOne(query, RecordDetailDto.class, ImConstant.ZM_IM_RECORD_DETAIL);
}
//逻辑删除
public void deleteByMsgId(String fMessageId) {
Update update = new Update();
update.set("deleteFlag", ImConstant.DB_DELETE);
mongoTemplate.updateMulti(Query.query(Criteria.where("fMessageId").is(fMessageId)), update, RecordDetailDto.class, ImConstant.ZM_IM_RECORD_DETAIL);
}
}
在代码之中调用就可以了,这里只是在业务逻辑中用到了这些,只写了这些
在测试过程中,因为mongoTemplate没有加mongo的表名,很久都测试不出来数据。在这里记录一下