Spring Data CRUD(MongoDB)

对数据库的操作一定要放在@Service 类中,而不是放在 @Controller 类中;且 @Controller 类可以调用 @Service 类的方法,反之则不行。这是 SpringMVC的经典架构理论。

新增数据

 @Autowired
  private MongoTemplate mongoTemplate;

  public void test() {
    Song song = new Song();
    song.setSubjectId("s001");
    song.setLyrics("...");
    song.setName("成都");

    mongoTemplate.insert(song);
  }

先自动注入 mongoTemplate 再通过.insert() 方法来完成数据插入

查询数据

使用:

mongoTemplate.findById(songId, Song.class)

来寻找数据

其中findById() 方法第 1 个参数就是主键 id,第 2 个参数是具体的类,写法是 类名.class

修改数据

// 修改 id=1 的数据
Query query = new Query(Criteria.where("id").is("1"));

// 把歌名修改为 “new name”
Update updateData = new Update();
updateData.set("name", "new name");

// 执行修改,修改返回结果的是一个对象
UpdateResult result = mongoTemplate.updateFirst(query, updateData, Song.class);
// 修改的记录数大于 0 ,表示修改成功
System.out.println("修改的数据记录数量:" + result.getModifiedCount());

先使用条件对象Criteria 构建条件对象 Query 实例,然后在调用修改对象 Update 的方法 .set()

最后调用 mongoTemplate.updateFirst(query, updateData, Song.class) 方法完成修改

删除数据

Song song = new Song();
song.setId(songId);

// 执行删除
DeleteResult result = mongoTemplate.remove(song);
// 删除的记录数大于 0 ,表示删除成功
System.out.println("删除的数据记录数量:" + result.getDeletedCount());

调用.remove() 方法来删除数据

多条件查询

当我们查询时,往往会查询到多条数据,所以我们一般返回数组:

List<Song> songs = mongoTemplate.find(query, Song.class);

查询方法比较简单,但查询操作的复杂性在于条件,需要先构建好 Criteria 条件对象的实例,来构建 Query 实例:

Query query = new Query(criteria);

Criteria 对象一般存在两种情况:

单一条件:Criteria criteria1 = Criteria.where("条件字段名").is("条件值") 即可返回一个条件对象的实例

组合条件:更加或(or)、且(and) 的关系进行组合,多个子条件对象组合成一个总条件对象:

  • 或关系:

Criteria criteria = new Criteria();

criteria.orOperator(criteria1, criteria2);

  • 且关系:

Criteria criteria = new Criteria();

criteria.andOperator(criteria1, criteria2);

这两个方法的参数,可以输入多个子条件,也可以输入子条件数组

当然,组合条件情况下,也可以多层组合 。