zoukankan      html  css  js  c++  java
  • Spring-MongoDB简单操作

    1、简单的配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:mongo="http://www.springframework.org/schema/data/mongo"
        xsi:schemaLocation=" 
                    http://www.springframework.org/schema/beans 
                    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
                    http://www.springframework.org/schema/data/mongo
                      http://www.springframework.org/schema/data/mongo/spring-mongo-1.2.xsd">
    
      <mongo:mongo host="127.0.0.1" port="27017"/>
      <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="mongo"/>
        <constructor-arg name="databaseName" value="app_DB"/>
      </bean>
    </beans>

    2、通用DAO
      1)接口

    package cn.luxh.app.repository;
    
    import java.util.List;
    
    import org.springframework.data.mongodb.core.query.Query;
    import org.springframework.data.mongodb.core.query.Update;
    
    public interface MongoDBDao {
        
        void save(Object obj);
        
        <T> T findOne(Class<T> clazz, Query query);
        
        <T> List<T> findAll(Class<T> clazz);
        
        <T> T findById(Class<T> clazz,Object id);
        
        <T> List<T> find(Class<T> clazz, Query query);
        
        <T> List<T> findList(Class<T> clazz,Query query,int currentPage,int pageSize);
        
        <T> long findCount(Class<T> clazz,Query query);
        
        <T> int update(Query query,Update update,Class<T> clazz);
    }

      2)接口实现

    package cn.luxh.app.repository;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.mongodb.core.MongoTemplate;
    import org.springframework.data.mongodb.core.query.Query;
    import org.springframework.data.mongodb.core.query.Update;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class MongoDBDaoImpl implements MongoDBDao{
        
        @Autowired
        private MongoTemplate mongoTemplate;
        
        @Override
        public <T> T findOne(Class<T> clazz, Query query) {
            return mongoTemplate.findOne(query, clazz);
        }
    
        @Override
        public void save(Object obj) {
            mongoTemplate.save(obj);
        }
    
        @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();
        }
    
    }

    3、通用Service
     

      1)接口

    package cn.luxh.app.service;
    
    import java.util.List;
    
    import org.springframework.data.mongodb.core.query.Query;
    import org.springframework.data.mongodb.core.query.Update;
    
    import cn.luxh.app.util.Pagination;
    
    public interface MongoDBService {
        
        void save(Object obj);
        
        <T> T findOne(Class<T> clazz, Query query);
        
        <T> List<T> findAll(Class<T> clazz);
        
        <T> List<T> find(Class<T> clazz, Query query);
        
        /**
         * 分页查询
         */
        <T> Pagination<T> getPagination(Class<T> clazz,Query query,int currentPage,int pageSize);
        
        <T> int update(Query query, Update update, Class<T> clazz);
    }

      2)实现

    package cn.luxh.app.service;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.mongodb.core.query.Query;
    import org.springframework.data.mongodb.core.query.Update;
    import org.springframework.stereotype.Service;
    
    import cn.luxh.app.repository.MongoDBDao;
    import cn.luxh.app.util.Pagination;
    
    @Service
    public class MongoDBServiceImpl implements MongoDBService{
        
        @Autowired
        private MongoDBDao mongoDBDao;
        
        @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> List<T> find(Class<T> clazz, Query query) {
            return mongoDBDao.find(clazz, query);
        }
    
        @Override
        public <T> Pagination<T> getPagination(Class<T> clazz, Query query,
                int currentPage, int pageSize) {
            List<T> recordList = mongoDBDao.findList(clazz, query, currentPage, pageSize);
            long recordCount = mongoDBDao.findCount(clazz, query);
            return new Pagination<T>(currentPage,pageSize,recordCount,recordList);
        }
    
        @Override
        public <T> int update(Query query, Update update, Class<T> clazz) {
            return mongoDBDao.update(query, update, clazz);
        }
    
    }

    4、测试

    package cn.luxh.app.test;
    
    import java.util.List;
    import java.util.Random;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    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.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import cn.luxh.app.entity.system.Book;
    import cn.luxh.app.service.MongoDBService;
    import cn.luxh.app.util.Pagination;
    
    @RunWith(SpringJUnit4ClassRunner.class)  
    @ContextConfiguration(locations={"classpath:app-context.xml","classpath:app-mongo.xml"})
    public class MongoDBTester {
        
        @Autowired
        private MongoDBService mongoDBService;
        
        @Test
        public void testSave() {
            /*Book book = new Book();
            book.setId(2);
            book.setBookName("建筑的永恒之道");
            book.setPrice(30.6d);
            mongoDBService.save(book);*/
            
            for(int i=3;i<50;i++) {
                Book book = new Book();
                book.setId(i);
                book.setBookName("建筑的永恒之道"+i);
                book.setPrice(new Random().nextDouble()*100);
                mongoDBService.save(book);
            }
        }
        
        @Test
        public void testQuery1() {
            Query query = new Query();
            query.addCriteria(Criteria.where("id").in(1));
            Book book = mongoDBService.findOne(Book.class, query);
            System.out.println("book---"+book.getBookName());
        }
        
        @Test
        public void testQuery2() {
            List<Book> books = mongoDBService.findAll(Book.class);
            for(Book book : books) {
                System.out.println(book.getBookName());
            }
        }
        
        @Test
        public void testQuery3() {
            Query query = new Query();
            query.addCriteria(Criteria.where("price").gt(40.0d));
            List<Book> books = mongoDBService.find(Book.class,query);
            for(Book book : books) {
                System.out.println(book.getBookName()+"----"+book.getPrice());
            }
        }
        
        @Test
        public void testQuery4() {
            Query query = new Query();
            Pagination<Book> pagination = mongoDBService.getPagination(Book.class, query, 1, 10);
            for(Book book : pagination.getRecordList()) {
                System.out.println(book.getBookName()+"----"+book.getPrice());
            }
        }
        
        @Test
        public void testUpdate() {
            Query query = new Query();
            query.addCriteria(Criteria.where("id").is(10));
            Update update = new Update();
            update.set("bookName", "编程珠玑");
            update.set("price", 100.0d);
            int i = mongoDBService.update(query, update, Book.class);
            System.out.println(i);
            
        }
    }
  • 相关阅读:
    MacBook Pro修改hosts
    Python WebSocket
    TCP三次握手和四次挥手过程
    Tcp三次握手和四次挥手
    常见正则表达式
    Python正则表达式
    Python使用gevent实现协程
    Tcp客户端构建流程
    AC6102开发板USB3.0测试和使用说明
    AC6102 DDR2测试工程
  • 原文地址:https://www.cnblogs.com/luxh/p/3142341.html
Copyright © 2011-2022 走看看