一、创建项目
选用
gradle
做项目自动化构建工具
添加
lombok,web,mongodb
的依赖
关于lombok的使用,请见本人博客:Lombok的介绍,以及在IDEA中使用Lombok来优雅的编码
二、application.properties 添加配置
#项目服务端口号
server.port: 8100
#mongodb配置
spring.data.mongodb.host: MongoDB连接的IP地址
spring.data.mongodb.port: 27017
spring.data.mongodb.database: testdb
#如果mongodb设置了账号密码
spring.data.mongodb.username=账号
spring.data.mongodb.password=密码
启动项目测试mongodb是否连接成功,如果启动连接未报错,则连接成功。
三、实现MongoDB的增删改查
-
Controller层
(1)增@RestController @RequestMapping(value = "/mongodb") public class MongoDBTestController { @Resource private MongoDBTestService mongoDBTestService; //增操作 @PostMapping(value = "/add") public String addMongoDB(@RequestBody UserDTO user) { mongoDBTestService.addMongoDB(user); return "SUCCESS"; } }
(2)删
@GetMapping(value = "/delete/{userName}") public String deleteMongoDB(@PathVariable(value = "userName") String userName) { mongoDBTestService.deleteMongoDB(userName); return "SUCCESS"; }
(3)改
//更改一条数据的一个字段 @PostMapping(value = "/update") public String updateMongoDB(@RequestBody TestUser user) { mongoDBTestService.updateMongoDB(user); return "SUCCESS"; } //更改一条数据的多个字段 @PostMapping(value = "/update/many") public String updateManyMongoDB(@RequestBody TestUser user) { mongoDBTestService.updateManyMongoDB(user); return "SUCCESS"; }
(4)查
//查询一条数据 @GetMapping(value = "/find/one/{userName}") public TestUser getOneMongoDB(@PathVariable(value = "userName") String userName) { return mongoDBTestService.getOneMongoDB(userName); } //查询所有数据 @GetMapping(value = "/find/all") public List<TestUser> getAllMongoDB() { return mongoDBTestService.getAllMongoDB(); } //模糊查询 @GetMapping(value = "/find/fuzzy/{userName}") public List<TestUser> getFuzzyMongoDB(@PathVariable(value = "userName") String userName) { return mongoDBTestService.getFuzzyMongoDB(userName); } //分页查询 @GetMapping(value = "/find/page") public List<UserDTO> getpageMongoDB() { return mongoDBTestService.getpageMongoDB(); }
-
Service层
(1)增@Service public class MongoDBTestServiceImpl implements MongoDBTestService { @Resource private MongoTemplate mongoTemplate; @Override public void addMongoDB(UserDTO user) { //添加到Mongo数据库时,默认以对象userDTO为集合名称添加 mongoTemplate.insert(user); //也可以指定添加到某个集合中 //mongoTemplate.insert(user, "testCollection"); } }
(2)删
@Override public void deleteMongoDB(String userName) { //根据姓名删除 Query query = Query.query(Criteria.where("userName").is(userName)); mongoTemplate.remove(query, UserDTO.class); }
Criteria类:封装所有的语句,以方法的形式进行查询。
Query类:将语句进行封装或者添加排序之类的操作。(3)改
@Override public void updateMongoDB(TestUser user) { //更改一条数据的一个字段 Query query = Query.query(Criteria.where("userName").is(user.getUserName())); Update update = Update.update("age", user.getAge()); //参数1:查询条件 参数2:修改 参数3:表名称(可以传对应集合的对象名) mongoTemplate.updateFirst(query, update, TestUser.class); } @Override public void updateManyMongoDB(TestUser user) { //更改一条数据的多个字段 Query query = Query.query(Criteria.where("userName").is(user.getUserName())); Update update = new Update(); update.set("age", user.getAge()); update.set("userName", "test2"); //参数1:查询条件 参数2:修改 参数3:表名称(也可以是具体集合名) mongoTemplate.updateFirst(query, update, "testUser"); }
(4)查
@Override public TestUser getOneMongoDB(String userName) { Query query = Query.query(Criteria.where("userName").is(userName)); //findOne() 返回一个文档满足指定的查询条件。如果有多个文档满足查询条件,则返回第一个文档 TestUser user = mongoTemplate.findOne(query, TestUser.class); return user; } @Override public List<TestUser> getManyMongoDB(String userName) { Query query = Query.query(Criteria.where("userName").is(userName)); //find() 返回所有满足条件的文档 List<TestUser> testUserList = mongoTemplate.find(query, TestUser.class, "testUser"); return testUserList; } @Override public List<TestUser> getAllMongoDB() { //findAll() 返回集合中所有的文档 List<TestUser> testUserList = mongoTemplate.findAll(TestUser.class, "testUser"); return testUserList; } @Override public List<TestUser> getFuzzyMongoDB(String userName) { //设置正则规则 //Pattern.CASE_INSENSITIVE 启用不区分大小写的匹配 Pattern pattern = Pattern.compile("^.*" + userName +".*$", Pattern.CASE_INSENSITIVE); Query query = Query.query(Criteria.where("userName").regex(pattern)); List<TestUser> testUserList = mongoTemplate.find(query, TestUser.class); return testUserList; } @Override public List<UserDTO> getpageMongoDB() { Query query = new Query(); //跳过10条,每页显示5条 query.skip(10).limit(5); List<UserDTO> testUserList = mongoTemplate.find(query, UserDTO.class, "user"); //总个数 long count = mongoTemplate.count(query, "user"); System.out.println(count); return testUserList; }
四、其他相关概念和方法
Criteria类:封装所有的语句,以方法的形式进行查询。
Query类:将语句进行封装或者添加排序之类的操作。
Criteria类常用的方法:
- andOperator
等同$and
,并且 - orOperator
等同$or
,或者 - gt
等同$gt
,大于 - gte
等同$gte
,大于等于 - in
等同$in
,包含 - nin
等同$nin
,不包含 - is
等同$is
,等于 - lt
等同$lt
,小于 - lte
等同$lte
,小于等于