一、使用步骤
1.1 导入pom依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
1.2 application.properties中加入配置
spring.data.mongodb.database=admin spring.data.mongodb.host=10.19.186.213 spring.data.mongodb.port=27017
1.3 编写实体类
@Document("User") public class User<Data> implements Serializable { @Field("Id") private Integer Id; @Indexed private String name; private String age;
Document 文档,填写集合名称
1.4 使用Template编写新增方法
/** * 保存对象 * @param user */ public void save(User user){ mongoTemplate.save(user); }
执行结果,数据库中新增一条记录
1.5 使用Template编写查询方法
/** * 查询单个对象 * @param name * @return */ public User findUser(String name){ Query query = new Query(Criteria.where("name").is(name)); User user = mongoTemplate.findOne(query, User.class); return user; }
1.6 使用Template更新
/** * 更新用户 * @param user */ public void updateUser(User user){ Query query=new Query(Criteria.where("Id").is(user.getId())); Update update= new Update().set("age", user.getAge()).set("name", user.getName()); mongoTemplate.updateFirst(query,update,User.class); }
1.7 删除用户
/** * 删除用户 * @param id */ public void deleteUser(Integer id){ Query query=new Query(Criteria.where("Id").is(id)); mongoTemplate.remove(query,User.class); }
2.1 使用Repository对数据库进行CURD
2.1.1 接口继承MongoRepository
public interface RepositoryTest extends MongoRepository<User,String> { }
2.1.2 引入repository
@Autowired private RepositoryTest repositoryTest;
2.1.3 新增用户测试
/** * 增加用户 */ @Test public void saveUser(){ User<Object> user = new User<>(); user.setId(10001); user.setName("anan"); user.setAge("12"); repositoryTest.save(user); }
2.1.4 查询用户测试
/** * 查询用户 */ @Test public void findUser(){ Optional<User> byId = repositoryTest.findById("61386067aa33044a1195589b"); System.out.println(byId.get().toString()); } 根据ID进行查询
根据其他属性进行查询:
根据name进行查询,首先在Repository中新增方法
User findByName(String name);
/** * 根据条件查询 */ @Test public void findUserByCondition(){ User byId = repositoryTest.findByName("anan"); System.out.println(byId); }
2.1.5 更新用户测试
/** * 使用save更新,需要测试 */ @Test public void updateUser(){ Optional<User> byId = repositoryTest.findById("61386067aa33044a1195589b"); User user = byId.get(); user.setName("de"); repositoryTest.save(user); System.out.println("更新用户完成"); }
在刚开始测试时,发现并不能修改这条记录,一直会新增
后来发现数据中的中_id字段
save修改的原理是根据_id是否已经存在,存在则修改,不存在则新增,而我的User中是没有这个字段的,所以每次传过去都是空的_id,会一直新增
@Document("User") public class User<Data> implements Serializable { private String _id;
在User中新增_id字段解决上面问题
可以看到_id记录中的名称已经修改了
2.1.6 删除用户测试
根据_id进行删除
/** * 删除用户测试 */ @Test public void deleteUser(){ repositoryTest.deleteById("613866efd78e4b6246d8b5b1"); System.out.println("删除成功"); }
根据id批量删除,首先在repository中新增方法
void deleteAllBy_idIsIn(List<String> ids);
/** * 批量删除 */ @Test public void batchDeleteUser(){ ArrayList<String> list = Lists.newArrayList(); list.add("6131c83d93944e2364df3aec"); list.add("6131cb08c9622c250fa4e9e0"); list.add("6131d491a31d4c49a6c9585b"); list.add("6138659913395b34a6e51e67"); repositoryTest.deleteAllBy_idIsIn(list); System.out.println("批量删除成功"); }