什么是MongoDB
MongoDB是一款开源的文档型数据库,官方网站为 www.mongodb.com
。
Spring 对MongoDB的支持
-
Spring Data MongoDB
-
MongoTemplate
-
Repository
-
安装MongoDB
可以利用Docker来Pull MongoDB,对于Docker的安装以及会遇到的坑可以借助搜索引擎,windows平台的安装会遇到一些小问题,同时需要注意一下官方国内镜像目前已经失效了,可以使用阿里云的镜像。
Mongo登陆
- 登录到 MongoDB 容器中:
docker exec -it mongo bash
- 通过 Shell 连接 MongoDB:
mongo -u admin -p admin
创建库
use mongodemo;
创建用户
db.createUser(
{
user: "springdemo",
pwd: "springdemopwd",
roles: [
{ role: "readWrite", db: "mongodemo" }
]
}
);
创建后可以用 show users
命令验证是否创建成功,当前用户拥有对springbucks库进行读写的权限
创建工程
生成骨架
利用 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
创建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;
}
创建Repository
public interface CarRepository extends MongoRepository<Car, String> {
List<Car> findByName(String name);
}
继承 MongoReposity<T, ID>
接口需要传入Bean的类与ID的类型
Application启动类
@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数据库后线程睡眠1秒钟,修改 audi
的update时间,再将其保存,最后删除Mongo中car的所有记录
数据变化
运行程序过后可见数据变化,audi
的 updateTime
得到了更新
可在mongo控制台中输入 db.car.find();
与 db.car.count();
查看实时数据
到此,Mongo在Spring中最基础的使用已经完成
网友评论