MongoDB
按照惯例,肯定是要介绍一番的,不想看的朋友可以直接跳到下面的MongoTemplate使用。
MongoDB是一个文档数据库,是一个非关系型数据库(NoSql)。处理速度超级快,同样的数据库还有Redis,被称为性能利器的Redis同样是非关系数据库,但是redis不能运算,尽管有脚本可以辅助,但是终究在某些方面是不如MongoDB的。可以说MongoDB是一个最接近关系型数据库的NoSQL。
为啥这么说呢?
因为MongoDB将数据存储为一个文档,数据结构由键值对组成。这里的MongoDB文档类似于JSON数据集,所以很容易转化成java对象。好了废话不多说了,看看SpringBoot是如何整合的吧。
配置MongoDB
一旦引入了关于starter的依赖,就说明SpringBoot 已经提供了关于它的默认配置。
MongoDB同样是这样的。
看看MongoDB的配置吧
spring:
data:
mongodb:
#数据库名
database: syrain
#地址
host: 127.0.0.1
#端口号
port: 27017
username: #没有可以不写
password: #没有可以不写
只要把上面的配置了就可以连接MongoDB数据库
怎么建表呢?
其实很简单,不用操作你的数据库,直接建java实体类就可以
//MongoDB文档标示,告诉spring这就是MongoDB实体类
@Document(value=“可加可不加,类似于name”)
@Data //lombok插件(有了它不用写getset、tostring了)
public class User implements Serializable {
@Id // 自动生成一个objectId,是MongoDB的唯一标示
private String id;
@Field("user_name") //数据库里该属性叫 user_name
private String userName;
private String note;
private List<Role> roles;
}
这样写完了pojo类就可以用啦。在项目启动后保存会自动根据class分类
MongoTemplate使用
查询:直接@Autowired将MongoTemplate注入到需要的地方,然后调用下面方法
方法 | 返回值 |
---|---|
findById( id, User.class) | User (根据id查某一条数据) |
findById( id, User.class,“集合名”) | User (根据id查某一条数据,根据集合名) |
findOne( query , User.class) | User (根据查询条件,获取第一个数据) |
findOne( query , User.class,“集合名”) | User (根据查询条件和集合名,获取第一个数据) |
find( query, User.class) | List<> (根据条件查询,获取符合条件的集合) |
find( query, User.class, “集合名” ) | List<> (根据条件查询和集合名,获取符合条件的集合 |
findAll( User.class ) | 根据类型查询所有 |
findAll( User.class ,“集合名”) | 根据类型和集合名查询所有 |
其中集合名,就是当类型相同的时候,我们需要给这个集合起个名字存在MongoDB数据库中,要不然两个一样的怎么分辨呢?作为查询的一个参数,String类型的。这个类型在上面提到过的@Document(value=“”)
如果没有填写该value属性,那么就使用默认类名为数据库集合名
新增:分为save和insert; save表示:如果存在相同id,那么就更新属性,如果没有,则新增
方法 | 返回值 |
---|---|
insert(实体对象, “集合名(可省略)” ) | void |
save (实体对象, “集合名(可省略)” ) | void |
以下都是批量新增 | |
insert (集合 <> ,User.class,“集合名(可省略)” ) | void |
insertAll ( 集合 <> ) | void |
更新:分为upsert、updateMulti ;
upsert 更新符合条件的第一条、updateMulti 更新符合条件多个
方法 | 指南 |
---|---|
upsert (query,update, User.class) | 更新指定类型的第一条 |
upsert (query,update, “集合名” ) | 更新指定集合名的的第一条 |
upsert (query,update, User.class,“集合名”) | 更新指定类型指定集合名的第一条 |
updateMulti (query,update, User.class) | 更新指定类型的多条数据 |
updateMulti (query,update, “集合名” ) | 更新指定集合名的多条数据 |
updateMulti (query,update, User.class,“集合名”) | 更新指定类型指定集合名的多条数据 |
Query query =new Query(Criteria.where("id").is(id));
Update update =new Update();
update.set("userName","王二丫");
mongoTemplate.upsert(query,update,User.class);
删除:
方法 | 返回值 |
---|---|
remove (query,User.class) | 根据查询条件指定删除 |
remove (query,User.class ,“集合名”) | 根据集合名和查询条件删除 |
remove(query ,“集合名”) | 根据集合名指定删除 |
remove(“集合名”) | 直接删除该集合 |
其他的一些操作:
方法 | 返回值 |
---|---|
findAndModify | 查找并修改 |
exists | 查看是否存在 |
其中的query是我们需要构建的查询条件。User.class就是我们进行操作的类型
如何重构(Query详解):
https://blog.csdn.net/weixin_42040802/article/details/87696137
Query query =new Query(Criteria.where("id").is(id));
User bbb = mongoTemplate.findOne(query, User.class, "bbb");
JPA方式操作MongoDB
众所周知JPA方式操作数据库提供的接口是JpaRepository,而MongoDB作为最接近关系型数据库的的NoSQL,SpringBoot同时为我们提供了MongoRepository接口。
步骤:
①自己的类继承MongoRepository接口。
②在启动类上加入注解**@EnableMongoRepositories(scanPackages=""),**通过该注解扫描我们自己继承MongoRepository接口的类。
③MongoRepository 所定义的方法,