package com.xiaozhi.blog.mongo;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Order;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;
import com.xiaozhi.blog.vo.SinaPost;
@Repository
public class SinaBlogDao {
private static Log logger = LogFactory.getLog(SinaBlogDao.class);
@Autowired
private MongoOperations mongoTemplate;
public void setMongoTemplate(MongoOperations mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
/**
* 保存定时微博
* @param post
* @return
*/
public SinaPost saveSinaPost(SinaPost post){
try {
this.mongoTemplate.save(post);
return post;
} catch (Exception e) {
logger.error("---------------> saveSinaPost error :",e.fillInStackTrace());
return null;
}
}
/**
* 通过id获取一个定时微博
* @param id
* @return
*/
public SinaPost getSinaPostById(long id){
return this.mongoTemplate.findOne(new Query(Criteria.where("id").is(id)), SinaPost.class);
}
/**
* 删除一个定时微博,并返回它的实体对象
* @param id
* @return
*/
public SinaPost removeSinaPostById(long id){
SinaPost post = this.mongoTemplate.findAndRemove(new Query(Criteria.where("id").is(id)), SinaPost.class);
return post;
}
/**
* 返回当前页的微博列表
* @param uid
* @param firstResult
* @param pageSize
* @return
*/
public List<SinaPost> findSinaPosts(String uid,int firstResult, int pageSize){
Query query = new Query(Criteria.where("uid").is(uid));
query.skip(firstResult).limit(pageSize);
//query.sort().on("delaySeconds",Order.ASCENDING);//按延迟发布时间正排序
query.with(new Sort(Sort.Direction.ASC,"delaySeconds"));
List<SinaPost> posts = this.mongoTemplate.find(query,SinaPost.class);
return posts;
}
/**
* 获取集合总数
* @param uid
* @return
*/
public int getSinaPostCount(String uid){
int totalCount = (int)this.mongoTemplate.count(new Query(Criteria.where("uid").is(uid)), SinaPost.class);
return totalCount;
}
}