SpringBoot 集成Mongo

150 阅读3分钟

springboot 集成mongDB 简单的crud操作


MongoDB 是一个基于分布式文件存储的数据库
MongoDB 是一个介于关系数据库和非关系数据库之间的产品
数据存储结构为json结构,key-value键值对形式

版本

springboot 1.5.17
JDK 1.8


  1. 添加依赖
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
  1. 配置yml文件

spring:
data:
mongodb:
​ port: 27017
​ database: fpdk
​ host: 127.0.0.1

3.列表项

User

     @Document
        public class User {
        @Id
        private Long id;
        private String name;
        private String grade;   
        private Integer age;
       
        public Long getId() {
            return id;
        }
      
        public void setId(Long id) {
            this.id = id;
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
      
        public String getGrade() {
            return grade;
        }
      
        public void setGrade(String grade) {
            this.grade = grade;
        }
     
        public Integer getAge() {
            return age;
        }
      
        public void setAge(Integer age) {
            this.age = age;
        }
    } 

UserDao

    public interface UserDao  extends MongoRepository<User,Long>{
      
        void deleteById(Long id);
    }
此处采用Spring Data 用于简化数据库访问,支持NoSQL 和 关系数据存储。其主要目标是使数据库的访问变得方便快捷。

此处没有采用Dao 和Dao实现类进行Dao层代码定义,而是采用集成MongoRepository 接口进行方法调用,此接口中实现了很多的查询方法,已经为我们实现类包括各种查询和添加更新删除的方法,还有封装好的分页代码。

MongoRepository接口

public interface MongoRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> 

MongoRepository 集成 PagingAndSortingRepository , QueryByExampleExecutor

MongoRepository中的方法
在这里插入图片描述

PagingAndSortingRepository 接口继承 CrudRepository 接口,其中的方法

在这里插入图片描述

当然你也可以自定义方法
在UserDao中自定义方法;

void deleteById(Long id); 

自定义方法需要按照一定的规则约束 findBy+属性名(首字母大写)

service

    public interface UserService {
    
        List<User> findUserAll();
    
        User findUserById(Long id);
    
        void saveUser(User demoEntity);
    
        void removeUser(Long id);
    
        void updateUser(User user);
    }

serviceimpl

    @Service
    public class Userimpl implements UserService {
    
        @Autowired
        private UserDao userDao;
    
    
        @Override
        public List<User> findUserAll() {
            return userDao.findAll();
        }
    
        @Override
        public User findUserById(Long id) {
    
            return userDao.findOne(id);
        }
    
        @Override
        public void saveUser(User demoEntity) {
            userDao.save(demoEntity);
        }
    
        @Override
        public void removeUser(Long id) {
            userDao.deleteById(id);
        }
    
        @Override
        public void updateUser(User user) {
            userDao.save(user);
        }
    }

测试

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class Test {
    
        @Autowired
        private UserService userService;
    
        @org.junit.Test
        public void test(){
    
            User user = new User();
            user.setId(1L);
            user.setAge(1);
            user.setGrade("111");
            user.setName("zs");
    
            userService.saveUser(user);
    
            user.setId(2L);
            user.setAge(2);
            user.setGrade("22");
            user.setName("ls");
    
            userService.saveUser(user);
     
        }
    }

在这里插入图片描述

另外说明,当添加的对象主键在mongDB中存在时候,mongDB会当做更新去对待,所以上面更新代码是 save();

mongDB注解详解
spring-data-mongodb中的实体映射是通过MongoMappingConverter这个类实现的。它可以通过注释把java类转换为mongodb的文档。

它有以下几种注释:

@Id - 文档的唯一标识,在mongodb中为ObjectId,它是唯一的,通过时间戳+机器标识+进程ID+自增计数器(确保同一秒内产生的Id不会冲突)构成。

@Document - 把一个java类声明为mongodb的文档,可以通过collection参数指定这个类对应的文档。@Document(collection="mongodb") mongodb对应表

@DBRef - 声明类似于关系数据库的关联关系。ps:暂不支持级联的保存功能,当你在本实例中修改了DERef对象里面的值时,单独保存本实例并不能保存DERef引用的对象,它要另外保存,如下面例子的Person和Account。

@Indexed - 声明该字段需要索引,建索引可以大大的提高查询效率。

@CompoundIndex - 复合索引的声明,建复合索引可以有效地提高多字段的查询效率。

@GeoSpatialIndexed - 声明该字段为地理信息的索引。

@Transient - 映射忽略的字段,该字段不会保存到mongodb。

@PersistenceConstructor - 声明构造函数,作用是把从数据库取出的数据实例化为对象。该构造函数传入的值为从DBObject中取出的数据

gtihub地址:

码云 地址: