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);
这两个方法的参数,可以输入多个子条件,也可以输入子条件数组
当然,组合条件情况下,也可以多层组合 。