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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值