package com.jshoperx.mongo.dao.impl;
import com.jshoperx.mongo.dao.RepositoryDao;
import com.mongodb.WriteResult;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.util.List;
@Repository("repositoryDao")
public class RepositoryDaoImpl<T> implements RepositoryDao<T>{
@Resource
private MongoTemplate mongoTemplate;
@Override
public void insert(T t) {
mongoTemplate.insert(t);
}
@Override
public boolean deleteById(String id,Class<T>t) {
Criteria criteria=Criteria.where("_id").in(id);
if(null!=criteria){
Query query=new Query(criteria);
List<T> list = this.findAll(query, t) ;
if (list != null && list.size() > 0) {
this.delete(list.get(0));
return true;
}
}
return false;
}
@Override
public void delete(T t) {
mongoTemplate.remove(t);
}
@Override
public T findOne(Query query,Class<T> t) {
return mongoTemplate.findOne(query,t);
}
@Override
public boolean updateFirst(Query query, Update update, Class<T> t) {
WriteResult result=mongoTemplate.updateFirst(query, update, t);
if(result.getN()==1){
return true;
}
return false;
}
@Override
public List<T> findAll(Class<T>t) {
return mongoTemplate.findAll(t);
}
@Override
public Long getCount(Query query, Class<T> t) {
return mongoTemplate.count(query, t);
}
@Override
public List<T> findAll(Query query, Class<T> t) {
return mongoTemplate.find(query, t);
}
@Override
public List<T> findByPage(Query query, int currentPage, int lineSize,Class<T>t) {
query.skip((currentPage - 1) * lineSize);
query.limit(lineSize);
return mongoTemplate.find(query, t);
}
@Override
public T findAndModify(Query query,Update update,Class<T> t) {
return mongoTemplate.findAndModify(query, update, t);
}
@Override
public void saveOrUpdate(T t) {
mongoTemplate.save(t);
}
@Override
public boolean updateMulti(Query query, Update update, Class<T> t) {
WriteResult result=mongoTemplate.updateMulti(query, update, t);
if(result.getN()>=1){
return true;
}
return false;
}
@Override
public boolean upsert(Query query, Update update, Class<T> t) {
WriteResult result=mongoTemplate.upsert(query, update, t);
if(result.getN()>=1){
return true;
}
return false;
}
@Override
public void drop(Class<T> t) {
mongoTemplate.dropCollection(t);
}
}