栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot整合MongoDB及简单的操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot整合MongoDB及简单的操作

一,环境搭建

1)引入依赖

 
        spring-boot-parent
        org.springframework.boot
        2.3.7.RELEASE
  
 
        
            org.springframework.boot
            spring-boot-starter-data-mongodb
        
        
            org.projectlombok
            lombok
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
    

2)添加配置

spring:
  data:
    mongodb:
      uri: mongodb://8.142.89.165:27017/test

3)添加实体类

@Data
@document("User")
public class User {

 @Id
 private String id;
 @Indexed
 private String name;
 private Integer age;
 private String email;
 private String createDate;
}
二,基于 MongoTemplate 1.常用方法
  • 查询User文档的全部数据
mongoTemplate.findAll(User.class)
  • 查询User文档id为id的数据
mongoTemplate.findById(, User.class)
  • 根据query内的查询条件查询
mongoTemplate.find(query, User.class)
  • 修改
mongoTemplate.upsert(query, update, User.class)
  • 删除
mongoTemplate.remove(query, User.class)
  • 新增
mongoTemplate.insert(User)
2.Query对象
  1. 创建一个query对象(用来封装所有条件对象),再创建一个criteria对象(用来构建条件)
  2. 精准条件:criteria.and(“key”).is(“条件”)
    模糊条件:criteria.and(“key”).regex(“条件”)
  3. 封装条件:query.addCriteria(criteria)
  4. 大于(创建新的criteria):Criteria gt = Criteria.where(“key”).gt(“条件”)
    小于(创建新的criteria):Criteria lt = Criteria.where(“key”).lt(“条件”)
  5. Query.addCriteria(new Criteria().andOperator(gt,lt));
  6. 一个query中只能有一个andOperator()。其参数也可以是Criteria数组。
  7. 排序 :query.with(new Sort(Sort.Direction.ASC, "age"). and(new Sort(Sort.Direction.DESC, "date")))
3.测试
 @Autowired
 private MongoTemplate mongoTemplate;

添加:

	@Test
    public void createUser() {
        User user = new User();
        user.setAge(20);
        user.setName("test");
        user.setEmail("4932200@qq.com");
        User user1 = mongoTemplate.insert(user);
        System.out.println(user1);
    }

查询所有:

 @Test
    public void findUser() {
        List userList =
        mongoTemplate.findAll(User.class);
        System.out.println(userList);
    }

根据id查询:

    @Test
    public void getById() {
        User user = 
		mongoTemplate.findById("5ffbfa2ac290f356edf9b5aa",
		User.class);
        System.out.println(user);
    }

条件查询:

  @Test
    public void findUserList() {
        Query query = new Query(Criteria
                .where("name").is("test")
                .and("age").is(20));
        List userList = mongoTemplate.find(query, User.class);
        System.out.println(userList);
    }

模糊查询

  @Test
    public void findUsersLikeName() {
        String name = "est";
        String regex = String.format("%s%s%s", "^.*", name, ".*$");
        // 正则大小写不敏感
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Query query = new Query(Criteria.where("name").regex(pattern));
        List userList = mongoTemplate.find(query, User.class);
        System.out.println(userList);
    }

分页查询:

 @Test
    public void findUsersPage() {
        String name = "est";
        int pageNo = 1;
        int pageSize = 10;

        Query query = new Query();
        String regex = String.format("%s%s%s", "^.*", name, ".*$");
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        query.addCriteria(Criteria.where("name").regex(pattern));
        int totalCount = (int) mongoTemplate.count(query, User.class);
        List userList = mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class);

        Map pageMap = new HashMap<>();
        pageMap.put("list", userList);
        pageMap.put("totalCount",totalCount);
        System.out.println(pageMap);
    }

修改:

@Test
    public void updateUser() {
        User user = mongoTemplate.findById("5ffbfa2ac290f356edf9b5aa", User.class);
        user.setName("test_1");
        user.setAge(25);
        user.setEmail("493220990@qq.com");
        Query query = new Query(Criteria.where("_id").is(user.getId()));
        Update update = new Update();
        update.set("name", user.getName());
        update.set("age", user.getAge());
        update.set("email", user.getEmail());
        UpdateResult result = mongoTemplate.upsert(query, update, User.class);
        long count = result.getModifiedCount();
        System.out.println(count);
    }

