前言
MongoDB基础教程: MongoDB教程合集 MongoDB教程(易百教程)
spring-data-mongodb注解: Spring中MongoDB注解概念及使用
一、pom.xml依赖配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.scb</groupId>
<artifactId>mongo-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mongo-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.39</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.11</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
二、在application.yml配置文件中配置如下信息
spring:
data:
mongodb:
host: localhost
port: 27017
#MongoDB的数据库名
database: springboot
三、创建实体类
package com.scb.mongodemo.entity;
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.Serializable;
@Data
@Document
public class Role implements Serializable {
private static final long serialVersionUID = -7111768727538023614L;
@Id
private Long id;
@Field("role_name")
private String roleName;
@Field("note")
private String note;
}
package com.scb.mongodemo.entity;
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.Serializable;
import java.util.List;
@Data
@Document
public class User implements Serializable {
private static final long serialVersionUID = -2222439945682451664L;
@Id
private Long id;
@Field("user_name")
private String userName;
@Field("note")
private String note;
@Field("roles")
private List<Role> roles;
}
四、使用MongoRepository实现DAO层操作
package com.scb.mongodemo.repository;
import com.scb.mongodemo.entity.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserRepository extends MongoRepository<User,Long> {
List<User> findByUserNameLike(String userName);
}
注:MongoDB是一个十分接近于关系数据库的NoSQL数据库,因此,它也允许我们使用JPA编程。
有关JPA编程学习的文章:Spring Data JPA学习导引
五、控制层
package com.scb.mongodemo.controller;
import com.scb.mongodemo.entity.Role;
import com.scb.mongodemo.entity.User;
import com.scb.mongodemo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
UserRepository userRepository;
@GetMapping("/{userName}")
public List<User> findByUserName(@PathVariable String userName) {
return userRepository.findByUserNameLike(userName);
}
@PostMapping("/initUsers")
public List<User> initUsers(){
List<User> saveUsers=new ArrayList<>();
for (int i=1;i<=10;i++){
User user=new User();
user.setId((long)i);
user.setUserName("user_name_"+i);
user.setNote("user_note_"+i);
Role role=new Role();
role.setId((long)i);
role.setRoleName("role_name_"+i);
role.setNote("role_note_"+i);
List<Role> roles=new ArrayList<>();
roles.add(role);
user.setRoles(roles);
saveUsers.add(userRepository.save(user));
}
return saveUsers;
}
}
这里因为是测试使用的缘故,就不实现service层了,直接使用UserRepository进行操作。
六、运行测试
注:在运行项目时候,要记得打开MongoDB的服务端。
使用Postman测试工具,以post方式访问 localhost:8080/user/initUsers
可以看到数据已经插入成功了。在使用Robo 3T客户端软件查看数据(当然也使用命令行),发现多了个"_class"属性,这是用来反序列化时候使用的。