配置org.springframework.boot spring-boot-starter-data-mongodb
spring:
data:
mongodb:
host: xxx.xxx.xxx.xxx
port: 27017
username: fchan
password: '10086' #这里要注意如果是存数字密码需要用字符串包裹
database: test #实际操作db
authentication-database: admin #鉴权db
可以看到在MongoProperties中,密码是用char存的,char是16位的,最大可以存65535,那么问题来了,一串数字密码可能正好存到了一个char里,原本可能长度=5的密码变成了长度=1的char,然后验证密码的时候就gg了。
实体类
package com.felix.spring_cloud_one.document;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.document;
import java.io.Serializable;
@document(collection = "user")
public class Userdocument implements Serializable {
private static final long serialVersionUID = -6572688910937746087L;
@Id //【主键是自动生成的】
private String id;
private String userName;
private Integer age;
private String password;
private String address;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return userName;
}
public void setUsername(String userName) {
this.userName = userName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
插入
public String add(){
Userdocument userdocument = new Userdocument();
userdocument.setAge(11);
userdocument.setPassword("123");
userdocument.setUsername("小明");
userdocument.setAddress("北京");
Userdocument afterInsert = mongoTemplate.insert(userdocument);
return afterInsert.getId();
}
批量插入
public Object batchAdd() {
List list = new ArrayList<>();
for (int i = 0; i < 10; i ++){
list.add(getUserdocument("大宝贝" + i, i + 10));
}
Collection batchResult = mongoTemplate.insert(list, Userdocument.class);
return batchResult;
}
查询
public Object findById(String id) {
Userdocument byId = mongoTemplate.findById(id, Userdocument.class);
return byId;
}
public Object findByCondition(String name, Integer age, String address) {
Criteria criteria = new Criteria();
if(Objects.nonNull(name)){
criteria = where("userName").is(name);
}
if(Objects.nonNull(age)){
criteria = criteria.and("age").is(age);
}
if(Objects.nonNull(address)){
criteria = criteria.and("address").is(address);
}
Query query = new Query(
criteria
);
List userdocuments = mongoTemplate.find(query, Userdocument.class);
return userdocuments;
}
public Object findUsersLikeName(String name) {
//正则表达式 模糊查询【】
String regex = String.format("%s%s%s", "^.*", name, ".*$");
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
//名字符合正则表达式的条件
Query query = new Query(where("userName").regex(pattern));
//mongodb 文档相对应的模型类
List userList = mongoTemplate.find(query, Userdocument.class);
return userList;
}
public Object findUsersPage(String name, Integer pageNo, Integer pageSize) {
//构造条件
Query query = new Query();
//正则表达式匹配
String regex = String.format("%s%s%s", "^.*", name, ".*$");
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
//添加条件
query.addCriteria(where("userName").regex(pattern));
//开始统计记录数
int totalCount = (int) mongoTemplate.count(query, Userdocument.class);
//分页查询 返回结果
List userList = mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), Userdocument.class);
Map pageMap = new HashMap<>();
pageMap.put("list", userList);
pageMap.put("totalCount",totalCount);
return pageMap;
}
更新
public Object updateUser(String id, String name) {
//修改一般是查询出来整个文档【document mongodb里面的叫法】
Userdocument user = mongoTemplate.findById(id, Userdocument.class);
user.setUsername(name);
//修改好相应的数据 根据id进行修改 id是查询出来的
Query query = new Query(where("_id").is(user.getId()));
Update update = new Update();
update.set("userName", user.getUsername());
//执行更新
UpdateResult result = mongoTemplate.upsert(query, update, Userdocument.class);
return result;
}
批量更新
public Object batchUpdate(String name) {
Query query = new Query();
query.addCriteria(
where("userName").regex("^大宝贝.*$")
);
List needUpdateList = mongoTemplate.find(query, Userdocument.class);
BulkOperations bulkOperations = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, Userdocument.class);
for (Userdocument userdocument : needUpdateList) {
Update update = new Update();
update.set("userName", "大大" + name);
bulkOperations.updateOne(new Query().addCriteria(Criteria.where("_id").is(userdocument.getId())), update);
}
bulkOperations.execute();
return null;
}
删除
public Object delete(String id) {
//构造条件 根据id删除相应的文档
Query query =
new Query(where("_id").is(id));
DeleteResult result = mongoTemplate.remove(query, Userdocument.class);
return result;
}



