mongodb下载使用 集成springboot 使用 MongoRepository

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

集成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

至此完成

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot集成MongoDB可以通过以下步骤实现: 1. 添加Maven依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> ``` 2. 配置MongoDB连接信息 在application.properties文件中添加MongoDB连接信息: ``` spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=mydb ``` 3. 创建实体类 创建一个实体类,用于映射MongoDB中的文档。 ``` @Document(collection = "users") public class User { @Id private String id; private String name; private int age; // getters and setters } ``` 4. 创建MongoDB操作接口 创建一个接口,用于定义MongoDB的操作方法。 ``` public interface UserRepository extends MongoRepository<User, String> { List<User> findByName(String name); } ``` 5. 使用MongoDB操作接口 在需要使用MongoDB的地方,注入MongoDB操作接口,并调用相应的方法。 ``` @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> findUsersByName(String name) { return userRepository.findByName(name); } } ``` 以上就是Spring Boot集成MongoDB的基本步骤。 ### 回答2: Spring Boot 是一个基于 Spring 框架的开源项目,可用于快速构建 Spring 应用程 序。而 MongoDB 是一个开源的 NoSQL 数据库,具有高效的 JSON 数据处理能力和非常灵活的数据模型。在实际的业务环境中,Java Web 应用程序使用 MongoDB 越来越受欢迎。本文介绍如何在 Spring Boot 框架中集 成 MongoDB 数据库。 1. 添加 MongoDB 依赖 在使用 Spring Boot 集成 MongoDB 之前,需要在 pom.xml 文件中添加 MongoDB 的依赖。可以从 Maven 仓库中获取以下依赖: <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.7</version> </dependency> 2. 配置 MongoDB 数据库 在应用程序的配置文件中,可以配置 MongoDB 数据库使用的相关参数,如主机名、端口号、密码等。示例: spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=mydatabase spring.data.mongodb.username=myusername spring.data.mongodb.password=mypassword 3. 创建 MongoDB Repository 创建一个接口,并继承 org.springframework.data.mongodb.repository.MongoRepository,该接口将自动识别实体类并生成基本的 CRUD 操作方法。示例: @Repository public interface UserRepository extends MongoRepository<User, String> { } 在上面代码中,User 为实体类,String 为 ID 字段的类型。 4. 编写 MongoDB Service 创建一个包含 MongoDB Repository 的 Service 类。Service 可以处理业务逻辑,并使用自动注入的 MongoDB Repository 进行数据库操作。示例: @Service public class UserService { @Autowired private UserRepository userRepository; public User addUser(User user) { return userRepository.save(user); } public User findUserById(String id) { Optional<User> optionalUser = userRepository.findById(id); return optionalUser.orElse(null); } public List<User> findAllUsers() { return userRepository.findAll(); } public void deleteUserById(String id) { userRepository.deleteById(id); } } 5. 测试 MongoDB Service 编写一个基于测试驱动开发的测试类,并在测试中使用 UserService。示例: @RunWith(SpringRunner.class) @SpringBootTest public class UserServiceTests { @Autowired private UserService userService; @Test public void addUserTest() { User user = new User(); user.setName("张三"); user.setAge(20); userService.addUser(user); User userInDb = userService.findUserById(user.getId()); Assert.assertEquals(user, userInDb); } @Test public void deleteUserTest() { User user = new User(); user.setName("李四"); user.setAge(22); userService.addUser(user); userService.deleteUserById(user.getId()); User userInDb = userService.findUserById(user.getId()); Assert.assertNull(userInDb); } } 综上所述,本文介绍了如何在 Spring Boot 框架中集成 MongoDB 数据库。首先,需要添加 MongoDB 的依赖。然后,配置 MongoDB 的相关参数,并创建 MongoDB Repository。接下来,编写 MongoDB Service 并测试其功能。集成 MongoDB 数据库提供了一个可靠的选择来存储和管理应用程序数据。 ### 回答3: Spring Boot 是一种基于 Spring Framework 的框架,支持快速应用开发。在此框架下,使用 NoSQL 数据库 MongoDB集成也十分简单。本文将介绍 Spring Boot 集成 MongoDB 的详细步骤。 1.添加 MongoDB 依赖 首先需要在 pom.xml 文件中添加关于 MongoDB 的依赖,对于 Spring Boot 1.x 版本,我们可以选择添加 spring-boot-starter-data-mongodb 或者 spring-data-mongodb 的依赖,而在 Spring Boot 2.x 版本中,我们只需要添加 spring-boot-starter-data-mongodb 即可。 2.配置 MongoDB 数据库 在 application.properties 或 application.yml 中设置 MongoDB 的连接信息,例如: spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=test 3.创建 MongoDBRepository 接口 我们在项目中需要定义用于与 MongoDB 数据库进行交互的 Repository 接口,Spring Data MongoDB 提供了丰富的 Repository 接口,比如 MongoRepository、PagingAndSortingRepository、CrudRepository等。 @Repository public interface UserRepository extends MongoRepository<User, String> { User findByUserName(String userName); } 代码中,@Repository 注解使 UserRepository 成为 Spring Bean,并继承 MongoRepository 接口。在 UserRepository 中,我们只需要定义自己需要的方法,其他方法将会被继承(例如 findById、save、delete 等等)。在本例中,findByUserName 返回根据用户名查询的用户对象。 4.将 MongoDB 数据库操作与控制器绑定 在控制器中注入 UserRepository,并使用其中定义的方法实现对数据库记录的增删改查等操作。 @RestController @RequestMapping("/users") public class UserController { @Autowired private UserRepository userRepository; @PostMapping public User save(User user) { return userRepository.save(user); } @GetMapping public List<User> findAll() { return userRepository.findAll(); } } 5.测试 MongoDB 集成 至此,我们已经完成了 Spring Boot 对 MongoDB集成,可以使用 Postman 或者其他工具进行测试。在本文中,测试的方法就不再赘述了。 总结 Spring Boot 集成 MongoDB 极其简单,只需要三步即可完成: 添加 MongoDB 依赖 在 application.properties 或者 application.yml 中配置 MongoDB 数据库 定义 MongoDBRepository 接口 在进行集成后,我们可以使用定义好的 Repository 接口进行数据库操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值