0


三、Spring boot集成mongodb

文章目录

一、Spring boot集成mongodb

1、集成简介

spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,MongoRepository的缺点是不够灵活,MongoTemplate正好可以弥补不足。

2、搭建开发环境

2.1 初始化工程

使用 Spring Initializr 快速初始化一个 Spring Boot 工程

Group:com.atguigu

Artifact:mongodb

2.2 引入依赖

修改pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies>

2.3 添加配置

在application.properties文件添加配置

spring.data.mongodb.uri=mongodb://47.93.118.241:27017/test

3、基于MongoTemplate 开发CRUD

3.1 添加实体

添加com.atguigu.mongodb.entity.User类

@Data@Document("User")publicclassUser{@IdprivateString id;privateString name;privateInteger age;privateString email;privateString createDate;}

3.2 实现

常用方法
mongoTemplate.findAll(User.class): 查询User文档的全部数据
mongoTemplate.findById(, User.class): 查询User文档id为id的数据
mongoTemplate.find(query, User.class);: 根据query内的查询条件查询
mongoTemplate.upsert(query, update, User.class): 修改
mongoTemplate.remove(query, User.class): 删除
mongoTemplate.insert(User): 新增

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.3 添加测试类

在/test/java下面添加测试类:

@SpringBootTestclassDemomogoApplicationTests{@AutowiredprivateMongoTemplate mongoTemplate;//添加@TestpublicvoidcreateUser(){User user =newUser();
        user.setAge(20);
        user.setName("test");
        user.setEmail("[email protected]");User user1 = mongoTemplate.insert(user);System.out.println(user1);}//查询所有@TestpublicvoidfindUser(){List<User> userList = mongoTemplate.findAll(User.class);System.out.println(userList);}//根据id查询@TestpublicvoidgetById(){User user = 
mongoTemplate.findById("5ffbfa2ac290f356edf9b5aa",User.class);System.out.println(user);}//条件查询@TestpublicvoidfindUserList(){Query query =newQuery(Criteria.where("name").is("test").and("age").is(20));List<User> userList = mongoTemplate.find(query,User.class);System.out.println(userList);}//模糊查询@TestpublicvoidfindUsersLikeName(){String name ="est";String regex =String.format("%s%s%s","^.*", name,".*$");Pattern pattern =Pattern.compile(regex,Pattern.CASE_INSENSITIVE);Query query =newQuery(Criteria.where("name").regex(pattern));List<User> userList = mongoTemplate.find(query,User.class);System.out.println(userList);}//分页查询@TestpublicvoidfindUsersPage(){String name ="est";int pageNo =1;int pageSize =10;Query query =newQuery();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<User> userList = mongoTemplate.find(query.skip((pageNo -1)* pageSize).limit(pageSize),User.class);Map<String,Object> pageMap =newHashMap<>();
        pageMap.put("list", userList);
        pageMap.put("totalCount",totalCount);System.out.println(pageMap);}//修改@TestpublicvoidupdateUser(){User user = mongoTemplate.findById("5ffbfa2ac290f356edf9b5aa",User.class);
        user.setName("test_1");
        user.setAge(25);
        user.setEmail("[email protected]");Query query =newQuery(Criteria.where("_id").is(user.getId()));Update update =newUpdate();
        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);}//删除操作@Testpublicvoiddelete(){Query query =newQuery(Criteria.where("_id").is("5ffbfa2ac290f356edf9b5aa"));DeleteResult result = mongoTemplate.remove(query,User.class);long count = result.getDeletedCount();System.out.println(count);}}

4、基于MongoRepository开发CRUD

4.1 实现

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

SpringData 方法定义规范
在这里插入图片描述
在这里插入图片描述
1、不是随便声明的,而需要符合一定的规范
2、 查询方法以find | read | get开头
3、 涉及条件查询时,条件的属性用条件关键字连接
4、 要注意的是:条件属性首字母需要大写
5、 支持属性的级联查询,但若当前类有符合条件的属性则优先使用,而不使用级联属性,若需要使用级联属性,则属性之间使用_强制进行连接

4.2 添加Repository类

添加com.atguigu.mongodb.repository.UserRepository类

packagecom.atguigu.mongodb.repository;importcom.atguigu.mongodb.entity.User;importorg.springframework.data.mongodb.repository.MongoRepository;importorg.springframework.stereotype.Repository;importjava.util.List;@RepositorypublicinterfaceUserRepositoryextendsMongoRepository<User,String>{}

4.3 添加测试类

在/test/java下面添加测试类:

@SpringBootTestclassDemomogoApplicationTests1{@AutowiredprivateUserRepository userRepository;//添加@TestpublicvoidcreateUser(){User user =newUser();
        user.setAge(20);
        user.setName("张三");
        user.setEmail("[email protected]");User user1 = userRepository.save(user);}//查询所有@TestpublicvoidfindUser(){List<User> userList = userRepository.findAll();System.out.println(userList);}//id查询@TestpublicvoidgetById(){User user = userRepository.findById("5ffbfe8197f24a07007bd6ce").get();System.out.println(user);}//条件查询@TestpublicvoidfindUserList(){User user =newUser();
        user.setName("张三");
        user.setAge(20);Example<User> userExample =Example.of(user);List<User> userList = userRepository.findAll(userExample);System.out.println(userList);}//模糊查询@TestpublicvoidfindUsersLikeName(){//创建匹配器,即如何使用查询条件ExampleMatcher matcher =ExampleMatcher.matching()//构建对象.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)//改变默认字符串匹配方式:模糊查询.withIgnoreCase(true);//改变默认大小写忽略方式:忽略大小写User user =newUser();
        user.setName("三");Example<User> userExample =Example.of(user, matcher);List<User> userList = userRepository.findAll(userExample);System.out.println(userList);}//分页查询@TestpublicvoidfindUsersPage(){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 =newUser();
        user.setName("三");Example<User> userExample =Example.of(user, matcher);//创建实例Example<User> example =Example.of(user, matcher);Page<User> pages = userRepository.findAll(example, pageable);System.out.println(pages);}//修改@TestpublicvoidupdateUser(){User user = userRepository.findById("5ffbfe8197f24a07007bd6ce").get();
        user.setName("张三_1");
        user.setAge(25);
        user.setEmail("[email protected]");User save = userRepository.save(user);System.out.println(save);}//删除@Testpublicvoiddelete(){
        userRepository.deleteById("5ffbfe8197f24a07007bd6ce");}}

本文转载自: https://blog.csdn.net/qq_43102730/article/details/130787800
版权归原作者 加贝力口贝 所有, 如有侵权,请联系我们删除。

“三、Spring boot集成mongodb”的评论:

还没有评论