美文网首页
2019-12-28

2019-12-28

作者: 青春留不住_72dc | 来源:发表于2019-12-28 14:55 被阅读0次

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);
        }
    }
}

相关文章

  • Windows系统Xlog-加密使用指引

    title: Windows系统Xlog-加密使用指引date: 2019-12-28 17:40:50categ...

  • 2019-12-29

    2019-12-28 【日精进打卡第 644 天 【知~学习】 《六项精进》大纲 4 遍共 2432 遍 《大学》...

  • 写《机器学习背后的思维: 针对入门小白的概念、算法及工具的朴素思

    2019-12-28,2020-02-01机器学习背后的思维 - 针对入门小白的概念、算法及工具的朴素思考 因涉及...

  • 2019-12-28晨间日记

    2019-12-28晨间日记 今天印象 天气:晴 心情:愉快 任务清单 已完成:练习 未完成:暂无 待更新:学习

  • 继续锻炼

    ❤️焦点·智慧父母课堂【肖丹分享第184天·运动第173天·读书第24天~2019-12-28】 今天想还说说关于...

  • 鉴峰丨未来已来,如何应对?

    鉴峰自我管理 [连续签到第717天] 2019-12-28 周六 未来已来, 面对未知, 你我如何应对? 1.认知...

  • 格物日记(24)《低界生活》

    格物日记(24)2019-12-28 《低界生活》 昨天彻底看清我目前还在“鬼界”和“身界”之间,我才终下决心清理...

  • 2019-12-28

    2019-12-28 日精进打卡 姓名:彭新 宁波蓝天白云供应链管理有限公司 【日精进打卡第638天】 【知~学习...

  • 临帖

    2019-12-28 23:11 静下心来,继续临帖。 先临《石鼓文》,后临颜真卿《勤礼碑》,篆书与楷书互相促进,...

  • 2019-12-28

    2019-12-28 扬州市方圆建筑工程有限公司 377期利他2组 【日精进打卡第621天】 【知~背诵】 《六项...

网友评论

      本文标题:2019-12-28

      本文链接:https://www.haomeiwen.com/subject/vqssoctx.html