2019-12-28

2019-12-28  本文已影响0人  青春留不住_72dc

Spring Data MongoDB 的基本使用

Spring Data介绍

Spring Data: Spring 的一个子项目。用于简化数据库访问,支持NoSQL和关系数据库存储。其主要目标是使数据库的访问变得方便快捷。
Spring Data 项目所支持NoSQL存储:

  - - MongoDB(文档数据库)

  - - Neo4j (图形数据库)

  - - Redis(键/值存储)

  - - Hbase(列族数据库)

Spring Data 项目所支持的关系数据存储技术:

   - - JDBC

   - - JPA

使用Spring Data 可以操作关系型数据库和非关系型数据库,并且使用SpringBoot 无缝整合,用起来非常的方便.

Spring Data MongoDB 的介绍

Spring Data MongoDB项目提供了与MongoDB文档数据库的集成。Spring Data MongoDB的关键功能区域是一个以POJO为中心的模型,该模型用于与MongoDB DBCollection进行交互并轻松编写存储库样式的数据访问层。

基本使用

导入依赖

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

在application.properties去配置连接信息

#格式: mongodb://账号:密码@ip:端口/数据库?认证数据库
spring.data.mongodb.uri=mongodb://localhost/mytest

# 配置MongoTemplate的执行日志
logging.level.org.springframework.data.mongodb.core=debug

我们操作MongoDB也是以面向对象的思想去操作
创建domain模型

@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter
@ToString
@Document("users") //设置文档所在的集合
public class User {
    @Id //文档的id使用ObjectId类型来封装,并且贴上@Id注解
    private ObjectId _id;

    private Long id;
    private String name;
    private Integer age;
}

下一步 也是有持久层的,但是和之前MyBatis的mapper接口有所区别

/**
 * 这里需要自己创建一个接口去实现MongoRepository
 * 有两个泛型 第一泛型是domain的模型
 *          第二个泛型是主键的类型
 * 然后还需要贴一个@Repository 把当前的接口交给spring去管理
 */
@Repository
public interface UserRepository extends MongoRepository<User, ObjectId> {
}

这个接口里面我们什么方法都没有,那么如何完成基本的功能那?可能有的同学会好奇了,而且继承的MongoRepository里面有什么方法那下面我们一起来看一下这个接口里面都有什么方法.


image.png

发现这个接口里面有insert方法还有findAll的方法查询的操作,但是想要完成一些删除和更新的操作还是不能够完成的.
这个时候我们要点到他的父接口中


image.png
发现他的父接口中也只有两个简单的方法,但是我们看他这个接口的父接口是一个叫CrudRepository的接口,那么大家应该也是可以猜出来了他里面就有CRUD的方法.
image.png

看到里面确实有CRUD的方法,那也就是我们自己仅仅是写了一个接口去继承了MongoRepository 其他的什么都没有做,是不是感觉很简单啊.接下来我们就一起测试一下.

@RunWith(SpringRunner.class)
@SpringBootTest
public class MongoRepositoryTests {

    @Autowired
    UserRepository userRepository;
    //新增和更新
    //如果在调用save方法的时候发现已经有这个数据了,那么会进行更新操作
    @Test
    public void test1(){
        User user = new User();
        user.setAge(1);
        user.setId(1L);
        user.setName("zhangsan");
//        user.set_id(new ObjectId("5dff3649dca5d05382e3baa4"));
        userRepository.save(user);

    }
  //删除操作
    @Test  
    public void test2(){
        User user = new User();
        user.set_id(new ObjectId("5dff3ea204a81b124ad6daa1"));
//        mongoTemplate.remove(user);
        userRepository.delete(user);
    }
  //查询单个
    @Test
    public void test3(){
        Optional<User> opt = userRepository.findById(new ObjectId("5dff368f05411c1eafc88c6e"));
        if(opt.isPresent()){
            System.out.println(opt.get());
        }
//
//        User user = mongoTemplate.findById(new ObjectId("5dff368f05411c1eafc88c6e"), User.class);
//        System.out.println(user);
    }
  //查询所有数据
    @Test
    public void test4(){
//        List<User> all = mongoTemplate.findAll(User.class);
//        for (User user : all) {
//            System.out.println(user);
//        }

        List<User> all = userRepository.findAll();
        for (User user : all) {
            System.out.println(user);
        }
    }
//排序操作
    @Test
    public void test5(){
        List<User> age = userRepository.findAll(Sort.by(Sort.Direction.ASC, "age"));
        for (User user : age) {

            System.out.println(user);
        }
    }
  //分页操作
    @Test
    public void test6(){
        Page<User> all = userRepository.findAll(PageRequest.of(0, 3));
        for (User user : all) {
            System.out.println(user);
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读