一、MongoDB的介绍及特性
- MongoDB是由C++编写的一个介于关系型和非关系型之间的数据库
- MongoDB是一个文档形式存储的数据库,等同于ES,每个文档(document)表示一行记录
- MongoDB中collections(集合)表示一个表
- MongoDB中多个集合(collections)组合起来就是一个数据库
二、MongoDB的优缺点
优点:
- 弱一致性,更能保证用户的访问速度
- json形式的数据存储,结构清晰,简洁
- 性能优越,对于海量数据进行读写操作效率更高效
缺点:
- 不支持事务,对于数据库操作的安全性系数较低
- MongoDB占用空间过大
三、Linux下搭建MongoDB服务
1.下载MongoDB对应的安装包,并解压tar -zxvf mongodb-linux-x86_64-3.4.18.tgz
2.将解压目录改名mv mongodb-linux-x86_64-3.4.18 mongodb
3. 默认情况下 MongoDB 启动后会初始化以下两个目录:
- 数据存储目录:/$PWD/data
- 日志文件目录:/$PWD/log
$PWD等同于当前目录的绝对路径:/data/workspace/mongodb/mongodb
#存储数据
mkdir $PWD/data
#记录日志
mkdir $PWD/log
4.启动MongoDB服务,默认端口27017,出现如图所示表示启动成功
#启动
./mongod --dbpath /data/workspace/mongodb/mongodb/data --logpath /data/workspace/mongodb/mongodb/log/mongod.log --fork
5.robot3T连接MongoDB服务,等同于RedisManager
robo3t下载地址:https://robomongo.org/
四、SpringBoot下调用MongoDB
- 引入对应依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
- application.yml简单配置MongoDB连接
server:
port: 8811
spring:
data:
mongodb:
host: ip
port: 27017
- 编写entity类,用于MongoDB数据进行关系映射
@Data
@Document(collection = "user_base") //等同于mysql表名,默认不填取实体类名
public class User {
//MongoDB下的主键id
private Integer id;
private String name;
private Integer age;
private Integer salary;
}
- 自定义UserRepository接口来继承MongoRepository实现CRUD功能
//User实体类,Integer表示主键id类型
public interface UserRepository extends MongoRepository<User,Integer> {
//自定义查询方法:通过Salary查询并且大于等于某个值
List<User> findUsersBySalaryIsGreaterThanEqual(Integer salaryValue);
}
- 配置项目的主启动类
@SpringBootApplication
public class MongoDbApplication {
public static void main(String[] args) {
SpringApplication.run(MongoDbApplication.class, args);
}
}
- 在test目录下,编写测试用例
@SpringBootTest
public class MongoTest {
@Autowired
private UserRepository userRepository;
//插入5条数据
@Test
public void mongoDbSaveData() {
for (int i = 1; i <= 5; i++) {
User user = new User();
user.setId(i);
user.setName("henry" + i);
user.setAge(i);
user.setSalary(i * 200);
userRepository.save(user);
}
}
//删除数据
@Test
public void deleteMongoDbById() {
//通过id进行匹配删除对应document
userRepository.deleteById(1);
}
//查询所有数据
public void findAllMongoDb() {
List<User> users = userRepository.findAll();
for (User user : users) {
System.out.println(user);
}
}
//通过id查询数据
public void findByIdMongoDb() {
Optional<User> user = userRepository.findById(1);
System.out.println(user);
}
//自定义数据
@Test
public void findBySalaryMongoDb() {
List<User> users = userRepository.findUsersBySalaryIsGreaterThanEqual(500);
for (User user : users) {
System.out.println(user);
}
}
}