删除:

Query query = 
new Query(Criteria.where("_id").is("5ffbfa2ac290f356edf9b5aa"));
        DeleteResult result = mongoTemplate.remove(query, User.class);
        long count = result.getDeletedCount();
        System.out.println(count);
    }

聚合查询:

		//1 根据医院编号 和 科室编号 查询
        Criteria criteria = Criteria.where("hosCode").is(hosCode).and("depCode").is(depCode);

        //2 根据工作日workDate期进行分组
        Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(criteria),//匹配条件
                Aggregation.group("workDate")//分组字段
                        .first("workDate").as("workDate")
                        //3 统计号源数量
                        .count().as("docCount")
                        .sum("reservedNumber").as("reservedNumber")
                        .sum("availableNumber").as("availableNumber"),
                //排序
                Aggregation.sort(Sort.Direction.DESC,"workDate"),
                //4 实现分页
                Aggregation.skip((page-1)*limit),
                Aggregation.limit(limit)
        );
        //调用方法,最终执行
        AggregationResults aggResults =
                mongoTemplate.aggregate(agg, Schedule.class, BookingScheduleRuleVo.class);
        List bookingScheduleRuleVoList = aggResults.getMappedResults();
        //分组查询的总记录数
        Aggregation totalAgg = Aggregation.newAggregation(
                Aggregation.match(criteria),
                Aggregation.group("workDate")
        );
        AggregationResults totalAggResults =
                mongoTemplate.aggregate(totalAgg, Schedule.class, BookingScheduleRuleVo.class);
三,基于MongoRepository 1.实现

Spring Data提供了对mongodb数据访问的支持,我们只需要继承MongoRepository类,按照Spring Data规范就可以了。


注意:

  1. 不是随便声明的,而需要符合一定的规范
  2. 查询方法以find | read | get开头
  3. 涉及条件查询时,条件的属性用条件关键字连接
  4. 要注意的是:条件属性首字母需要大写
  5. 支持属性的级联查询,但若当前类有符合条件的属性则优先使用,而不使用级联属性,若需要使用级联属性,则属性之间使用_强制进行连接
2.添加Repository类
@Repository
public interface UserRepository extends 
MongoRepository {

}
3.添加测试类
@Autowired
private UserRepository userRepository;

添加:

	@Test
    public void createUser() {
        User user = new User();
        user.setAge(20);
        user.setName("张三");
        user.setEmail("3332200@qq.com");
        User user1 = userRepository.save(user);
    }	

查询所有:

	@Test
    public void findUser() {
        List userList = userRepository.findAll();
        System.out.println(userList);
    }

id查询:

@Test
    public void getById() {
        User user = userRepository.findById("5ffbfe8197f24a07007bd6ce").get();
        System.out.println(user);
    }

条件查询:

	 @Test
    public void findUserList() {
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        Example userExample = Example.of(user);
        List userList = userRepository.findAll(userExample);
        System.out.println(userList);
    }

模糊查询:

 	@Test
    public void findUsersLikeName() {
        //创建匹配器,即如何使用查询条件
        ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
                .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
        User user = new User();
        user.setName("三");
        Example userExample = Example.of(user, matcher);
        List userList = userRepository.findAll(userExample);
        System.out.println(userList);
    }

分页查询:

	@Test
    public void findUsersPage() {
        Sort sort = Sort.by(Sort.Direction.DESC, "age");
		//0为第一页
        Pageable pageable = PageRequest.of(0, 10, sort);
		//创建匹配器,即如何使用查询条件
        ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
                .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
        User user = new User();
        user.setName("三");
        Example userExample = Example.of(user, matcher);
		//创建实例
        Example example = Example.of(user, matcher);
        Page pages = userRepository.findAll(example, pageable);
        System.out.println(pages);
    }

修改:

@Test
    public void updateUser() {
        User user = userRepository.findById("5ffbfe8197f24a07007bd6ce").get();
        user.setName("张三_1");
        user.setAge(25);
        user.setEmail("883220990@qq.com");
        User save = userRepository.save(user);
        System.out.println(save);
    }

删除:

@Test
    public void delete() {
        userRepository.deleteById("5ffbfe8197f24a07007bd6ce");
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490753.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号