【mongodb】springboot整合mongodb

引入依赖

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

application.yml

1、没有密码

spring:
  data:
    mongodb:
      uri: mongodb://服务器IP:端口/数据库名

2、有密码

spring:
  data:
    mongodb:
      uri: mongodb://用户名:密码@服务器IP:端口/数据库名
      # 也可以使用admin 数据库中的用户进行连接  统一到admin 数据库进行认证
      # admin 用户认证 url 写法: mongodb://账户:密码%40@ip:端口/数据库名?authSource=admin&authMechanism=SCRAM-SHA-1

注意:

mysql 一个普通用户可以管理多个数据库

但是mongo每一个库都有一个独立的管理用户,连接时需要输入对应用户密码【一对一】

config

/**
 * 监听mongodb 保存数据
 * @author jane
 * @date 2022/8/16
 */
public class ApplicationReadyListener implements ApplicationListener<ContextRefreshedEvent> {
    @Autowired
    MongoTemplate mongoTemplate;

    private static final String TYPEKEY="_class";

    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        MongoConverter converter = mongoTemplate.getConverter();
        if (converter.getTypeMapper().isTypeKey(TYPEKEY)){
            ((MappingMongoConverter)converter).setTypeMapper(new DefaultMongoTypeMapper(null));
        }
    }
}

pojo

注意:不要写错,是collection 指定表名

@Data
//要指定表名
@Document(collection = "student")
public class Student {
    /**
     * 要指定id,如果不指定,就会默认生成objectId类型的_id字段
     */
    @Id
    private Long id;
    private String username;
    private LocalDateTime timer;
}

service

接口 :

public interface IStudentService {
    //插入学生
    int insert(Student student);
    //修改学生
    int update(Student student);
    //删除学生
    int delete(Long id);
    //精准查询
    Student findOne(Student student);
    //模糊查询
    List<Student> findLike(Student student);
    //精准查询
    List<Student> findMore(Student student);
    //时间倒叙查询
    List<Student> findTime();
    //分页查询
    List<Student> findByPage(Student student,int num,int size);
}

实现类:

查询:new Query(Criteria.where is and d等等)

删除:remove

更新:update

插入:Insert

@Service
public class StudentServiceImpl implements IStudentService{
    //必须引入
    @Autowired
    MongoTemplate mongoTemplate;

    @Override
    public int insert(Student student) {
        try {
            student.setTimer(LocalDateTime.now());
            mongoTemplate.insert(student);
            return 1;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

    @Override
    public int update(Student student) {
        Query query = new Query(Criteria.where("_id").is(student.getId()));
        Update update = new Update().set("username", student.getUsername());
        try {
            mongoTemplate.updateFirst(query,update,Student.class);
            return 1;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

    @Override
    public int delete(Long id) {
        Query query = new Query(Criteria.where("id").is(id));
        try {
            mongoTemplate.remove(query,Student.class);
            return 1;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

    @Override
    public Student findOne(Student student) {
        //判空
        Query query = new Query(Criteria.where("id").is(student.getId()));
        Student one = mongoTemplate.findOne(query, Student.class);
        return one;
    }

    @Override
    public List<Student> findLike(Student student) {
        //这个正则我还不太知道是什么?
        //匹配不必考虑大小写(大写或小写)
        Pattern pattern = Pattern.compile("^.*" + student.getUsername().trim() + ".*$", Pattern.CASE_INSENSITIVE);
        Query query = new Query(Criteria.where("username").regex(pattern));
        List<Student> studentList = mongoTemplate.find(query, Student.class);
        return studentList;
    }

    @Override
    public List<Student> findMore(Student student) {
        Query query = new Query(Criteria.where("username").is(student.getUsername()));
        List<Student> students = mongoTemplate.find(query, Student.class);
        return students;
    }

    @Override
    public List<Student> findTime() {
        Query query = new Query();
        query.with(Sort.by(Sort.Direction.DESC,"timer"));
        List<Student> students = mongoTemplate.find(query, Student.class);
        return students;
    }

    /**
     * 分页查询
     * @param student
     * @param num 当前页
     * @param size 每页的大小
     * @return
     */
    @Override
    public List<Student> findByPage(Student student,int num,int size) {
        int pageSize= Optional.ofNullable(size).orElse(5);
        int pageNum=Optional.ofNullable(num).orElse(1);

        Query query = new Query();
        query.with(Sort.by(Sort.Direction.DESC,"timer"));
        query.skip((pageNum-1)*pageSize).limit(pageSize);
        List<Student> students = mongoTemplate.find(query, Student.class);
        return students;
    }
}

猜你喜欢

转载自blog.csdn.net/kanseu/article/details/126357596