什么是MongoDB
MongoDB是一款開源的文檔型數(shù)據(jù)庫,官方網(wǎng)站為 www.mongodb.com
篇梭。
Spring 對MongoDB的支持
-
Spring Data MongoDB
MongoTemplate
Repository
安裝MongoDB
可以利用Docker來Pull MongoDB,對于Docker的安裝以及會(huì)遇到的坑可以借助搜索引擎隧甚,windows平臺的安裝會(huì)遇到一些小問題强岸,同時(shí)需要注意一下官方國內(nèi)鏡像目前已經(jīng)失效了,可以使用阿里云的鏡像掩宜。
Mongo登陸
- 登錄到 MongoDB 容器中:
docker exec -it mongo bash
- 通過 Shell 連接 MongoDB:
mongo -u admin -p admin
創(chuàng)建庫
use mongodemo;
創(chuàng)建用戶
db.createUser(
{
user: "springdemo",
pwd: "springdemopwd",
roles: [
{ role: "readWrite", db: "mongodemo" }
]
}
);
創(chuàng)建后可以用 show users
命令驗(yàn)證是否創(chuàng)建成功蔫骂,當(dāng)前用戶擁有對springbucks庫進(jìn)行讀寫的權(quán)限
創(chuàng)建工程
生成骨架
利用 start.spring.io
生成骨架,引入Lombok與Mongo依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
配置application.properties
spring.data.mongodb.uri=mongodb://springdemo:springdemopwd@localhost:27017/mongodemo
創(chuàng)建Bean
Mongo所需的注解為 @Document
與 @Id
牺汤,其余注解屬于Lombok
@Document
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Car {
@Id
private String id;
private String name;
private Date createTime;
private Date updateTime;
}
創(chuàng)建Repository
public interface CarRepository extends MongoRepository<Car, String> {
List<Car> findByName(String name);
}
繼承 MongoReposity<T, ID>
接口需要傳入Bean的類與ID的類型
Application啟動(dòng)類
@Slf4j
@SpringBootApplication
@EnableMongoRepositories
public class MongoDemoApplication implements CommandLineRunner {
@Autowired
private CarRepository carRepository;
public static void main(String[] args) {
SpringApplication.run(MongoDemoApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
Car benz = Car.builder()
.name("benz")
.createTime(new Date())
.updateTime(new Date()).build();
Car audi = Car.builder()
.name("audi")
.createTime(new Date())
.updateTime(new Date()).build();
carRepository.insert(Arrays.asList(benz, audi));
carRepository.findAll(Sort.by("name"))
.forEach(car -> log.info("Saved Car {}", car));
Thread.sleep(1000);
audi.setUpdateTime(new Date());
carRepository.save(audi);
carRepository.findByName("audi")
.forEach(car -> log.info("Car {}", car));
carRepository.deleteAll();
}
}
@EnableMongoRepositories
用于開啟Repositories的支持
我們在 run
方法中定義了 benz
與 audi
兩種 Car
辽旋,插入Mongo數(shù)據(jù)庫后線程睡眠1秒鐘,修改 audi
的update時(shí)間檐迟,再將其保存补胚,最后刪除Mongo中car的所有記錄
數(shù)據(jù)變化
運(yùn)行程序過后可見數(shù)據(jù)變化,audi
的 updateTime
得到了更新
可在mongo控制臺中輸入 db.car.find();
與 db.car.count();
查看實(shí)時(shí)數(shù)據(jù)
到此追迟,Mongo在Spring中最基礎(chǔ)的使用已經(jīng)完成