概念说明
spring-data-mongodb
提供MongoTemplate
与MongoRepository
两种操作方式MongoRepository
操作简单 缺点是不够灵活MongoTemplate
操作灵活,在项目中可以灵活使用这两种方式
与SpringBoot集成
SpringBoot 提供了 mongodb 的 starter 包 直接引入即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
yml配置连接
spring:
data:
mongodb:
port: 27017
host: localhost
# 注意: 每个库对应的用户不同 root用户默认对应admin库
database: admin
# 如果设置了用户名密码 需要填
username: root
# 如果设置了用户名密码 需要填
password: 123456
MongoTemplate 用法
通用实体类
@Data
@Document("user")
public class User {
@Id
private String id;
private String name;
private Integer age;
private String email;
// 没什么特殊含义可以自定义 为了演示
private List<Tag> tags;
}
@Data
public class Tag {
private String tagId;
private boolean enable;
}
@SpringBootTest
public class MongoTemplateTest {
@Autowired
private MongoTemplate mongoTemplate;
// 添加操作
@Test
public void create() {
User user = new User();
user.setAge(26);
user.setName("lionli");
user.setEmail("XXXXXXX@qq.com");
User insert = mongoTemplate.insert(user);
System.out.println(insert);
}
// 查询所有
@Test
public void findAll(){
List<User> userList = mongoTemplate.findAll(User.class);
System.out.println(userList);
}
// 根据id查询
@Test
public void findId(){
User user = mongoTemplate.findById("6422a4ac7716000081001068", User.class);
System.out.println(user);
}
// 条件查询
@Test
public void findUserList(){
Query query = new Query(Criteria.where("name").is("lionli").and("age").is(26));
List<User> userList = mongoTemplate.find(query, User.class);
System.out.println(userList);
}
// 模糊查询
@Test
public void findLikeUserList(){
String regex = String.format("%s%s","^.*", "lion");
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Query query = new Query(Criteria.where("name").regex(pattern));
List<User> userList = mongoTemplate.find(query, User.class);
System.out.println(userList);
}
// 分页查询
@Test
public void findPageUserList(){
int pageNum = 1;
int pageSize = 10;
//条件构建
String regex = String.format("%s%s","^.*", "lion");
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Query query = new Query(Criteria.where("name").regex(pattern));
//分页构建
//查询记录数
long count = mongoTemplate.count(query, User.class);
//分页
List<User> userList = mongoTemplate.find(query.skip((pageNum - 1) * pageSize).limit(pageSize), User.class);
System.out.println(count);
System.out.println(userList);
}
// 修改
@Test
public void updateUser(){
//根据id查询数据
User user = mongoTemplate.findById("6422a4ac7716000081001068", User.class);
//设置修改的值
user.setName("crazylionli");
user.setAge(20);
//调用方法实现修改操作
Query query = new Query(Criteria.where("_id").is(user.getId()));
Update update = new Update();
update.set("name",user.getName());
update.set("age",user.getAge());
UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);
long count = upsert.getModifiedCount();
System.out.println(count);
}
// 删除操作
@Test
public void deleteUser(){
Query query = new Query(Criteria.where("_id").is("6422a4ac7716000081001068"));
DeleteResult remove = mongoTemplate.remove(query, User.class);
long deletedCount = remove.getDeletedCount();
System.out.println(deletedCount);
}
// 嵌套表添加
@Test
public void addTag() {
Tag tag = new Tag();
tag.setTagId("1");
tag.setEnable(true);
Query query = Query.query(Criteria.where("_id").is("6422a4ac7716000081001068"));
Update update = new Update();
update.addToSet("tags", tag);
mongoTemplate.upsert(query, update, User.class);
}
// 更新嵌套表
@Test
public void updateTag() {
Query query = Query.query(Criteria.where("_id").is("6422a4ac7716000081001068")
.and("tags.tagId").is("1"));
Update update = new Update();
update.set("tags.$.enable", false);
mongoTemplate.updateFirst(query, update, User.class);
}
// 删除嵌套表
@Test
public void removeTag() {
Query query = Query.query(Criteria.where("_id").is("6422a4ac7716000081001068")
.and("tags.tagId").is("1"));
Update update = new Update();
update.unset("tags.$");
mongoTemplate.updateFirst(query, update, User.class);
}
}
MongoRepository 用法
@Repository
public interface UserRepository extends MongoRepository<User, String> {
}
@SpringBootTest
public class MongoTemplateTest {
@Autowired
private UserRepository userRepository;
// 添加操作
@Test
public void create() {
User user = new User();
user.setAge(26);
user.setName("lionli");
user.setEmail("XXXXXXX@qq.com");
User insert = userRepository.save(user);
System.out.println(insert);
}
// 查询所有
@Test
public void findAll(){
List<User> userList = userRepository.findAll();
System.out.println(userList);
}
// 根据id查询
@Test
public void findId(){
User user = userRepository.findById("6422a4ac7716000081001068").get();
System.out.println(user);
}
// 条件查询
@Test
public void findUserList(){
User user = new User();
user.setName("lionli");
user.setAge(26);
Example<User> userExample = Example.of(user);
List<User> userList = userRepository.findAll(userExample);
System.out.println(userList);
}
// 模糊查询
@Test
public void findLikeUserList(){
// 设置模糊查询匹配规则
ExampleMatcher matcher = ExampleMatcher.matching()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
// 忽略大小写
.withIgnoreCase(true);
User user = new User();
user.setName("lion");
Example<User> userExample = Example.of(user, matcher);
List<User> userList = userRepository.findAll(userExample);
System.out.println(userList);
}
// 分页查询
@Test
public void findPageUserList(){
// 0代表第一页
Pageable pageable = PageRequest.of(0, 10);
User user = new User();
user.setName("lionli");
Example<User> userExample = Example.of(user);
Page<User> page = userRepository.findAll(userExample, pageable);
System.out.println(page);
}
// 修改
@Test
public void updateUser(){
User user = userRepository.findById("6422a4ac7716000081001068").get();
user.setName("crazylionli");
user.setAge(20);
User save = userRepository.save(user); //有id则修改,无id则变成添加操作
System.out.println(save);
}
// 删除操作
@Test
public void deleteUser(){
userRepository.deleteById("6422a4ac7716000081001068");
}
}
原文始发于微信公众号(狮子领域 程序圈):SpringBoot 整合 Mongodb 与 MongoTemplate、MongoRepository 用法教程
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/214951.html