SpringBoot整合完MongoDB后,首先面对的问题便是如何操作MongoDB,增、删、改、查的操作如何通过Java代码的形式进行。spring-boot-starter-data-mongodb.jar包封装了一整套对MongoDB进行调用的api,只需要对其进行简单封装就可以了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
项目分层采取controller--->Service--->dao
的形式,如图:
MongoDBDao.java
public interface MongoDBDao {
/**
* 插入一个Object类型的
* @param object
*/
void insert(Object object);
/**
* 保存一条记录
* @param obj
*/
void save(Object obj);
/**
* 查询一条记录
* @param clazz
* @param query
* @return
*/
<T> T findOne(Class<T> clazz, Query query);
/**
* 查询所有
* @param clazz
* @return
*/
<T> List<T> findAll(Class<T> clazz);
/**
* 根据ID查询一个对象
* @param clazz
* @param id
* @return
*/
<T> T findById(Class<T> clazz,Object id);
/**
* 根据条件查询集合对象
* @param clazz
* @param query
* @return
*/
<T> List<T> find(Class<T> clazz, Query query);
/**
* 根据条件查询分页集合对象
* @param clazz
* @param query
* @param currentPage
* @param pageSize
* @return
*/
<T> List<T> findList(Class<T> clazz,Query query,int currentPage,int pageSize);
/**
* 根据条件查询总条数
* @param clazz
* @param query
* @return
*/
<T> long findCount(Class<T> clazz,Query query);
/**
* 根据条件更新一条记录
* @param query
* @param update
* @param clazz
* @return
*/
<T> int update(Query query,Update update,Class<T> clazz);
}
MongoDBDaoImpl.java
@Repository
public class MongoDBDaoImpl implements MongoDBDao{
@Autowired
private MongoTemplate mongoTemplate;
@Override
public void insert(Object object) {
mongoTemplate.insert(object);
}
@Override
public void save(Object obj) {
mongoTemplate.save(obj);
}
@Override
public <T> T findOne(Class<T> clazz, Query query) {
return mongoTemplate.findOne(query, clazz);
}
@Override
public <T> List<T> findAll(Class<T> clazz) {
return mongoTemplate.findAll(clazz);
}
@Override
public <T> T findById(Class<T> clazz, Object id) {
return mongoTemplate.findById(id, clazz);
}
@Override
public <T> List<T> find(Class<T> clazz, Query query) {
return mongoTemplate.find(query, clazz);
}
@Override
public <T> List<T> findList(Class<T> clazz, Query query, int currentPage, int pageSize) {
int startIndex = ((currentPage - 1) < 0 ? 0:(currentPage - 1))*pageSize;
query.skip(startIndex);
query.limit(pageSize);
return mongoTemplate.find(query,clazz);
}
@Override
public <T> long findCount(Class<T> clazz, Query query) {
return mongoTemplate.count(query, clazz);
}
@Override
public <T> int update(Query query, Update update, Class<T> clazz) {
return mongoTemplate.updateFirst(query, update, clazz).getN();
}
}
MongoDBService.java
public interface MongoDBService {
/**
* 插入一个Object类型的
* @param object
*/
void insert(Object object);
/**
* 保存一条记录
* @param obj
*/
void save(Object obj);
/**
* 查询一条记录
* @param clazz
* @param query
* @return
*/
<T> T findOne(Class<T> clazz, Query query);
/**
* 查询所有
* @param clazz
* @return
*/
<T> List<T> findAll(Class<T> clazz);
/**
* 根据ID查询一个对象
* @param clazz
* @param id
* @return
*/
<T> T findById(Class<T> clazz,Object id);
/**
* 根据条件查询集合对象
* @param clazz
* @param query
* @return
*/
<T> List<T> find(Class<T> clazz, Query query);
/**
* 分页查询
*/
<T> Page<T> getPagination(Class<T> clazz,Query query,int currentPage,int pageSize);
/**
* 根据条件查询总条数
* @param clazz
* @param query
* @return
*/
<T> long findCount(Class<T> clazz,Query query);
/**
* 根据条件更新一条记录
* @param query
* @param update
* @param clazz
* @return
*/
<T> int update(Query query,Update update,Class<T> clazz);
}
MongoDBServiceImpl.java
@Service
public class MongoDBServiceImpl implements MongoDBService{
@Autowired
private MongoDBDao mongoDBDAO;
@Override
public void insert(Object object) {
mongoDBDAO.insert(object);
}
@Override
public void save(Object obj) {
mongoDBDAO.save(obj);
}
@Override
public <T> T findOne(Class<T> clazz, Query query) {
return mongoDBDAO.findOne(clazz, query);
}
@Override
public <T> List<T> findAll(Class<T> clazz) {
return mongoDBDAO.findAll(clazz);
}
@Override
public <T> T findById(Class<T> clazz, Object id) {
return mongoDBDAO.findById(clazz, id);
}
@Override
public <T> List<T> find(Class<T> clazz, Query query) {
return mongoDBDAO.find(clazz, query);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public <T> Page<T> getPagination(Class<T> clazz, Query query, int currentPage, int pageSize) {
List<T> recordList = mongoDBDAO.findList(clazz, query, currentPage, pageSize);
int recordCount = (int)mongoDBDAO.findCount(clazz, query);
return new Page(currentPage,pageSize,recordCount,recordList);
}
@Override
public <T> long findCount(Class<T> clazz, Query query) {
return mongoDBDAO.findCount(clazz, query);
}
@Override
public <T> int update(Query query, Update update, Class<T> clazz) {
return mongoDBDAO.update(query, update, clazz);
}
}
测试代码:
@RunWith(SpringJUnit4ClassRunner.class) // SpringJUnit支持,由此引入Spring-Test框架支持!
@SpringBootTest(classes=Application.class) // 指定我们SpringBoot工程的Application启动类
public class Test1 {
@Autowired
private MongoDBService mangoDBService;
@Test
public void testSave() {
Domain domain = new Domain("666666", "dasdasdasda");
mangoDBService.save(domain);
}
@Test
public void testInsert() {
Domain domain = new Domain("666666", "dasdasdasda");
mangoDBService.save(domain);
}
@Test
public void testFindOne() {
Query query = new Query();
query.addCriteria(Criteria.where("key").in("test1"));
Domain domain = mangoDBService.findOne(Domain.class, query);
System.out.println("domain---"+domain.getJsonStr());
}
@Test
public void testFindList() {
Query query = new Query();
int currentPage = 1;
int pageSize = 10;
query.addCriteria(Criteria.where("key").in("test1"));
Page<Domain> pagination = mangoDBService.getPagination(Domain.class, query, currentPage, pageSize);
System.out.println(pagination.getRecordTotal());
}
@Test
public void testFindCount() {
Query query = new Query();
query.addCriteria(Criteria.where("key").in("test1"));
long count = mangoDBService.findCount(Domain.class, query);
System.out.println(count);
}
@Test
public void testUpdate() {
Query query = new Query();
query.addCriteria(Criteria.where("key").is("666666"));
Update update = new Update();
update.set("key", "999999999999999999");
int i = mangoDBService.update(query, update, Domain.class);
System.out.println(i);
}
}
结果如下: