mongodb下载使用 集成springboot 使用 MongoRepository

下载地址:传送阵
mongodb下载使用 集成springboot 使用 MongoRepository_第1张图片
mongodb下载使用 集成springboot 使用 MongoRepository_第2张图片
mongodb下载使用 集成springboot 使用 MongoRepository_第3张图片
高级设置= 》配置环境变量
mongodb下载使用 集成springboot 使用 MongoRepository_第4张图片
mongodb下载使用 集成springboot 使用 MongoRepository_第5张图片
打开cmd窗口,输入mongod
mongodb下载使用 集成springboot 使用 MongoRepository_第6张图片
但提示找不到c:\data\db,所以我们要去c盘创建一个data文件夹里面并创建db文件夹,这个路径是默认的数据库的存储路径
mongodb下载使用 集成springboot 使用 MongoRepository_第7张图片
则启动成功,其中mongodb的默认端口是27017
mongodb下载使用 集成springboot 使用 MongoRepository_第8张图片
客户端启动 ,重新打开一个cmd命令窗口,输入mongo即可
mongodb下载使用 集成springboot 使用 MongoRepository_第9张图片
mongodb下载使用 集成springboot 使用 MongoRepository_第10张图片
使用Navicat连接mongodb
mongodb下载使用 集成springboot 使用 MongoRepository_第11张图片
mongodb下载使用 集成springboot 使用 MongoRepository_第12张图片

集成springboot
添加依赖

     
        <!--mongodb 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

配置

spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/test

使用

   创建角色 :db.createUser({user:"root",pwd:"123456",roles:["readWrite"]})
    @Autowired
    private MongoTemplate mongoDbJavaTest;

插入数据
public void  mongoDbJavaSave(){
        List<MongoDbJavaTest> list = new ArrayList<>();
      
        mongoDbJavaTest.setName("admin");
        mongoDbJavaTest.setRemarks("测试");
        list.add(mongoDbJavaTest);
//        保存对象到mongodb
        mongoTemplate.save(mongoDbJavaTest);
        mongoTemplate.insert(mongoDbJavaTest);

//        根据集合名称保存对象到mongodb
        mongoTemplate.save(mongoDbJavaTest,"mongodb_java_test");
        mongoTemplate.insert(mongoDbJavaTest,"mongodb_java_test");
//        根据集合名称保存list到mongodb
        mongoTemplate.save(list,"mongodb_java_test");
        mongoTemplate.insert(list,"mongodb_java_test");
        mongoTemplate.insert(list,MongoDbJavaTest.class);
    }
    
更新数据
        mongoDbJavaTest.setId("5d1312aeb1829c279c6c256b");
        mongoDbJavaTest.setName("admin");
        mongoDbJavaTest.setRemarks("测试");
        Query query = Query.query(Criteria.where("_id").is("5d1312aeb1829c279c6c256b"));
        Update update = Update.update("name","admin");
//        更新一条数据
        mongoTemplate.updateFirst(query,update, MongoDbJavaTest.class);
        mongoTemplate.updateFirst(query,update, "mongodb_java_test");
        mongoTemplate.updateFirst(query,update, MongoDbJavaTest.class,"mongodb_java_test");
//        根据实体更新
        mongoTemplate.update(mongoDbJavaTest.getClass());
//        更新多条数据
        mongoTemplate.updateMulti(query,update, MongoDbJavaTest.class);
        mongoTemplate.updateMulti(query,update,"mongodb_java_test");
        mongoTemplate.updateMulti(query,update, MongoDbJavaTest.class,"mongodb_java_test");
//        更新数据,如果数据不存在就新增
        mongoTemplate.upsert(query,update, MongoDbJavaTest.class);
        mongoTemplate.upsert(query,update,"mongodb_java_test");
        mongoTemplate.upsert(query,update, MongoDbJavaTest.class,"mongodb_java_test");


删除
     public void mongoDbJavaRemove(){
        List<MongoDbJavaTest> list = new ArrayList<>();
        mongoDbJavaTest.setId("5d1312aeb1829c279c6c256b");
        list.add(mongoDbJavaTest);
        Query query =    Query.query(Criteria.where("_id").in("5d1312aeb1829c279c6c256b","5d13133ab1829c29d02ce29c"));
//        根据条件删除
        mongoTemplate.remove(query);
        mongoTemplate.remove(mongoDbJavaTest);
        mongoTemplate.remove(MongoDbJavaTest.class);
//        根据条件删除(可删除多条)
        mongoTemplate.remove(query,CarryUserInfo.class);
        mongoTemplate.remove(query,MongoDbJavaTest.class,"mongodb_java_test");
    }

常用方法

 添加文档主要介绍两种方式:
 mongoTemplate.insert("实体对象","集合名");   往集合插入数据的方式
mongoTemplate.save(对象,集合名(可省略));  参数必须是对象
insert和save都适用
不写集合名,默认对象类名作为集合名(如实体类是A  集合名是a)
写集合名,则把数据写到对应集合下
1.void save(Object var1);                传入对象,不传集合名
2.void save(Object var1, String var2);   传入对象,传集合名
3.void insert(Object var1);              传入对象,不传集合名
4.void insert(Object var1, String var2); 传入对象,传集合名
5.void insert(Collection<? extends Object> var1, Class<?> var2); 
 下面三个方法是批量插入的实现方法
6.void insert(Collection<? extends Object> var1, String var2);
7.void insertAll(Collection<? extends Object> var1);
查询mongodb的操作:
find 和findone方法都有两种实现
1.List<T> find(Query var1, Class<T> var2)               不指定集合名
2.List<T> find(Query var1, Class<T> var2, String var3)  指定集合名
3.<T> T findOne(Query var1, Class<T> var2);             不指定集合名
4.<T> T findOne(Query var1, Class<T> var2, String var3);指定集合名
eg。
maxvalue在数据库中就对应一个集合,可以不指定集合名直接查询
Sl6512014 在数据对应很多集合  必须知道集合名才能查询出数据
         *
findall
1.<T> List<T> findAll(Class<T> var1);   根据类型查询所有
2.<T> List<T> findAll(Class<T> var1, String var2);  查询集合下的该类型数据
findById:
<T> T findById(Object var1, Class<T> var2);  var1  是mongodb的_id子段值
<T> T findById(Object var1, Class<T> var2, String var3);    指定集合名
更新操作:
updateFirst  更新符合条件的第一条   updateMulti  更新多个,符合条件都会更改
 //修改第一条符合条件数据
1.WriteResult updateFirst(Query var1, Update var2, Class<?> var3);                 指定类型
2.WriteResult updateFirst(Query var1, Update var2, String var3);                   更新操作指定集合名
3.WriteResult updateFirst(Query var1, Update var2, Class<?> var3, String var4);    详细指定类型和集合名
 //批量修改
4.WriteResult updateMulti(Query var1, Update var2, Class<?> var3);                 指定类型
5.WriteResult updateMulti(Query var1, Update var2, String var3);                   指定集合名
6.WriteResult updateMulti(Query var1, Update var2, Class<?> var3, String var4);    详细指定类型和集合名
//同updateFirst
7.WriteResult upsert(Query var1, Update var2, Class<?> var3);
 8.WriteResult upsert(Query var1, Update var2, String var3);
 9.WriteResult upsert(Query var1, Update var2, Class<?> var3, String var4);
 删除操作:
1.WriteResult remove(Object var1);
2.WriteResult remove(Object var1, String var2);
 3.WriteResult remove(Query var1, Class<?> var2);                根据条件删除
4.WriteResult remove(Query var1, Class<?> var2, String var3);   详细指定类型和集合名进行删除
 5.WriteResult remove(Query var1, String var2);                 指定集合名进行删除
其他一些操作:简单介绍:
 //查询出后删除
<T> List<T> findAllAndRemove(Query var1, String var2);    指定集合名
 <T> List<T> findAllAndRemove(Query var1, Class<T> var2);   指定类型
<T> List<T> findAllAndRemove(Query var1, Class<T> var2, String var3); 在集合下查询删除的类型数据
//查处后修改
<T> T findAndModify(Query var1, Update var2, Class<T> var3);    指定修改类型
 <T> T findAndModify(Query var1, Update var2, Class<T> var3, String var4);  在集合下修改的数据类型
<T> T findAndModify(Query var1, Update var2, FindAndModifyOptions var3, Class<T> var4);
<T> T findAndModify(Query var1, Update var2, FindAndModifyOptions var3, Class<T> var4, String var5);
<T> T findAndRemove(Query var1, Class<T> var2);
<T> T findAndRemove(Query var1, Class<T> var2, String var3);
//判断是否存在
boolean exists(Query var1, String var2);
boolean exists(Query var1, Class<?> var2);
boolean exists(Query var1, Class<?> var2, String var3);
is相当于等于
in相当于sql中的in
ne相当于不等于
orOperator接受多个条件,组成or逻辑  addOperator同理
Criteria.where("author").is("mongodb")  author = mongodb的数据
Criteria.where("serial").lte(500).and("st").is("1703230781").and("c").in("5.7")   多条件的查询
Criteria.where("st").exists(true)   判断这个字段存在
Criteria.where("serial").ne(1)    不等于1的数据
Criteria.where("serial").nin(1)    nin 不在这个范围中
Criteria.where("serial").is(3).orOperator().is().andOperator() 追加or条件或者and条件
Criteria.where("a").regex("1")   模糊查询   可以用正则表达式
query6.with(new Sort(Sort.Direction.DESC,"a"));  按照a字段把结果降序
query6.skip(n);    跳过结果集的第n个   超过总条数就是啥都不输出   n<=0  时 查询到结束不跳过
query6.skip(n).limit(m)   跳过n条并显示m条记录
query6.addCriteria(Criteria.where("b").is("11"));   再加条件  查询子段不能是上一个query查询过的子段
query6.maxScan(6).skip(-2);   先截取六条数据再跳过两条
分页查询               query.with(new PageRequest(1, 5));


DBObject dbObject = new BasicDBObject();
//dbObject.put("name", "zhangsan");  //查询条件
 
BasicDBObject fieldsObject=new BasicDBObject();
//指定返回的字段
fieldsObject.put("name", true);  
fieldsObject.put("age", true);  
fieldsObject.put("sex", true);  
 
Query query = new BasicQuery(dbObject,fieldsObject);
List<Person> user = mongoTemplate.find(query, Person.class);

常用注解

注解
@Id
主键,不可重复,自带索引,可以在定义的列名上标注,
需要自己生成并维护不重复的约束。如果自己不设置@Id主键,
mongo会自动生成一个唯一主键,并且插入时效率远高于自己设置主键。
原因可参考上一篇mongo和mysql的性能对比。

@Document(collection = "sys_user")
注解@JsonFormat:后端格式化日期后返回给前端
注解 @Builder.Default:设置默认值
注解@DBRef:设置对象的关联
注解@JsonIgnore:后端返回给前端时忽略此字段
  @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
注解@Transient:此字段不会映射到数据库 被该注解标注的,将不会被录入到数据库中。只作为普通的javaBean属性。
给映射存储到 mongodb 的字段取别名
在 java bean 中字段名为 firstName,存储到 mongo 中 key 为 fName

@Field("fName")
private String firstName; 

@Indexed
声明该字段需要加索引,加索引后以该字段为条件检索将大大提高速度。
唯一索引的话是@Indexed(unique = true)。
也可以对数组进行索引,如果被索引的列是数组时,MongoDB会索引这个数组中的每一个元素。
也可以对整个Document进行索引,排序是预定义的按插入BSON数据的先后升序排列。
也可以对关联的对象的字段进行索引,譬如User对关联的address.city进行索引。(注解怎么写还不清楚,待查)


注解 不获取 0 Doc实体类的password 字段  1相反获取的字段 用在接口方法上面
@Query(fields = "{ 'password' : 0}")
List<Doc> findByType(String type, Pageable pageable);



Spring boot集成mongodb使用MongoRepository完成,增,删,改,查 操作

public interface YxMemberMongodbService extends MongoRepository<YxUser,String> {

}

好了,就完成了
有几点需要注意一下

1findOne()方法的替代方法findById()
2.0版本,Spring-Data-Jpa修改findOne()12.0版本之前
T findOne(ID primaryKey);
22.0版本
  Optional<T> findById(ID id); 
2、Optional Optional<T>的使用
文档:Optional
container对象,可能包含也可能不包含非null值。如果存在值,则isPresent()将返回trueget()将返回该值。提供依赖于是否存在包含值的其他方法,例如orElse()(如果值不存在则返回默认值)和ifPresent()(如果值存在则执行代码块)。
Optional<T> findById(ID id)中Optional的一些用法:
1)如果没找到指定实体,则返回一个默认值。
Foo foo = repository.findById(id)
                    .orElse(new Foo());
或者
Foo foo = repository.findById(id)
                    .orElse(null);
2)如果找到实体返回它,否则抛出异常
return repository.findById(id)
        .orElseThrow(() -> new EntityNotFoundException(id));
3)假设希望根据是否找到实体来应用不同的处理(无需抛出异常)
Optional<Foo> fooOptional = fooRepository.findById(id);
if (fooOptional.isPresent()){
    Foo foo = fooOptional.get();
   // 处理 foo ...
}
else{
   //另一种情况....
}

还有修改数据
save方法
insert方法
区别:
 进行数据添加操作时,使用insert:方法,当主键在集合中存在时,不做任何处理, 抛异常
 使用save方法时,当主键在集合中存在时,会进行更新, 数据整体都会更新 ,新数据会替换掉原数据 ID 以外的所有数据。ID 不存在则新增一条数据
 进行数据添加操作时,save 方法需要遍历列表,一个个插入, 而 insert 方法是直接批量插入

基本的使用这个博客讲的不错
地址:https://www.jianshu.com/p/f47621a224a6

至此完成

你可能感兴趣的:(mysql)