spring-data-mongodb提供了MongoTemplate和MongoRepository两种方式访问MongoDB,MongoRepository的方式访问较为简单,MongoTemplate方式较为灵活,这两种方式在Java对于MongoDB的运用中相辅相成。
一、基于MongoTemplate开发
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
修改yml配置
spring:
data:
mongodb:
#192.168.217.128根据自己的ip进行修改
#test是MongoDB的集合名称 也就是表名
uri: mongodb://192.168.217.128:27017/test
添加实体类
@Data
@AllArgsConstructor
@Document("User") //指定了这个模型类型所对应的集合名称即collection 表名
public class User {
@Id //自动生成的主键ID 主键 不可重复 自带索引
private String id;
private String name;
private Integer age;
}
方法测试
@SpringBootTest
public class MongoTemplateTest {
@Autowired
private MongoTemplate mongoTemplate;
@Test
public void testMongoDB(){
//向表中插入数据
User user = new User(null,"张三",20);
User user1 = new User(null,"李四",16);
mongoTemplate.insert(user);
mongoTemplate.insert(user1);
//查询表中所有记录
List<User> userList = mongoTemplate.findAll(User.class);
System.out.println(userList);
//[User(id=63acf541e6af652ac74fd008,name=张三,age=20),// User(id=63acf541e6af652ac74fd009,name=李四,age=16)]
//根据表中id查询记录
User user2 = mongoTemplate.findById("63acf541e6af652ac74fd008",User.class);
System.out.println(user2);//User(id=63acf541e6af652ac74fd008,age=20)
//条件查询
Query query = new Query(Criteria.where("name").is("李四").and("age").is(16));
List<User> users = mongoTemplate.find(query,User.class);
System.out.println(users);//[User(id=63acf541e6af652ac74fd009,age=16)]
//根据_id删除表中记录
Query query2 = new Query(Criteria.where("_id").is("63acf541e6af652ac74fd008"));
DeleteResult remove = mongoTemplate.remove(query2,User.class);
//获取删除记录的个数
long count = remove.getDeletedCount();
System.out.println(count);//1
//删除表中所有数据
Query query3 = new Query();
mongoTemplate.remove(query3,User.class);
}
}
二、基于MongoRepository开发
Spring Data提供了对MongoDB数据访问的支持,我们只需要继承MongoRepository类,按照Spring Data规范就可以了。
构建仓库
public interface UserRepository extends MongoRepository<User,String> {
}
方法测试
@SpringBootTest
public class MongoRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void test(){
//向数据库表中插入数据
User user = new User(null,"张三三",18);
User user1 = new User(null,16);
userRepository.save(user);
userRepository.save(user1);
//查询数据库表中所有记录
List<User> all = userRepository.findAll();
System.out.println(all);
//[User(id=63acf24938e0d1033d50dc20,name=张三三,age=18),// User(id=63acf24938e0d1033d50dc21,age=16)]
//按照id查询表中数据
User user2 = userRepository.findById("63acf24938e0d1033d50dc20").get();
System.out.println(user2);//User(id=63acf24938e0d1033d50dc20,age=18)
//按条件(姓名与年龄)查询
Example<User> example = Example.of(new User(null,16));
List<User> list = userRepository.findAll(example);
System.out.println(list);//User(id=63acf24938e0d1033d50dc21,age=16)
//模糊查询
User user3 = new User(null,"三",18);
//模糊查询匹配规则
ExampleMatcher matcher = ExampleMatcher.matching()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
.withIgnoreCase(true);//忽略大小写
Example<User> example1 = Example.of(user3,matcher);
List<User> list1 = userRepository.findAll(example1);
System.out.println(list1);//User(id=63acf24938e0d1033d50dc20,age=18)
//分页查询
Pageable pageable = PageRequest.of(0,2);//设置分页参数:第1页 每页2条数据
Page<User> page = userRepository.findAll(pageable);
System.out.println("Page的总页数是:" + page.getTotalPages() + ",Page的总记录条数是:" + page.getTotalElements());
//Page的总页数是:1 +,Page的总记录条数是:2
//根据_id修改信息
User user4 = userRepository.findById("63acf24938e0d1033d50dc20").get();
user4.setName("王五");//将取出的信息修改其name
userRepository.save(user4);
//根据id删除
userRepository.deleteById("63acf24938e0d1033d50dc20");
//删除全部
userRepository.deleteAll();
}
}
原文地址:https://blog.csdn.net/m0_65563175/article/details/128476191
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。