栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用springData操作mongo

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用springData操作mongo

上依赖

    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了。

curd代码

实体类

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;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/708732.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号