mongodb-springboot

1、单数据源配置

依赖:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
	<version>2.6.1</version>
</dependency>

application.properties配置:

#mongodb 2.2版本以上的配置
spring.data.mongodb.uri=mongodb://user:pwd@ip:27017/database

#mongodb 2.2及以下的配置
spring.data.mongodb.host=ip
spring.data.mongodb.port=27017
spring.data.mongodb.username=username
spring.data.mongodb.password=password
spring.data.mongodb.database=mymongodb

#多个 IP 集群可以采用以下配置:
spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database

#用户名:user  
#密码:pwd
#数据库地址:ip
#端口号:27017 
#库名:database

报错: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName=‘user’, source=‘test’, password=, mechanismProperties=}
**解决方式:**uri后添加 ?authSource=admin&authMechanism=SCRAM-SHA-1

事物配置
2、多数据源配置
#SpringBootApplication启动类中加上exclude = {DataSourceAutoConfiguration.class, MongoDataAutoConfiguration.class}
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, MongoDataAutoConfiguration.class})
public class FirstDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(FirstDemoApplication.class, args);
    }
}
#application.properties配置
spring.data.mongodb.first.uri=mongodb://username:pwd@ip:27017/first?authSource=admin&authMechanism=SCRAM-SHA-1
spring.data.mongodb.second.uri=mongodb://username:pwd@ip:27017/second?authSource=admin&authMechanism=SCRAM-SHA-1
@Configuration
public class MultipleMongoConfig {
    // ================== MongoProperties 配置 ===================
    @Bean
    @ConfigurationProperties("spring.data.mongodb.first")
    public MongoProperties firstMongoProperties() {
        return new MongoProperties();
    }

    @Bean
    @ConfigurationProperties("spring.data.mongodb.second")
    public MongoProperties secondMongoProperties() {
        return new MongoProperties();
    }

    // ================== MongoDbFactory 配置 ===================
// mongodb 低版本配置
//    @Bean
//    public MongoDbFactory firstMongoDbFactory(MongoProperties firstMongoProperties) {
//        System.out.println("================== firstMongoDbFactory 配置 ===================");
//        return new SimpleMongoDbFactory(new MongoClientURI(firstMongoProperties.determineUri()));
//    }
// mongodb 高版本配置
    @Bean
    public SimpleMongoClientDatabaseFactory firstMongoDbFactory(MongoProperties firstMongoProperties) {
        return new SimpleMongoClientDatabaseFactory(firstMongoProperties.determineUri());
    }

    @Bean
    public SimpleMongoClientDatabaseFactory secondMongoDbFactory(MongoProperties secondMongoProperties) {
        return new SimpleMongoClientDatabaseFactory(secondMongoProperties.determineUri());
    }

    // ================== MongoTemplate 配置 ===================
    @EnableMongoRepositories(
            basePackages = {
                    "com.open.first.demo.service.mongodb.first",
                    "com.open.first.demo.db.repository",
            },
            mongoTemplateRef = "firstMongoTemplate"
    )
    public class FirstMongoTemplate {
        @Bean
        public MongoTemplate firstMongoTemplate() {
            return new MongoTemplate(firstMongoDbFactory(firstMongoProperties()));
        }
    }

    @EnableMongoRepositories(basePackages = "com.open.first.demo.service.mongodb.second", 
            mongoTemplateRef = "secondMongoTemplate")
    public class SecondMongoTemplate {
        @Bean
        public MongoTemplate secondMongoTemplate() {
            return new MongoTemplate(secondMongoDbFactory(secondMongoProperties()));
        }
    }
}
3、mongodb 的两种操作方式
1、实体类:
@Document(collection="test1")//集合名
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserVo implements Serializable {
    private String name;
    private Integer age;
    private String gender;
}

注解:
@Id:用于字段级别,标记这个字段是一个主键,默认生成的名称是“_id”
@Document :用于类,以表示这个类需要映射到数据库,您也可以指定映射到数据库的集合名称
@DBRef:用于字段,以表示它将使用com.mongodb.DBRef进行存储。
@Indexed:用于字段,表示该字段需要如何创建索引
@CompoundIndex:用于类,以声明复合索引
@GeoSpatialIndexed:用于字段,进行地理位置索引
@TextIndexed:用于字段,标记该字段要包含在文本索引中
@Language:用于字段,以设置文本索引的语言覆盖属性。
@Transient:默认情况下,所有私有字段都映射到文档,此注解将会去除此字段的映射
@PersistenceConstructor:标记一个给定的构造函数,即使是一个protected修饰的,在从数据库实例化对象时使用。构造函数参数通过名称映射到检索的DBObject中的键值。
@Value:这个注解是Spring框架的一部分。在映射框架内,它可以应用于构造函数参数。这允许您使用Spring表达式语言语句来转换在数据库中检索的键值,然后再用它来构造一个域对象。为了引用给定文档的属性,必须使用以下表达式:@Value("#root.myProperty"),root要指向给定文档的根。
@Field:用于字段,并描述字段的名称,因为它将在MongoDB BSON文档中表示,允许名称与该类的字段名不同。
@Version:用于字段锁定,保存操作时检查修改。初始值是0,每次更新时自动触发。

2、集合操作:

方式一:MongoTemplate

	@Resource
    private MongoTemplate mongoTemplate;

方式二:MongoRepository

	@Repository
	public interface UserRepository extends MongoRepository<User, String> {
		@Query(value = "{'name': ?0}", fields = "{'test' : 0}")
    	TestVo findDepartmentByEmployeeName(String empName);

    	List<TestVo> findDepartmentByName(String name);
	}

关于使用简单的 Repositories 方式来操作 MongoDB 这种用法只能实现较简单的操作,使用简单但是灵活性比较差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值