SpringBoot如何使用MongoDB数据库


写在前面

Spring Boot 系列文章源于 深入实践Spring Boot 一书(感谢作者)。时过境迁,我使用了更新的版本来学习。写下系列的博客,一则为了加强记忆,便于回顾,再则也希望帮助到正在学习 Spring Boot 的同学。当然,这也算给自己列下了学习计划吧!


一、依赖配置

MongoDB 是一个开源的NoSQL文档数据库,它使用类似json的模式,而不是传统的基于表的关系数据。Spring Boot为使用MongoDB提供了一些便利,包括spring-boot-starter-data-mongodbspring-boot-start-data-mongodb-reactive “starters”。

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
二、连接 MongoDB

访问 MongoDb,可以注入一个自动配置的 org.springframework.data.mongodb.MongoDbFactory。默认情况下,这个实例将尝试连接到 mongodb://localhost/testmongoDB服务器。下面的例子展示了怎样连接到一个 mongodb 数据库:

import org.springframework.data.mongodb.MongoDbFactory;
import com.mongodb.DB;

@Component
public class MyBean {

	private final MongoDbFactory mongo;

	@Autowired
	public MyBean(MongoDbFactory mongo) {
		this.mongo = mongo;
	}

	// ...

	public void example() {
		DB db = mongo.getDb();
		// ...
	}

}
三、建模

MongoDB 是文档型数据库,使用 MongoDB 也可以像使用关系型数据库那样为文档建模。

@Document(collection = "admin")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Admin {

    @Id
    private String adminId;
    private String username;
    private String password;
    private String email;
    private Date registrationDate;
    private Set<String> roles = new HashSet<>();
}

四、MongoTemplate

Spring Data MongoDB 提供了一个MongoTemplate类,它的设计与Spring的JdbcTemplate非常相似。与JdbcTemplate一样,Spring Boot会自动配置一个bean来注入template

五、Spring Data MongoDB Repositories

MongoDB 也有像使用 JPA 那样的资源库:

@Repository
public interface AdminRepository extends MongoRepository<Admin,String> {
}

MongoDB 的配置如下:

@Configuration
@EnableMongoRepositories(basePackages = {"com.duofei.db.mongodb.repository"})
public class MongoConfig {

    @Bean
    public MongoDbFactory mongoDbFactory(){
        MongoClientURI mongoClientURI = new MongoClientURI("mongodb://localhost/test");
        MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClientURI);
        return mongoDbFactory;
    }

}
六、测试

测试代码如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MongodbTest {

    private static Logger logger = LoggerFactory.getLogger(MongodbTest.class);
    @Autowired
    private AdminRepository adminRepository;

    @Before
    public void setup(){
        HashSet<String> roles = new HashSet<>();
        roles.add("manage");
        Admin admin = new Admin("1", "duofei", "545454", "324@qq.com", new Date(), roles);
        adminRepository.save(admin);
    }

    @Test
    public void findAll(){
        List<Admin> admins = adminRepository.findAll();
        Assert.assertNotNull(admins);
        admins.forEach(admin -> {
            logger.info("===admin=== adminId:{},userName:{},pass:{},email:{},registDate:{},roles:{}",
                    admin.getAdminId(), admin.getUsername(), admin.getPassword(), admin.getEmail(), admin.getRegistrationDate(), admin.getRoles());
        });
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值