springboot整合mongodb复杂查询和分页查询

添加依赖

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

配置文件

#端口
server.port=8888
##mongo主机地址
spring.data.mongodb.host=127.0.0.1
##端口号
spring.data.mongodb.port=27017
#数据库名称
spring.data.mongodb.database=test

创建两个实体类测试

@Data
@Document(collection = "student")
public class Student {

    private String id;
    private String name;
    private String unicode;
}
@Data
@Document(collection = "teacher")
public class Teacher {

    private String id;
    private String name;
    private String project;
    private List<Student> students;
}

为了方便test类中测试


@SpringBootTest
class MongodbApplicationTests {

    @Resource
    private MongoTemplate mongoTemplate;
    @Resource
    private MongoUtil mongoUtil;

    @Test
    void addStudent() {
        int a = 1;
        while (a <= 100) {
            Student student = new Student();
            student.setName("name" + a);
            student.setUnicode(UUID.randomUUID().toString());
            Student insert = mongoTemplate.insert(student);
            System.out.println(insert);
            a++;
        }
    }


    @Test
    void findByName() {
        Query query = new Query(Criteria.where("name").is("name1"));
        List<Student> students = mongoTemplate.find(query, Student.class);
        System.out.println(students);
    }

    @Test
    void findByNameAndUnicode() {
//        Query query = new Query(Criteria.where("name").is("name1").and("unicode").is("e24928f8-ef7a-479d-8211-fb4e01c344f5"));
        Student student = new Student();
        student.setName("name1");
        student.setUnicode("e24928f8-ef7a-479d-8211-fb4e01c344f5");
        Query query = new Query(Criteria.byExample(student));
        List<Student> students = mongoTemplate.find(query, Student.class);
        System.out.println(students);
    }

    @Test
    void addTeacher() {
        List<String> str = new ArrayList<>();
        str.add("name1");
        str.add("name2");
        Query query = new Query(Criteria.where("name").in(str));
        List<Student> students = mongoTemplate.find(query, Student.class);
        int a = 1;
        while (a < 100) {
            Teacher teacher = new Teacher();
            teacher.setName("teacher");
            teacher.setProject("project" + a);
            teacher.setStudents(students);
            Teacher insert = mongoTemplate.insert(teacher);
            a++;
        }
    }

    /**
     * 查询list中对象的值
     */
    @Test
    void findTeacher() {
        Query query = new Query(Criteria.where("students.name").is("name1").and("project").is("project1"));
        List<Teacher> teachers = mongoTemplate.find(query, Teacher.class);
        System.out.println(teachers);
    }

    /**
     * 分页查询
     */
    @Test
    void findByPage() {
//        Query query = new Query(Criteria.where("students.name").is("name1").and("project").is("project1"));
        Query query = new Query(new Criteria());
//        query.with(Sort.by(Sort.Direction.DESC, "time"));
        mongoUtil.start(2, 2, query);
        List<Teacher> teachers = mongoTemplate.find(query, Teacher.class);
        long count = mongoTemplate.count(query, Teacher.class);
        PageHelper pageHelper = mongoUtil.pageHelper(count, teachers);
        System.out.println(pageHelper);
    }

    /**
     * 更新操作
     */
    @Test
    void update() {
        Query query = new Query();
        query.addCriteria(Criteria.where("project").is("project2"));
        Update update = new Update();
//        //直接更新
//        update.set("students", "更新成功");
//        //文档不存在的话会插入一条新的记录
//        update.setOnInsert("students", "更新成功1");
//        //移除这个键
//        update.unset("students");
        //加入到一个集合中,不会重复
//        update.addToSet("students", "更新成功3");
        //需要传值,会清空其他属性
//        update.addToSet("students");
        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, Teacher.class);
        System.out.println(updateResult);
    }
}

自己封装工具类用于分页

/**
 * @author shawn
 */
@Data
public class PageHelper<T> {
    private long currentPage;
    private long total;
    private long pageSize;
    private List<T> list;

