org.springframework.boot spring-boot-starter-web
org.projectlombok lombok
org.springframework.boot spring-boot-starter-data-mongodb
# mongodb 没有开启任何安全协议
# mongodb(协议)://121.5.167.13(主机):27017(端口)/baizhi(库名)
spring.data.mongodb.uri=mongodb://192.168.111.101:27017/baizhi# mongodb 存在密码
#spring.data.mongodb.host=tx.chenyn.cn
#spring.data.mongodb.port=27017
#spring.data.mongodb.database=baizhi
#spring.data.mongodb.username=root
#spring.data.mongodb.password=root
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;import java.util.Date;@ToString
@Setter
@Getter
@Document("users") // 这个 类实例代表 mongo中一条文档
public class UserDoc {@Id //将这个id 映射为文档中的 _idprivate int id;@Field("username")private String name;@Fieldprivate double salary;@Fieldprivate Date birthday;
}
@Test
public void testCreateCollection(){mongoTemplate.createCollection (UserDoc.class);//参数: 创建集合名称
}
注意: 创建集合 不能存在,存在报错
@Test
public void testDeleteCollection(){mongoTemplate.dropCollection(UserDoc.class);
}
@Document
value / collection
)用来 指定操作的集合名称@Id
(只出现一次) @Field
name / value
)用来指定在文档中 key 的名称,默认为成员变量名@Transient
for(let i=1;i<10;i++){db.users.insert({_id:i,username:"小丁"+i})
}
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.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.BasicQuery;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;import java.util.List;@SpringBootTest
class DemoApplicationTests {@Autowiredprivate MongoTemplate mongoTemplate;@Testpublic void testCreateCollection() {// 查询所有mongoTemplate.findAll (UserDoc.class);// 根据 _id(id)查询mongoTemplate.findById (1, UserDoc.class);// 等值 查询Criteria criteria1 = new Criteria ();criteria1.andOperator (Criteria.where ("name").is ("小丁1"));mongoTemplate.find (Query.query (criteria1), UserDoc.class);// > gt < lt >= gte <= lteCriteria criteria2 = new Criteria ();criteria2.andOperator (Criteria.where ("age").lt (25).gte (28));mongoTemplate.find (Query.query (criteria2), UserDoc.class);//andCriteria criteria3 = new Criteria ().andOperator (Criteria.where ("name").is ("小丁1"),Criteria.where ("age").isNull ());mongoTemplate.find (Query.query (criteria1), UserDoc.class);// orCriteria criteria4 = new Criteria ();criteria4.orOperator (Criteria.where ("name").is ("小丁"),Criteria.where ("age").isNull ());mongoTemplate.find (Query.query (criteria4), UserDoc.class);// and or// name ="小丁" and( age=25 or age=28)Criteria criteria5 = new Criteria ().andOperator (Criteria.where ("name").is ("小丁"),new Criteria ().orOperator (Criteria.where ("age").is (25),Criteria.where ("age").is (28)));mongoTemplate.find (Query.query (criteria5), UserDoc.class);// sort 排序// desc 降序 asc 升序// skip limit 分页Query query = new Query ();Query age = query.with (// 按 name升序// name相同 按age降序Sort.by (Sort.Order.asc ("name"),Sort.Order.desc ("age"))).skip (5).limit (3);mongoTemplate.find (age, UserDoc.class);//count 总条数mongoTemplate.count (new Query (), UserDoc.class);// distinct 去重// 参数 1: 查询条件// 参数 2: 去重字段// 参数 3: 操作集合// 参数 4: 字段类型List nameList = mongoTemplate.findDistinct (new Query (),"name",UserDoc.class,String.class);//inmongoTemplate.find (Query.query (Criteria.where ("a").in ("1", "2", "3", "4")), UserDoc.class);//likeList userDocs = mongoTemplate.find (Query.query (Criteria.where ("name").regex ("小")), UserDoc.class);//使用 json 字符串方式查询Query query2 = new BasicQuery ("{$or:[{name:'编程人'},{name:'徐凤年'}]}",// 0 不显示// 1 显示"{name:0}");mongoTemplate.find (query2, UserDoc.class);}
}
UserDoc user = new UserDoc ();user.setId (10);
user.setName ("编程人_1");
user.setBirthday (new Date ());
UserDoc userDB = mongoTemplate.insert (user);//返回 保存的对象 insert or save
System.out.println (userDB);
insert: 插入重复数据时:insert
报DuplicateKeyException
提示主键重复; save
对已存在的数据进行更新。
insert 可以一次性 插入 多条数据
save: **不可以批量插入!**批处理操作时:insert
可以一次性插入整个数据,效率较高;save
需遍历整个数据,一次插入或更新,效率较低。
@Test
public void testUpdate() {// 1.更新条件Query query = Query.query (Criteria.where ("age").is (23));// 2.更新内容Update update = new Update ();update.set ("name", "编程小d");// 单条更新mongoTemplate.updateFirst (query, update, UserDoc.class);// 多条更新mongoTemplate.updateMulti (query, update, UserDoc.class);// 更新插入mongoTemplate.upsert (query, update, UserDoc.class);// 返回值均为 updateResult// System.out.println("匹配条数:" + updateResult.getMatchedCount());// System.out.println("修改条数:" + updateResult.getModifiedCount());// System.out.println("插入id_:" + updateResult.getUpsertedId());
}
@Test
public void testDelete() {// 删除所有mongoTemplate.remove (new Query (), UserDoc.class);// 条件删除mongoTemplate.remove (Query.query (Criteria.where ("name").is ("编程小d")),UserDoc.class);
}