Spring Boot之搞定mongoTemplate的知識小結(jié)
最近開發(fā)一些MongoDB+Spring Boot的項目,發(fā)現(xiàn)相較于MyBatis來說,Spring Boot對于MongoDB進行操作變化更多,所以總結(jié)一下使用mongoTemplate庫的知識點,以備以后查閱方便。
首先在項目中的pom.xml配置文件中添加如下依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
在需要引入mongoTemplate對象的Service文件中添加該對象即可,如下所示:
public class JobService { // 引入mongoTemplate對象 @Autowired MongoTemplate mongoTemplate;
針對CURD操作,常用的API方法有如下4類:
- 更新: save()。
- 查詢: findAll()、find()、findOne()。
- 更新操作:update()。
- 刪除操作: remove()。
下面以一個實際的CRUD例子來講解具體用法,在注釋中會給出語法。
先還是創(chuàng)建一個數(shù)據(jù)類,假設(shè)我們是對武俠劍客數(shù)據(jù)進行操作,POJO對象的定義代碼如下所示。
/** * 武俠劍客類 */ @Data @NoArgsConstructor @AllArgsConstructor @Document(collection = "my_sworders") public class MySworder implements Serializable { // 劍客的ID @Id private String id; // 姓名 @Field private String name; // 生平描述 @Field private String description; // 絕招 @Field private String skill; // 創(chuàng)建時間 @Field private int created; }
其中特別注意的是,@Document是mongodb驅(qū)動庫提供設(shè)置操作的文檔集合名稱的注解,這里設(shè)置集合為my_sworders。
然后針對這個劍客類編寫一個Service文件,命名為SworderService.java:
@Service public class SworderService { @Autowired MongoTemplate mongoTemplate; /** * 添加一個劍客 * @param mySworder * @return */ public boolean add(MySworder mySworder) { long unixTime = System.currentTimeMillis() / 1000L; int nowUnixTime = (int) unixTime; mySworder.setCreated(nowUnixTime); /** * 語法:<T> T mongoTemplate.save(T objectToSave) * save方法用于保存數(shù)據(jù)對象,傳遞定義好的JavaBean即可,被保存的數(shù)據(jù)對象會作為返回值被返回。 * 類似地,使用insert也可以達到保存數(shù)據(jù)的作用。 */ MySworder obj = mongoTemplate.save(mySworder); if (obj.getId() > 0) { return true; } else { return false; } } /** * 獲取所有劍客數(shù)據(jù) * @return */ public List<MySworder> findAll() { /** * 語法:<T> List<T> findAll(Class<T> entityClass) * finAll會返回所有entityClass對應(yīng)的數(shù)據(jù)集合的數(shù)據(jù),相當(dāng)于MySQL中select * from xxx_table_name。 */ return mongoTemplate.findAll(MySworder.class); } public boolean update(MySworder mySworder) { // 創(chuàng)建查詢對象 Query query = Query.query(Criteria.where("id").is(mySworder.getId())); Update update = new Update(); update.set("name", mySworder.getName()); update.set("description", mySworder.getDescription()); update.set("skill", mySworder.getSkill()); /** * 語法:public UpdateResult updateFirst(Query query, UpdateDefinition update, Class<?> entityClass) * updateFirst用于更新第一個被匹配的數(shù)據(jù),query參數(shù)是查詢條件對象,update是需要更新的數(shù)據(jù)對象,entityClass就是對應(yīng)的JavaBean對象(文檔集合類) */ UpdateResult updateResult = mongoTemplate.updateFirst(query, update, MyArticle.class); if (updateResult.getModifiedCount() > 0) { return true; } else { return false; } } public boolean updateBatchByKeyWords(String searchKey,String replaceString) { // 創(chuàng)建模糊查詢對象 Pattern pattern = Pattern.compile("^.*" + searchKey + ".*$", Pattern.CASE_INSENSITIVE); Criteria criteria = Criteria.where("description").regex(pattern); Update update = new Update(); update.set("description", replaceString); Query query = new Query(); query.addCriteria(criteria); /** * 語法:public UpdateResult updateMulti(Query query, UpdateDefinition update, Class<?> entityClass) * updateMulti用于所有被匹配的數(shù)據(jù),query參數(shù)是查詢條件對象,update是需要更新的數(shù)據(jù)對象,entityClass就是對應(yīng)的JavaBean對象(文檔集合類) */ UpdateResult updateResult = mongoTemplate.updateMulti(query, update, MySworder.class); if (updateResult.getModifiedCount() > 0) { return true; } else { return false; } } public boolean delete(String id) { MySworder mySworder = new MySworder(); mySworder.setId(id); /** * 語法: DeleteResult remove(Object object) * 該方法用于刪除數(shù)據(jù),一般都是傳遞一個主鍵ID即可 */ DeleteResult deleteResult = mongoTemplate.remove(mySworder); if (deleteResult.getDeletedCount() > 0) { return true; } else { return false; } } public MySworder details(String id) { Query query = Query.query(Criteria.where("id").is(id)); /** * <T> T findOne(Query query, Class<T> entityClass) * * findOne就是根據(jù)查詢條件(query)獲取一條數(shù)據(jù)。 */ return mongoTemplate.findOne(query, MySworder.class); } }
其中模糊查詢是使用了regex方法,并使用匹配Pattern對象來保存需要被匹配的字符串。
如果是多條件查詢,則需要使用Query對象來保存多個查詢條件,具體代碼如下:
// 用于存儲條件對象 Query query = new Query(); Criteria nameCriteria = Criteria.where("name").is(loginUser.getName()); Criteria passwordCriteria = Criteria.where("password").is(loginUser.getPassword()); query.addCriteria(nameCriteria); query.addCriteria(passwordCriteria); MyUser hasUser = mongoTemplate.findOne(query, MyUser.class); Integer userId = hasUser.getId();
如果查詢條件很多,那么這個addCriteria的代碼段就會很長,這個時候就考慮自己再封裝一個工具類,把循環(huán)查詢條件和一些復(fù)雜查詢的過程給封裝成一個方法,這樣事半功倍。
到此這篇關(guān)于Spring Boot之搞定mongoTemplate的知識小結(jié)的文章就介紹到這了,更多相關(guān)Spring Boot搞定mongoTemplate內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中關(guān)于String StringBuffer StringBuilder特性深度解析
這篇文章主要介紹了Java中關(guān)于String StringBuffer StringBuilder特性深度解析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09Java線程之鎖對象Lock-同步問題更完美的處理方式代碼實例
這篇文章主要介紹了Java線程之鎖對象Lock-同步問題更完美的處理方式代碼實例,還是挺不錯的,這里分享給大家,需要的朋友可以參考。2017-11-11SpringBoot使用Validation校驗參數(shù)的詳細過程
這篇文章主要介紹了SpringBoot使用Validation校驗參數(shù),本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09Spring Boot高級教程之使用Redis實現(xiàn)session共享
這篇文章主要為大家詳細介紹了Spring Boot高級教程之使用Redis實現(xiàn)session共享,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10Spring Boot集成Redis實現(xiàn)緩存機制(從零開始學(xué)Spring Boot)
這篇文章主要介紹了Spring Boot集成Redis實現(xiàn)緩存機制(從零開始學(xué)Spring Boot),需要的朋友可以參考下2017-04-04