Java使用morphia3.0框架连接mongodb7.0,配合springboot3食用

MongoDB框架简单使用教程

  • 环境 mongodb7 springboot3 java17

依赖

 ```xml
	<dependencies>
        <dependency>
            <groupId>dev.morphia.morphia</groupId>
            <artifactId>morphia-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15to18</artifactId>
            <version>1.78.1</version>
        </dependency>
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bc-fips</artifactId>
            <version>1.0.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bctls-jdk18on</artifactId>
            <version>1.78.1</version>
        </dependency>

        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>auth</artifactId>
            <version>2.20.0</version> 
        </dependency>
	</dependencies>

    <repositories>
    	<!-- mogodb 框架快照仓库		-->
    	<repository>
    		<id>sonatype-snapshots</id>
    		<url>https://oss.sonatype.org/content/repositories/snapshots</url>
    		<snapshots>
    			<enabled>true</enabled>
    		</snapshots>
    	</repository>
    </repositories>
 ```

配置: 配合spring使用可以将Store注入容器中使用

  • MongoConfig.java
     public class MongoConfig {
    
                                               /** 域名或ip:端口号 */ 
         private static String url = "mongodb://localhost:27017";
    
         private MongoClient mongoClient;
    
         private Datastore datastore;
    
         // 调用此方法创建Datastore 使用改对象进行增删改查
         public void buildMongo(){
             createMongoClient();
             createMongoDatastore();
         }
    
         public void createMongoClient() {
             mongoClient = MongoClients.create(builder()
                 .uuidRepresentation(STANDARD)
                 .applyConnectionString(new ConnectionString(url))
                 .build());
         }
    
         public void createMongoDatastore(){
             // 注册 Bouncy Castle 加密提供者
             Security.addProvider(new BouncyCastleProvider());
             // 注册 Bouncy Castle JSSE 提供者
             Security.addProvider(new BouncyCastleJsseProvider());
             // 读取配置文件,使用springBoot放于resource目录
             MorphiaConfig morphiaConfig = MorphiaConfig.load("morphia-config.properties");
             datastore = Morphia.createDatastore(mongoClient,morphiaConfig);
         }
    
         public void stop() {
              mongoClient.close();
         }
     }
    
  • morphia-config.properties
    ######
    # default=false
    ######
    morphia.apply-caps=false
    ######
    # default=false
    ######
    morphia.apply-document-validations=false
    ######
    # default=false
    ######
    morphia.apply-indexes=false
    ######
    # Optional
    ######
    morphia.codec-provider=
    ######
    # default=camelCase
    # possible values=camelCase, identity, kebabCase, lowerCase, snakeCase, fqcn
    ######
    morphia.collection-naming=camelCase
    ######
    # default=morphia
    ######
    morphia.database=连接数据库名
    ######
    # default=utc
    # possible values=utc, system_default
    ######
    morphia.date-storage=utc
    ######
    # default=simpleName
    # possible values=className, lowerClassName, lowerSimpleName, simpleName, fqcn
    ######
    morphia.discriminator=simpleName
    ######
    # default=_t
    ######
    morphia.discriminator-key=_t
    ######
    # default=false
    ######
    morphia.enable-polymorphic-queries=false
    ######
    # default=false
    ######
    morphia.ignore-finals=false
    ######
    # default=.*
    ######
    morphia.packages=.*
    ######
    # default=fields
    # possible values=fields, methods
    ######
    morphia.property-discovery=fields
    ######
    # default=identity
    # possible values=camelCase, identity, kebabCase, lowerCase, snakeCase, fqcn
    ######
    morphia.property-naming=identity
    ######
    # default=dev.morphia.query.DefaultQueryFactory
    ######
    morphia.query-factory=dev.morphia.query.DefaultQueryFactory
    ######
    # default=false
    ######
    morphia.store-empties=false
    ######
    # default=false
    ######
    morphia.store-nulls=false
    

实体类

  ```java
    @Data
    @Entity("login") // 集合名称
    @Indexes(
            @Index(fields = @Field("salary")) // 设置索引,可设置多个
    )
    public class Login {
        // id
        @Id 
        private ObjectId id;
        
        // 其他集合可作为本集合对象,用Reference修饰
        @Reference
        private Employee manager;
        
        // 可自定义存储在集合中的字段名
        @Property("money")
        private Double salary;
        
        // 正常情况可无需注解
        private Double day;
    
        private String username;
        
        private String password;
    
        public Login(Message.Entity entity){
            Message.User user = entity.getUser();
            this.username = user.getUsername();
            this.password = user.getPassword();
        }
    }
  ```

基本操作

 // 创建数据
 private Message.Entity create(Message.Entity entity) {
     Login login = Login.fromEntity(entity);
     if (null != login.getPassword() && null != login.getUsername()) {
         // 获取对象 新增到数据库  
         datastore.insert(login);
         return entity;
     }else {
         return Message.Entity.newBuilder().setCode(500).build();
     }
 }

 /**
  * 验证账号密码
  *
  * @param entity
  * @return
  */
 private Message.Entity valid(Message.Entity entity) {
     System.out.println(entity.getUser().getPassword()+" "+entity.getUser().getUsername());
     // 根据类创建条件
     Query<Login> logins = datastore.find(Login.class);
     // 具体条件查询 详情参考官方文档 https://morphia.dev/morphia/3.0/quicktour.html
     MorphiaCursor<Login> userIter = logins.filter(Filters
         .eq("username", entity.getUser().getUsername()))
         .iterator();
     // 迭代器没有数据
     if (null == userIter || !userIter.hasNext()) {
         return errorMsg("");
     }
     // 获取查询到的数据
     userIter.hasNext().next();
     System.out.println(entity.toByteArray().length);
     return entity;
 }
  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值