1、安装依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
2、配置数据库连接
spring:data:mongodb:host: localhostport: 27017username: xxxxxxpassword: xxxxxxdatabase: xxxxxxauthentication-database: admin
3、新建实体类
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;@Data
//代表集合名称
@Document("myCollection")
public class MyCollection {@Idprivate String id;private String name;private Integer age;private String sex;
}
4、调用方法
4.1 方法一
package com.example.springboot3test.controller;import com.example.springboot3test.entity.MyCollection;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
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.web.bind.annotation.*;import java.util.List;
import java.util.regex.Pattern;@RestController
@RequestMapping("/test")
public class TestController {@Resourceprivate MongoTemplate mongoTemplate;//引入的对象//查询所有不带条件@GetMapping("/findAllData")public List<MyCollection> findAllData(){return mongoTemplate.findAll(MyCollection.class);}//根据Id查询@GetMapping("/findDataById/{id}")public MyCollection findDataById(@PathVariable("id") String id){return mongoTemplate.findById(id,MyCollection.class);}//where条件查询@PostMapping("/findByWhere")public List<MyCollection> findByWhere(@RequestBody MyCollection myCollection){Query query=new Query(Criteria.where("name").is(myCollection.getName()).and("age").gte(myCollection.getAge()));return mongoTemplate.find(query,MyCollection.class);}//模糊查询@PostMapping("/findByLike")public List<MyCollection> findByLike(@RequestBody MyCollection myCollection){String regex = String.format("%s%s%s", "^.*", myCollection.getName(), ".*$");Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);Query query=new Query(Criteria.where("name").regex(pattern));return mongoTemplate.find(query,MyCollection.class);}//插入@PostMapping("/insertMongodb")public String insertMongodb(@RequestBody MyCollection myCollection){mongoTemplate.insert(myCollection);return "OK";}//批量插入@PostMapping("/insertBatchsMongodb")public String insertBatchsMongodb(@RequestBody List<MyCollection> list){mongoTemplate.insertAll(list);return "OK";}//更新@PostMapping("/updateMongodb")public String updateMongodb(@RequestBody MyCollection myCollection){Query query=new Query(Criteria.where("age").gte(38));Update update=new Update();update.set("name",myCollection.getName());//单条更新//mongoTemplate.upsert(query,update,MyCollection.class);//批量更新mongoTemplate.updateMulti(query,update,MyCollection.class);return "OK";}//删除根据条件@GetMapping("/deleteMongodb/{age}")public String deleteMongodb(@PathVariable("age") Long age){Query query=new Query(Criteria.where("age").gte(age));mongoTemplate.remove(query,MyCollection.class);return "OK";}
}
注:其中的常用方法如下
常用方法
mongoTemplate.findAll(User.class): 查询User文档的全部数据
mongoTemplate.findById(<id>, User.class): 查询User文档id为id的数据
mongoTemplate.find(query, User.class);: 根据query内的查询条件查询
mongoTemplate.upsert(query, update, User.class): 修改
mongoTemplate.remove(query, User.class): 删除
mongoTemplate.insert(User): 新增Query对象
1、创建一个query对象(用来封装所有条件对象),再创建一个criteria对象(用来构建条件)
2、 精准条件:criteria.and(“key”).is(“条件”)模糊条件:criteria.and(“key”).regex(“条件”)
3、封装条件:query.addCriteria(criteria)
4、大于(创建新的criteria):Criteria gt = Criteria.where(“key”).gt(“条件”)小于(创建新的criteria):Criteria lt = Criteria.where(“key”).lt(“条件”)
5、Query.addCriteria(new Criteria().andOperator(gt,lt));
6、一个query中只能有一个andOperator()。其参数也可以是Criteria数组。
7、排序 :query.with(new Sort(Sort.Direction.ASC, "age"). and(new Sort(Sort.Direction.DESC, "date")))
Criteria查询条件类常用方法
//声明定义查询条件,且为静态方法
where(String key)
//与操作
and(String key)
//正则表达式,即可为模糊查询
regex(String re)
//包含
in(Object... o)
//大于
gt(Object o)
//大于等于
gte(Object o)
//等于
is(Object o)
//小于
lt(Object o)
//小于等于
lte(Object o)
//非
not()
//创建与操作
andOperator(Criteria... criteria)
4.2 方法二 spring Data 方式
spring Data提供了对mongodb数据访问的支持,我们只需要继承MongoRepository类,按照Spring Data规范就可以了。
当需要根据实体类中的属性查询时,MongoRepository提供的方法已经不能满足,我们需要在PersonRepository仓库中定义方法,定义方法名的规则为:find + By + 属性名(首字母大写)
step1 新建MyCollectionRepository接口
package com.example.springboot3test.dao;import com.example.springboot3test.entity.MyCollection;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
public interface MyCollectionRepository extends MongoRepository<MyCollection,String> {//当需要根据实体类中的属性查询时,MongoRepository提供的方法已经不能满足,我们需要在PersonRepository仓库中定义方法,定义方法名的规则为:find + By +// 属性名(首字母大写),如:根据姓名查询Person。//仓库中添加的方法//根据名称查询List<MyCollection> findByName(String name);//模糊查询List<MyCollection> findByNameLike(String name);//模糊查询List<MyCollection> findByNameLikeAndAgeGreaterThanEqual(String name,Integer age);}
step2 、测试代码
package com.example.springboot3test.controller;import com.example.springboot3test.dao.MyCollectionRepository;
import com.example.springboot3test.entity.MyCollection;
import jakarta.annotation.Resource;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.ExampleMatcher;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/mongodb")
public class TestMongodbController {@Resourceprivate MyCollectionRepository myCollectionRepository;//插入单条@PostMapping("/insertMongodb")public String insertMongodb(@RequestBody MyCollection myCollection){myCollectionRepository.insert(myCollection);return "OK";}//批量插入@PostMapping("/insertMongodbBatchs")public String insertMongodbBatchs(@RequestBody List<MyCollection> myCollection){myCollectionRepository.insert(myCollection);return "OK";}//更新@PostMapping("/updateMongodb")public String updateMongodb(@RequestBody MyCollection myCollection){myCollectionRepository.save(myCollection);//myCollectionRepository.insert(myCollection);return "OK";}//删除@GetMapping("/deleteMongodbById/{id}")public String deleteMongodbById(@PathVariable("id") String id){myCollectionRepository.deleteById(id);return "OK";}//查询所有@GetMapping("/findAll")public List<MyCollection> findAll(){return myCollectionRepository.findAll();}//根据Id进行查询@GetMapping("/findById/{id}")public MyCollection findById(@PathVariable("id") String id){return myCollectionRepository.findById(id).get();}//条件查询@PostMapping("/findQuery")public List<MyCollection> findQuery(@RequestBody MyCollection myCollection){//Example<MyCollection> example=Example.of(myCollection);return myCollectionRepository.findByName(myCollection.getName());}//模糊匹配@PostMapping("/findLike")public List<MyCollection> findLike(@RequestBody MyCollection myCollection){
// ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
// .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
// .withIgnoreCase(true);//改变默认大小写忽略方式:忽略大小写
// Example<MyCollection> example=Example.of(myCollection,matcher);return myCollectionRepository.findByNameLike(myCollection.getName());//单个模糊查询}//模糊匹配@PostMapping("/findLikeAnd")public List<MyCollection> findLikeAnd(@RequestBody MyCollection myCollection){
// ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
// .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
// .withIgnoreCase(true);//改变默认大小写忽略方式:忽略大小写
// Example<MyCollection> example=Example.of(myCollection,matcher);//多个条件模糊查询return myCollectionRepository.findByNameLikeAndAgeGreaterThanEqual(myCollection.getName(),myCollection.getAge());}}