网站建设电话销售话术,加强网站备案管理,电商如何从零做起,wordpress同步文章插件目录
环境准备
引入依赖
配置yml
注入mongoTemplate
集合操作
文档操作
创建实体
添加文档
查询文档
更新文档
删除文档 环境准备
引入依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-da…目录
环境准备
引入依赖
配置yml
注入mongoTemplate
集合操作
文档操作
创建实体
添加文档
查询文档
更新文档
删除文档 环境准备
引入依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-mongodb/artifactId
/dependency
配置yml
spring:data:mongodb:uri: mongodb://127.0.0.1:27017/appdb?authSourceadmin
注入mongoTemplate
Autowired
MongoTemplate mongoTemplate;
集合操作 Testpublic void testCreateCollection(){boolean emp mongoTemplate.collectionExists(employee);if(emp){mongoTemplate.dropCollection(employee);}mongoTemplate.createCollection(employee);}
文档操作 相关注解Document修饰范围: 用在类上作用: 用来映射这个类的一个对象为mongo中一条文档数据。属性:( value 、collection )用来指定操作的集合名称 Id修饰范围: 用在成员变量、方法上作用: 用来将成员变量的值映射为文档的_id的值Field修饰范围: 用在成员变量、方法上作用: 用来将成员变量及其值映射为文档中一个key:value对。属性:( name , value )用来指定在文档中 key的名称,默认为成员变量名Transient修饰范围:用在成员变量、方法上作用:用来指定此成员变量不参与文档的序列化
创建实体
Document(employee) //对应emp集合中的一个文档
Data
AllArgsConstructor
NoArgsConstructor
public class Employee {Id //映射文档中的_idprivate Integer id;Field(username)private String name;Fieldprivate int age;Fieldprivate Double salary;Fieldprivate Date entryDay;
}
添加文档 insert方法返回值是新增的Document对象里面包含了新增后_id的值。如果集合不存在会自动创建集合。通过Spring Data MongoDB还会给集合中多加一个_class的属性存储新增时Document对应Java中类的全限定路径。这么做为了查询时能把Document转换为Java类型。
Test
public void testInsert(){Employee employee new Employee(1, 小明, 30,10000.00, new Date());//添加文档// sava: _id存在时更新数据//mongoTemplate.save(employee);// insert _id存在抛出异常 支持批量操作mongoTemplate.insert(employee);ListEmployee list Arrays.asList(new Employee(2, 张三, 21,5000.00, new Date()),new Employee(3, 李四, 26,8000.00, new Date()),new Employee(4, 王五,22, 8000.00, new Date()),new Employee(5, 张龙,28, 6000.00, new Date()),new Employee(6, 赵虎,24, 7000.00, new Date()),new Employee(7, 赵六,28, 12000.00, new Date()));//插入多条数据mongoTemplate.insert(list,Employee.class);
} 插入重复数据时: insert报DuplicateKeyException提示主键重复save对已存在的数据进行更新。 批处理操作时: insert可以一次性插入所有数据效率较高save需遍历所有数据一次插入或更新效率较低。
查询文档 Criteria是标准查询的接口可以引用静态的Criteria.where的把多个条件组合在一起就可以轻松地将多个方法标准和查询连接起来方便我们操作查询语句。 Test
public void testFind(){System.out.println(查询所有文档);//查询所有文档ListEmployee list mongoTemplate.findAll(Employee.class);list.forEach(System.out::println);System.out.println(根据_id查询);//根据_id查询Employee e mongoTemplate.findById(1, Employee.class);System.out.println(e);System.out.println(findOne返回第一个文档);//如果查询结果是多个返回其中第一个文档对象Employee one mongoTemplate.findOne(new Query(), Employee.class);System.out.println(one);System.out.println(条件查询);//new Query() 表示没有条件//查询薪资大于等于8000的员工//Query query new Query(Criteria.where(salary).gte(8000));//查询薪资大于4000小于10000的员工//Query query new Query(Criteria.where(salary).gt(4000).lt(10000));//正则查询模糊查询 java中正则不需要有////Query query new Query(Criteria.where(name).regex(张));//and or 多条件查询Criteria criteria new Criteria();//and 查询年龄大于25薪资大于8000的员工//criteria.andOperator(Criteria.where(age).gt(25),Criteria.where(salary).gt(8000));//or 查询姓名是张三或者薪资大于5000的员工criteria.orOperator(Criteria.where(name).is(张三),Criteria.where(salary).gt(5000));Query query new Query(criteria);//sort排序//query.with(Sort.by(Sort.Order.desc(salary)));//skip limit 分页 skip用于指定跳过记录数limit则用于限定返回结果数量。query.with(Sort.by(Sort.Order.desc(salary))).skip(0) //指定跳过记录数.limit(4); //每页显示记录数//查询结果ListEmployee employees mongoTemplate.find(query, Employee.class);employees.forEach(System.out::println);
}
Test
public void testFindByJson() {//使用json字符串方式查询//等值查询//String json {name:张三};//多条件查询String json {$or:[{age:{$gt:25}},{salary:{$gte:8000}}]};Query query new BasicQuery(json);//查询结果ListEmployee employees mongoTemplate.find(query, Employee.class);employees.forEach(System.out::println);
}
更新文档
updateFirst() 只更新满足条件的第一条记录
updateMulti() 更新所有满足条件的记录
upsert() 没有符合条件的记录则插入数据
Test
public void testUpdate(){//query设置查询条件Query query new Query(Criteria.where(salary).gte(15000));System.out.println(更新前);ListEmployee employees mongoTemplate.find(query, Employee.class);employees.forEach(System.out::println);Update update new Update();//设置更新属性update.set(salary,13000);//updateFirst() 只更新满足条件的第一条记录//UpdateResult updateResult mongoTemplate.updateFirst(query, update, Employee.class);//updateMulti() 更新所有满足条件的记录//UpdateResult updateResult mongoTemplate.updateMulti(query, update, Employee.class);//upsert() 没有符合条件的记录则插入数据//update.setOnInsert(id,11); //指定_idUpdateResult updateResult mongoTemplate.upsert(query, update, Employee.class);//返回修改的记录数System.out.println(updateResult.getModifiedCount());System.out.println(更新后);employees mongoTemplate.find(query, Employee.class);employees.forEach(System.out::println);
}
删除文档
Test
public void testDelete(){//删除所有文档//mongoTemplate.remove(new Query(),Employee.class);//条件删除Query query new Query(Criteria.where(salary).gte(10000));mongoTemplate.remove(query,Employee.class);}