Springboot之mongodb操作 mongoTemplate使用

mongoTemplate引入

MongoDB+Spring Boot的项目,相较于MyBatis来说,Spring Boot对于MongoDB进行操作变化更多。

项目中引入mongodb依赖包 pom.xml配置文件中添加如下依赖:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

注解引入使用

// 引入mongoTemplate对象
    @Autowired
    MongoTemplate mongoTemplate;

mongodb集合对象定义, 需要注解 @Document(collection = "collection名称")

@Document(collection = "myuser")
public class MyUser implements Serializable {
    //主键ID
    @Id
    private String id;
    // 姓名
    
	@Field("mName")
    private String name;
    ......省略其他属性
}

备注:

  • @Id 注解 设置的主键由MongoDB来自动生成,相比较自己设置效率会高很多。

  • @Document是mongodb驱动库提供设置操作的文档集合名称的注解,实体由mongodb来维护。

mongoTemplate java实例代码

Service代码实现 mongodb集合数据的 增删改查操作

@Service
public class MyUserService {

    @Autowired
    MongoTemplate mongoTemplate;


    public boolean add(MyUser myUser) {
        long unixTime = System.currentTimeMillis() / 1000L;
        int nowUnixTime = (int) unixTime;
        myUser.setCreated(nowUnixTime);
        /**
         * 语法:<T> T mongoTemplate.save(T objectToSave)
         * save方法用于保存数据对象,传递定义好的JavaBean即可,被保存的数据对象会作为返回值被返回。
         * 类似地,使用insert也可以达到保存数据的作用。
         */
        MyUser obj = mongoTemplate.save(myUser);
        if (obj.getId() > 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 获取所有数据
     * @return
     */
    public List<MySworder> findAll() {
        /**
         * 语法:<T> List<T> findAll(Class<T> entityClass)
         * finAll会返回所有entityClass对应的数据集合的数据,相当于MySQL中select * from xxx_table_name。
         */
        return mongoTemplate.findAll(MyUser.class);
    }


    public boolean update(MyUser myUser) {
        // 创建查询对象
        Query query = Query.query(Criteria.where("id").is(myUser.getId()));
        Update update = new Update();
        update.set("name", MyUser.getName());

        /**
         * 语法:public UpdateResult updateFirst(Query query, UpdateDefinition update, Class<?> entityClass)
         * updateFirst用于更新第一个被匹配的数据,query参数是查询条件对象,update是需要更新的数据对象,entityClass就是对应的JavaBean对象(文档集合类)
         */
        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, MyUser.class);
        if (updateResult.getModifiedCount() > 0) {
            return true;
        } else {
            return false;
        }
    }

    public boolean updateBatchByKeyWords(String searchKey,String replaceString) {
        // 创建模糊查询对象
        Pattern pattern = Pattern.compile("^.*" + searchKey + ".*$", Pattern.CASE_INSENSITIVE);
        Criteria criteria = Criteria.where("description").regex(pattern);
        Update update = new Update();
        update.set("description", replaceString);
        Query query = new Query();
        query.addCriteria(criteria);

        /**
         * 语法:public UpdateResult updateMulti(Query query, UpdateDefinition update, Class<?> entityClass)
         * updateMulti用于所有被匹配的数据,query参数是查询条件对象,update是需要更新的数据对象,entityClass就是对应的JavaBean对象(文档集合类)
         */
        UpdateResult updateResult = mongoTemplate.updateMulti(query, update, MyUser.class);
        if (updateResult.getModifiedCount() > 0) {
            return true;
        } else {
            return false;
        }
    }

    public boolean delete(String id) {
        MyUser myUser = new MyUser();
        myUser.setId(id);
        /**
         * 语法: DeleteResult remove(Object object)
         * 该方法用于删除数据,一般都是传递一个主键ID即可
         */
        DeleteResult deleteResult = mongoTemplate.remove(myUser);
        if (deleteResult.getDeletedCount() > 0) {
            return true;
        } else {
            return false;
        }
    }

    public MySworder details(String id) {
        Query query = Query.query(Criteria.where("id").is(id));
        /**
         * <T> T findOne(Query query, Class<T> entityClass)
         *
         * findOne就是根据查询条件(query)获取一条数据。
         */
        return mongoTemplate.findOne(query, MyUser.class);
    }

}