4.0.0
org.springframework.boot
spring-boot-starter-parent
2.7.2
com.example
mongodb
0.0.1-SNAPSHOT
mongodb
mongodb
1.8
org.springframework.boot
spring-boot-starter-data-mongodb
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
spring:
data:
mongodb:
host: 192.168.0.1
port: 27017
username: root
password: root
database: test
authenticationDatabase: test
#spring:
# data:
# mongodb:
# uri: mongodb://192.168.61.4:27017/test
server:
port: 80
@Document(“t_his_curve_highway”) 表示这条记录Document插入MongoDB中的t_his_curve_highway的Collection中
@Indexed 表示该字段为索引
@Field(“highway_id”) 表示该字段对应到MongoDB中的Collection中字段名为highway_id
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.*;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.io.Serializable;
@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Document("t_his_curve_highway")
public class StaCharHisCurveHighwayDto implements Serializable {
/**
* highwayId
*/
@Indexed
@Field("highway_id")
private String highwayId;
/**
* recDate
*/
@Field("rec_date")
private String recDate;
/**
* curveCode
*/
@Field("curve_code")
private String curveCode;
/**
* curveData
*/
@Field("curve_data")
private String curveData;
/**
* recId
*/
@TableField("recId")
private String recId;
/**
* day
*/
@Transient
private Integer day;
}
import com.xxx.job.dto.HighwayDto;
import java.util.List;
public interface MongoDBRepository {
void saveHighwayData(List highwayDtoList);
}
使用MongoTemplate实现MongoDB批量插入数据功能
import com.xxx.job.dto.HighwayDto;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.springframework.data.mongodb.core.BulkOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.util.Pair;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Component
@Slf4j
public class MongoDBRepositoryImpl implements MongoDBRepository {
//注入MongoTemplate
@Resource
private MongoTemplate mongoTemplate;
/**
* 添加数据
*
* @param staCharHisCurveHighwayDtoList
*/
@Override
public void saveStaCharHisCurveHighwayData(List highwayDtoList) {
log.info("Highway正在写入mongodb数据库,数量 {} ", highwayDtoList.size());
List> updateList = new ArrayList<>(highwayDtoList.size());
//bulkOps批量操作
BulkOperations operations = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, HighwayDto.class);
//处理List
highwayDtoList.forEach(data -> {
//匹配id的数据
Query query = new Query(new Criteria("id").is(data.getId()));
Update update;
Document doc = new Document();
//把数据写入doc
mongoTemplate.getConverter().write(data, doc);
//用doc生成update对象
update = Update.fromDocument(new Document("$set", doc));
Pair updatePair = Pair.of(query, update);
updateList.add(updatePair);
});
//upsert = update + insert
operations.upsert(updateList);
//执行
operations.execute();
}
}
package com.example.mongodb.entity;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.io.Serializable;
@Data
@Document("User")
public class User implements Serializable {
@Id
private String id;
private String name;
private Integer age;
private String email;
@Field("create_date")
private String createDate;
}
在SpringBoot中Test文件夹下编写测试用例使用Mongo Template实现数据的增删改查
package com.example.mongodb.test;
import com.example.mongodb.entity.User;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
@SpringBootTest
class MongoTemplateTest {
@Resource
private MongoTemplate mongoTemplate;
//添加
@Test
public void createUser() {
User user = new User();
user.setAge(23);
user.setName("test2");
user.setEmail("[email protected]");
user.setCreateDate(String.valueOf(new Date()));
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("60534ac7548d761b193cf2d7", 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("[email protected]");
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);
}
//删除操作
@Test
public void delete() {
Query query =
new Query(Criteria.where("_id").is("5ffbfa2ac290f356edf9b5aa"));
DeleteResult result = mongoTemplate.remove(query, User.class);
long count = result.getDeletedCount();
System.out.println(count);
}
}
实现MongoRepository接口
package com.example.mongodb.repository;
import com.example.mongodb.entity.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends MongoRepository {
}
通过MongoRepository实现MongoDB的Collection的增删改查
package com.example.mongodb.test;
import com.example.mongodb.entity.User;
import com.example.mongodb.repository.UserRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.*;
import java.util.List;
@SpringBootTest
class MongoRepositoryTest {
@Autowired
private UserRepository userRepository;
//添加
@Test
public void createUser() {
User user = new User();
user.setAge(12);
user.setName("李四");
user.setEmail("[email protected]");
User userRes = userRepository.save(user);
System.out.println(userRes);
}
//查询所有
@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("[email protected]");
User save = userRepository.save(user);
System.out.println(save);
}
//删除
@Test
public void delete() {
userRepository.deleteById("5ffbfe8197f24a07007bd6ce");
}
}