- 浏览: 66333 次
文章分类
最新评论
-
小灯笼:
ZooKeeper分布式专题与Dubbo微服务入门网盘地址:h ...
dubbo+zookeeper构建高可用分布式集群 -
qingfengxiu1985:
有没有全部工程代码?发一个呗,邮箱:qingfengxiu19 ...
mongodb+spring +morphia完整版框架搭建
1、@Entity
如果你想通过Morphia把你的对象保存到Mongo中,你首先要做的是使用@Entity注解你的类:
@Entity(value="comm_user_favorite_count",noClassnameStored=true)在@Entity注解中提供了一个可选的参数用来标识是否在文档中保存类名。
2、@Entity实体类,name为collection的名称,noClassnameStored用来标识是否需要存储className字段来表示类名,为什么要使用他哪?保存类名的主要目的是,当你在同一个链接中保存不同的实体对象,但是你想
作为他们的基类或超类来读取。
如:
@Entity("animals") abstract class Animal { String name; }
@Entity("animals") Cat extends Animal { ... }
@Entity("animals") Dog extends Animal { ... }
//And then performing the following query...
List<Animal> animals = ds.createQuery(Animal.class).asList();
正如你看到的,如果不在文档中保存类名,Morphia将不能正确的识别创建那个类。
如果你在一个链接中只保存唯一的实体类型并且你还关心你的数据库大小,在你的@Entity注解上加上noClassnameStored=true
参数将会是安全的。
3、mongoDB默认要持久所有对象 可以同@Transient //这个表示不持久来表示一个字段不持久。
4、@Id
被@Entity注解的类必须有一个唯一的 @Id值;这些值被保存在 MongoDB数据库的“id”属性中,这是一个必须的为索引。被@Id注解的ID是ObjectId类型的,这样,你就不用担心Id的生成问题了,Mongo会自动为你生成一
个唯一的新的ObjectId对象(就行MySQL中的auto_increment类型的ID)。如果你想使用其他的类型作为ID,那么在你保存数据时就必须
手动为ID赋值。
@Id private ObjectId id;
5、 @Indexed
此注解是为某个字段申请一个索引。 当datastore.ensureIndexes() 方法被调用时 这些索引就会被申请
参数说明如下:
value: 表名这个索引的方向; IndexDirection.ASC(升序),IndexDirection.DESC(降序), IndexDirection.BOTH(两者)
默认为 升序;[size=large][/size]
name: 被创建的索引的 名称; mongodb默认创建的索引名的格式为(key1_1/-1_key2_1)
unique: 创建一个唯一索引,当创建唯一索引后,当在此字段插入相同的值时将会报错。true:为唯一索引;false:不是唯一索引。
默认为:false
dropDups:此参数表明,当为某个字段创建唯一索引时,删除其他相同值的记录。只保留第一条记录。true:删除重复,
false:不删除重复(当有重复值时唯一索引创建失败);默认为false.
注意:当在一个存在的系统上,创建已经存在的索引时,将不会花费任何事件(也不会做任何事情)。
Morphia m = .....
Datastore ds = ....
m.map(Product.class);
ds.ensureIndexes(); //为被@Indexed注解的所有字段创建索引。
@Indexes(@Index("userId,category"))根据用户ID,用户类型
6、@Embedded
你可以创建一个类被嵌套在实体类中,在这种情况下我们可以使用@Embedded注解。例如,在Hotel类中 可能会有一个Address。
Address是Hotel不可分割的一部分,没有ID, 并且不会被存储在分开的collection中。在这种情况下我们可以使用@Embedded注解
Address.
@Entity
public class Hotel{
...
@Id
private ObjectId id;
@Embedded(“address”)
private Address address;
...
}
@Embedded
public class Address{
...
}
正如你所看到的,被@Embedded注解的类没有@Id。 这是因为他们经常被嵌套在其他类中。事实上,被@Embedded注解的类也不允许有@Id
7、@Reference
和@Embedded类似,但是被存储在分开的collection中
@Entity
public class BlogEntry {
@Id
private ObjectId id;
private String title;
private Date publishDate;
private String body;
@Reference(“blog _author”)
private Author author;
// getters and setters
}
...
@Entity(“author”)
public class Author {
@Id
private ObjectId id;
private String username;
private String fullName;
private String emailAddress;
// getters and setters
}
@Property
指定对应数据的名称如@Property("started")
@AlsoLoad
Load的时候可以从一个或多个域里取值,但要保证这多个域在同一个document里只出现一次 如 字段定义了 title字段 并注解了 @AlsoLoad({"xxx",”xxx1”}),则可以从数据库的title、xxx、xxx1里取值,但同一个document里只能存在 title、xxx、xxx1里的一个
@NotSaved
只会被load不会被save
@PrePersist – 在保存之前调用
@PostPersist – 保存之后调用
@PreLoad – 在映射成POJO前调用
@PostLoad – 在映射成POJO后调用
如果你想通过Morphia把你的对象保存到Mongo中,你首先要做的是使用@Entity注解你的类:
@Entity(value="comm_user_favorite_count",noClassnameStored=true)在@Entity注解中提供了一个可选的参数用来标识是否在文档中保存类名。
2、@Entity实体类,name为collection的名称,noClassnameStored用来标识是否需要存储className字段来表示类名,为什么要使用他哪?保存类名的主要目的是,当你在同一个链接中保存不同的实体对象,但是你想
作为他们的基类或超类来读取。
如:
@Entity("animals") abstract class Animal { String name; }
@Entity("animals") Cat extends Animal { ... }
@Entity("animals") Dog extends Animal { ... }
//And then performing the following query...
List<Animal> animals = ds.createQuery(Animal.class).asList();
正如你看到的,如果不在文档中保存类名,Morphia将不能正确的识别创建那个类。
如果你在一个链接中只保存唯一的实体类型并且你还关心你的数据库大小,在你的@Entity注解上加上noClassnameStored=true
参数将会是安全的。
3、mongoDB默认要持久所有对象 可以同@Transient //这个表示不持久来表示一个字段不持久。
4、@Id
被@Entity注解的类必须有一个唯一的 @Id值;这些值被保存在 MongoDB数据库的“id”属性中,这是一个必须的为索引。被@Id注解的ID是ObjectId类型的,这样,你就不用担心Id的生成问题了,Mongo会自动为你生成一
个唯一的新的ObjectId对象(就行MySQL中的auto_increment类型的ID)。如果你想使用其他的类型作为ID,那么在你保存数据时就必须
手动为ID赋值。
@Id private ObjectId id;
5、 @Indexed
此注解是为某个字段申请一个索引。 当datastore.ensureIndexes() 方法被调用时 这些索引就会被申请
参数说明如下:
value: 表名这个索引的方向; IndexDirection.ASC(升序),IndexDirection.DESC(降序), IndexDirection.BOTH(两者)
默认为 升序;[size=large][/size]
name: 被创建的索引的 名称; mongodb默认创建的索引名的格式为(key1_1/-1_key2_1)
unique: 创建一个唯一索引,当创建唯一索引后,当在此字段插入相同的值时将会报错。true:为唯一索引;false:不是唯一索引。
默认为:false
dropDups:此参数表明,当为某个字段创建唯一索引时,删除其他相同值的记录。只保留第一条记录。true:删除重复,
false:不删除重复(当有重复值时唯一索引创建失败);默认为false.
注意:当在一个存在的系统上,创建已经存在的索引时,将不会花费任何事件(也不会做任何事情)。
Morphia m = .....
Datastore ds = ....
m.map(Product.class);
ds.ensureIndexes(); //为被@Indexed注解的所有字段创建索引。
@Indexes(@Index("userId,category"))根据用户ID,用户类型
6、@Embedded
你可以创建一个类被嵌套在实体类中,在这种情况下我们可以使用@Embedded注解。例如,在Hotel类中 可能会有一个Address。
Address是Hotel不可分割的一部分,没有ID, 并且不会被存储在分开的collection中。在这种情况下我们可以使用@Embedded注解
Address.
@Entity
public class Hotel{
...
@Id
private ObjectId id;
@Embedded(“address”)
private Address address;
...
}
@Embedded
public class Address{
...
}
正如你所看到的,被@Embedded注解的类没有@Id。 这是因为他们经常被嵌套在其他类中。事实上,被@Embedded注解的类也不允许有@Id
7、@Reference
和@Embedded类似,但是被存储在分开的collection中
@Entity
public class BlogEntry {
@Id
private ObjectId id;
private String title;
private Date publishDate;
private String body;
@Reference(“blog _author”)
private Author author;
// getters and setters
}
...
@Entity(“author”)
public class Author {
@Id
private ObjectId id;
private String username;
private String fullName;
private String emailAddress;
// getters and setters
}
@Property
指定对应数据的名称如@Property("started")
@AlsoLoad
Load的时候可以从一个或多个域里取值,但要保证这多个域在同一个document里只出现一次 如 字段定义了 title字段 并注解了 @AlsoLoad({"xxx",”xxx1”}),则可以从数据库的title、xxx、xxx1里取值,但同一个document里只能存在 title、xxx、xxx1里的一个
@NotSaved
只会被load不会被save
@PrePersist – 在保存之前调用
@PostPersist – 保存之后调用
@PreLoad – 在映射成POJO前调用
@PostLoad – 在映射成POJO后调用
发表评论
-
Java 设计模式源码
2020-08-17 20:17 141经过一段时间学习和实践,整理了绝大多数设计模式源码demo 。 ... -
mac ngrok 使用
2018-12-20 18:22 864ngrok 是一个反向代理,通过在公共端点和本 ... -
Java元组学习
2018-12-19 15:38 604在Java 中我们平时用的接口和方法 只是单一 ... -
密码学2 密码安全注意
2018-11-30 15:11 5801.Java API支持 位于java.security包及子 ... -
base64 和 base32 源码解析
2018-11-30 14:19 1479package com.zd.demo; import ... -
maven 常用命令
2018-01-22 14:43 363mvn compile 编译源代码 mvn test-comp ... -
上传excel 通过url下载文件
2017-07-06 16:22 1052/** * 下载图片 */ ... -
多线程实现原理并发机制
2017-03-07 20:29 815进程: 查询百度大致可以理解为一段具有独 ... -
网络编程TCP/IP协议组
2017-03-04 13:42 542TCP/IP是个协议组: 主要可以分为4层,分别是应 ... -
Guava包的ListenableFuture解析
2016-10-09 13:40 1039package com.downjoy.test.guava. ... -
spring+guava事件异步分发处理
2016-10-09 09:56 4363Guava是Google开源的一个Java基础类库,它在Goo ... -
httpUtil工具和apche httpclient 工具类使用
2016-09-26 15:38 2393httpUtil请求网络请求工具: package demo ... -
mongodb+spring +morphia完整版框架搭建
2016-09-09 10:22 5714Morphia是一个开放源代 ... -
自定义MD5加盐加密方式代码实现
2016-09-02 16:45 5056按照自己的理解对密码加盐加密。当用户注册时候会先生成盐值 ... -
密码学
2016-08-25 11:14 5671 密码学简介 2.1 ... -
kafka
2016-08-11 14:08 705Kafka is a distributed,partiti ... -
dubbo+zookeeper构建高可用分布式集群
2016-08-24 09:47 4950(1) 当服务越来越多时, ... -
java生产6为邀请码
2016-08-09 17:23 1947package demo.dcn.vo; import ... -
jxl
2016-08-09 14:30 490Java生成和操作Excel文件 package dem ... -
UUID
2016-08-05 17:58 319UUID含义是通用唯一识别码 (Universally Uni ...
相关推荐
SpringBoot整合MongoDB详解 MongoDB是一款高性能、无模式的分布式文档型数据库,适用于处理大量数据的场景,尤其适合处理半结构化或非结构化的数据。SpringBoot是Spring框架的一个轻量级模块,旨在简化Spring应用的...
### Spring Boot 使用 MongoDB 详解 #### 一、前言 随着大数据时代的发展,NoSQL 数据库因其灵活性和高性能成为开发者的新宠。MongoDB 作为 NoSQL 数据库中的佼佼者,凭借其面向文档的存储方式、高效查询性能及...
spring-data-mongodb注解详解@Document 将一个java类映射为mongodb的文档@Indexed 声明该字段需要索引,建立索引可以大
对于实体类,需要添加`@Document`注解来指定其对应的MongoDB集合名称: ```java @Document(collection = "users") public class User { @Id private String id; private String username; // getters & ...
为了让 MongoDB 支持远程访问,需要编辑配置文件 `mongod.conf` 并注释掉 `bindIp`。 **命令示例**: ```bash vim /etc/mongod.conf ``` 找到 `bindIp` 行,并将其注释掉或者修改为 `0.0.0.0`。 **命令示例**: ...
并确保旧的`mongo.so`扩展已被移除或注释掉,因为新的MongoDB PHP驱动不支持旧的`mongo` API。 4. **关于API的变化**: 自PHP7开始,旧的`mongo`扩展已被废弃,现在推荐使用`mongodb`扩展,它提供了对MongoDB...
- 创建MongoDB的实体类,使用@Document注解指定对应的集合。 - 创建Mybatis-Plus的Mapper接口,定义数据库操作方法。 - 在Springboot的配置文件application.yml或application.properties中配置Mybatis-Plus的相关...
在测试环境中,可以使用JUnit框架的`@Before`和`@After`注解来初始化和关闭连接,确保每个测试方法都有独立的数据库连接。 总结来说,mongodb-driver为Java开发者提供了方便的API,用于连接、查询、插入、更新和...
详解使用MongoDB+Springboot实现分布式ID的方法 在分布式系统中,生成唯一的ID是非常重要的,否则可能会导致数据混乱。MongoDB提供了一种轻量级的ObjectId机制,可以生成全局唯一的ID。Springboot是Java开发的热门...
#### Spring Data for MongoDB详解 Spring Data for MongoDB是Spring Data项目的一个分支,专为MongoDB设计,旨在降低开发人员使用MongoDB的门槛。通过Spring Data for MongoDB,开发者可以利用熟悉的Spring框架...
8. 如果你想允许远程访问MongoDB,需要编辑`/etc/mongod.conf`文件,取消`bindIp`的注释或将其设置为0.0.0.0,然后重启MongoDB服务: ``` systemctl restart mongod.service ``` 注意:开启远程访问会增加安全...
### MongoDB安装及副本、集群搭建详解 #### 一、MongoDB基本安装流程 **1. 创建MongoDB用户及设置密码** - 在Linux系统中,首先需要为MongoDB创建一个专用的用户账户,并为其设置密码。 ```bash useradd ...
**dbunit-mongodb 模块详解** 在 IT 领域,数据库测试是软件开发过程中不可或缺的一环。MongoDB 是一款流行的开源、分布式文档型数据库,而 DbUnit 是 Java 开发中的一个单元测试框架,主要用于数据库的数据填充和...
### MongoDB Java调用示例详解 #### 一、概述 本文档主要介绍如何在Java环境中使用MongoDB进行数据库操作的基本方法。通过一个简单的Java程序,我们将会了解到如何连接MongoDB服务器、创建数据库、插入文档、查询...
Spring Boot 2.x 教程中的MongoDB使用详解 MongoDB是一个流行的NoSQL数据库系统,设计为分布式存储,提供高性能和可伸缩性。它的数据结构以BSON(Binary JSON)为主,允许存储复杂的数据类型,特别适合Node.js应用...
### MongoDB在Linux上的安装与基本操作详解 #### 一、MongoDB在Linux上的安装 **1. 使用包管理工具或手动下载安装MongoDB** 在大多数Linux发行版上,您可以通过包管理工具轻松安装MongoDB。这里我们将分别介绍...
接下来,为了使权限认证生效,你需要修改 MongoDB 的配置文件 `/etc/mongodb.conf`,取消 `auth=true` 行的注释,并重启服务: ```bash vim /etc/mongodb.conf /etc/init.d/mongod restart ``` 一旦权限认证开启,...
《Spring Boot与MongoDB后台系统开发详解》 在现代Web应用开发中,Spring Boot和MongoDB的结合使用已经成为一种常见的技术栈。本文将深入探讨如何利用这两种技术构建一个高效的后台系统,同时也会提及Node.js在其中...
Spring Boot MongoDB集成与使用实例详解 Spring Boot框架是当前最流行的Java Web框架之一,它提供了许多便捷的功能帮助开发者快速构建Web应用程序。 MongoDB是当前最流行的NoSQL数据库之一,它提供了高性能的数据...
《基于SpringBoot+MongoDB搭建的简约个人博客系统详解》 在现代Web开发领域,SpringBoot框架因其便捷的配置和快速开发能力而备受推崇。同时,随着NoSQL数据库的广泛应用,MongoDB以其灵活性和高性能成为了许多项目...