    public PageHelper(long pageNum, long total, long pageSize, List<T> list) {
        this.currentPage = pageNum;
        this.total = total;
        this.pageSize = pageSize;
        this.list = list;
    }

    public PageHelper(long pageNum, long pageSize, List<T> list) {
        this.currentPage = pageNum;
        this.pageSize = pageSize;
        this.list = list;
    }
}

工具类

package com.example.mongodb.util;

import lombok.Data;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.regex.Pattern;

/**
 * @author shawn
 */
@Data
@Component
public class MongoUtil<T> {
    public Integer pageSize;
    private Integer currentPage;


    public void start(Integer currentPage, Integer pageSize, Query query) {
        pageSize = pageSize == 0 ? 10 : pageSize;
        query.limit(pageSize);
        query.skip((currentPage - 1) * pageSize);
        this.pageSize = pageSize;
        this.currentPage = currentPage;
    }

    public PageHelper pageHelper(long total, List<T> list) {
        return new PageHelper(this.currentPage, total, this.pageSize, list);
    }

    public PageHelper pageHelper(List<T> list) {
        return new PageHelper(this.currentPage, this.pageSize, list);
    }

    public PageHelper pageHelper(long currentPage, long total, long pageSize, List<T> list) {
        return new PageHelper(currentPage, total, pageSize, list);
    }

    public PageHelper pageHelper(long currentPage, long pageSize, List<T> list) {
        return new PageHelper(currentPage, pageSize, list);
    }


    /**
     * 用于模糊查询忽略大小写
     *
     * @param string
     * @return
     */
    public Pattern getPattern(String string) {
        Pattern pattern = Pattern.compile("^.*" + string + ".*$", Pattern.CASE_INSENSITIVE);
        return pattern;
    }
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Spring Boot中同时整合MongoDB和MyBatis也是可行的。你可以按照以下步骤进行操作: 1. 首先,确保你的项目中包含了MongoDB和MyBatis的依赖。在pom.xml文件中添加以下依赖: ```xml <!-- MongoDB依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <!-- MyBatis依赖 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> ``` 2. 在Spring Boot的配置文件(application.properties或application.yml)中,配置MongoDB和MyBatis的连接信息。例如: ```yaml # MongoDB配置 spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=mydatabase # MyBatis配置 mybatis.mapper-locations=classpath:mapper/*.xml mybatis.type-aliases-package=com.example.domain ``` 3. 创建实体类来映射MongoDB中的文档,并通过注解将其与MyBatis的mapper文件进行映射。例如: ```java import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "users") public class User { @Id private String id; private String name; private int age; // 省略getter和setter方法 } ``` 4. 创建一个MyBatis的mapper接口和对应的mapper XML文件,用于定义数据操作的SQL语句。例如: ```java public interface UserMapper { User getUserById(String id); void insertUser(User user); void updateUser(User user); void deleteUser(String id); } ``` ```xml <!-- userMapper.xml --> <mapper namespace="com.example.mapper.UserMapper"> <select id="getUserById" resultType="com.example.domain.User"> SELECT * FROM users WHERE id = #{id} </select> <insert id="insertUser" parameterType="com.example.domain.User"> INSERT INTO users(id, name, age) VALUES(#{id}, #{name}, #{age}) </insert> <update id="updateUser" parameterType="com.example.domain.User"> UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id} </update> <delete id="deleteUser" parameterType="String"> DELETE FROM users WHERE id = #{id} </delete> </mapper> ``` 5. 创建一个数据访问层接口,并使用`@Mapper`注解标识为MyBatis的mapper接口。例如: ```java import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserRepository extends UserMapper { // 可以在这个接口中定义自定义的查询方法 } ``` 6. 最后,在业务逻辑层或控制器中使用`UserRepository`来进行数据操作。例如: ```java import org.springframework.beans.factory.annotation.Autowired;

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值