SpringBoot集成MongoDB
1、导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--spring boot data mongodb-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
2、添加配置类以及配置 mongo 的数据库连接
# application.properties
# 配置数据库连接
#格式: mongodb://账号:密码@ip:端口/数据库?认证数据库
#spring.data.mongodb.uri=mongodb://root:admin@localhost/mongodemo?authSource=admin
#spring.data.mongodb.uri=mongodb://localhost/mongodemo
spring:
data:
mongodb:
uri: mongodb://localhost/mongo_test
# 配置MongoTemplate的执行日志
#logging.level.org.springframework.data.mongodb.core=debug
logging:
level:
org.springframework.data.mongodb.core: debug
创建一个MongoConfig配置类, 去掉 _class 属性
@Configuration
public class MongoConfig {
//mongodb 去除_class属性
@Bean
public MappingMongoConverter mappingMongoConverter(MongoDatabaseFactory factory, MongoMappingContext context, BeanFactory beanFactory) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
try { mappingConverter.setCustomConversions(beanFactory.getBean(CustomConversions.class));
} catch (NoSuchBeanDefinitionException ignore) {
}
// Don't save _class to mongo
mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
return mappingConverter;
}
}
3、Entity 实体类
@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter
@ToString
@Document("users") //设置文档所在的集合
public class User {
//文档的id使用ObjectId类型来封装,并且贴上@Id注解,
// 自动映射为_id 自动封装ObjectId
@Id
private String id;
private String name;
private Integer age;
private List<String> hobby = new ArrayList<>();
}
4、创建一个 UserRepository 接口实现 mongo 提供的 MongoRepository(注意这里的 repository 就相当于是 mapper)
public interface UserRepository extends MongoRepository<User, String> {
User findByName(String name);
}
5、IUserService 接口
public interface IUserService {
void save(User user);
void update(User user);
void deleteById(String id);
User findById(String id);
List<User> findAll();
Page<User> page(Pageable pageable);
}
6、UserServiceImpl 实现类
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private UserRepository userRepository;
@Autowired
private MongoTemplate mongoTemplate;
@Override
public void save(User user) {
userRepository.save(user);
}
@Override
public void update(User user) {
userRepository.save(user);
}
@Override
public void deleteById(String id) {
userRepository.deleteById(id);
}
@Override
public User findById(String id) {
return userRepository.findById(id).orElseGet(null);
}
@Override
public List<User> findAll() {
return userRepository.findAll();
}
@Override
public Page<User> page(Pageable pageable) {
Query query = new Query();
long total = mongoTemplate.count(query, User.class);
query.skip((pageable.getPageNumber() - 1) * pageable.getPageSize())
.limit(pageable.getPageSize());
List<User> userList = mongoTemplate.find(query, User.class);
return new PageImpl<User>(userList, pageable, total);
}
}
7、创建测试类
@SpringBootTest
public class MongoDBTest {
@Autowired
private IUserService userService;
@Autowired
private UserRepository userRepository;
@Autowired
private MongoTemplate mongoTemplate;
@Test
public void testSave(){
User user = new User();
user.setName("张三");
user.setAge(18);
userService.save(user);
}
@Test
public void testUpdate(){
User user = new User();
user.setId("63ad47162a17000069003f31");
user.setId("21L");
user.setName("李四");
user.setAge(18);
userService.update(user);
}
@Test
public void testDelete(){
userService.deleteById("5de507fca0852c6c7ebc1eac");
}
@Test
public void testGet(){
System.out.println(userService.findById("21L"));
}
@Test
public void testList(){
userService.findAll().forEach(System.err::println);
}
@Test
public void findByNameTest() {
System.out.println(userRepository.findByName("张三"));
}
@Test
public void pageTest() {
PageRequest pageable = PageRequest.of(3, 5);
Page<User> page = userService.page(pageable);
page.getContent().forEach(System.err::println);
}
8、最后别忘了启动类
@SpringBootApplication
public class MongoDBApplication {
public static void main(String[] args) {
SpringApplication.run(MongoDBApplication.class, args);
}
}