在Spring Boot中使用Mongodb,首先导入依赖库:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
连接配置
## 阿里云副本实例连接
# spring.data.mongodb.uri=mongodb://账号:密码@dds-primary-pub.mongodb.rds.aliyuncs.com:3717,dds-secondary-pub.mongodb.rds.aliyuncs.com:3717/默认数据库?replicaSet=实例高可用连接地址的唯一标识ID
# spring.data.mongodb.database=默认数据库
# 本机单节点实例spring.data.mongodb.uri=mongodb://localhost:27017/默认数据库
logging.level.root=info
# 打印SQL
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
实体定义:
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
@Data
@Document("note")
public class Note implements Serializable {
@Serial
private static final long serialVersionUID = 5975169180210838347L;
// 主键自动生成
@Id
private String id;
private String name;
@Field("type")
private int type;
@Field("created_at")
private Date createdAt;
}
Repository定义:
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import java.util.Date;
import java.util.List;
public interface NoteRepository extends MongoRepository<Note, String> {
// sort 1:asc,-1:desc
// 注意引号的使用,否则会引起查询不到数据的问题
@Query(value = "{'created_at':{$gte:?0,$lte:?1}}", sort = "{ created_at : -1 }")
List<Note> findByCreateDTime(Date startDate, Date endDate);
@Query(value = "{'name':{$regex:?0}}")
List<Note> findByNameRegex(String name);
@Query(value = "{'name':?0}")
List<Note> findByName(String name);
public long count();
}
入门整理,Service层就省略了,放到Controller
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
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.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.List;
import static java.lang.String.format;
@RestController
@RequestMapping("/note")
@Slf4j
public class NoteController {
@Autowired
private NoteRepository noteRepository;
@Autowired
private MongoTemplate mongoTemplate;
// http://localhost:8080/note/list
@GetMapping("/list")
public Page<Note> getPageList() {
return noteRepository.findAll(Pageable.ofSize(10));
}
// http://localhost:8080/note/id/64fa7d50c96b8b64535a04f9
@GetMapping("/id/{id}")
public Note getListById(@PathVariable String id) {
return noteRepository.findById(id).orElseThrow(RuntimeException::new);
}
// http://localhost:8080/note/date/start/2018-11-07
@GetMapping("/date/start/{date}")
public List<Note> getListByCreatedTime(@PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {
// 复杂逻辑,建议使用这个方法
Query query = new Query();
query.addCriteria(Criteria.where("created_at").gte(date));
List<Note> users = mongoTemplate.find(query, Note.class);
return users;
}
@GetMapping("/date/range/{start}/{end}")
public List<Note> getListByCreatedTimeUsQuery(@PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") Date start, @PathVariable(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date end) {
if (end == null) {
end = new Date();
}
return noteRepository.findByCreateDTime(start, end);
}
// http://localhost:8080/note/name/start/甲
@GetMapping("/name/start/{name}")
public List<Note> getListByStartName(@PathVariable String name) {
return noteRepository.findByNameRegex(format("^%s", name));
}
// http://localhost:8080/note/name/end/??
@GetMapping("/name/end/{name}")
public List<Note> getListByEndName(@PathVariable String name) {
return noteRepository.findByNameRegex(format("%s$", name));
}
// http://localhost:8080/note/name/??
@GetMapping("/name/{name}")
public List<Note> getListByName(@PathVariable String name) {
return noteRepository.findByName(name);
}
@PostMapping("/add")
public Note add(@RequestBody Note note) {
return noteRepository.save(note);
}
}
参考:
阿里云连接实例说明