最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot之搞定mongoTemplate的知識小結(jié)

 更新時間:2020年12月16日 09:16:17   作者:freephp  
這篇文章主要介紹了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對應的數(shù)據(jù)集合的數(shù)據(jù),相當于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就是對應的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就是對應的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)查詢條件和一些復雜查詢的過程給封裝成一個方法,這樣事半功倍。

到此這篇關(guān)于Spring Boot之搞定mongoTemplate的知識小結(jié)的文章就介紹到這了,更多相關(guān)Spring Boot搞定mongoTemplate內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何修改覆蓋spring boot默認日志策略logback詳解

    如何修改覆蓋spring boot默認日志策略logback詳解

    這篇文章主要給大家介紹了關(guān)于如何修改覆蓋spring boot默認日志策略logback的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • 基于序列化存取實現(xiàn)java對象深度克隆的方法詳解

    基于序列化存取實現(xiàn)java對象深度克隆的方法詳解

    本篇文章是對序列化存取實現(xiàn)java對象深度克隆的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 解析springboot集成AOP實現(xiàn)日志輸出的方法

    解析springboot集成AOP實現(xiàn)日志輸出的方法

    如果這需要在每一個controller層去寫的話代碼過于重復,于是就使用AOP定義切面 對其接口調(diào)用前后進行攔截日志輸出。接下來通過本文給大家介紹springboot集成AOP實現(xiàn)日志輸出,需要的朋友可以參考下
    2021-11-11
  • Mybatis添加Ehcache支持的方法

    Mybatis添加Ehcache支持的方法

    mybatis添加ehcache支持非常簡單,只主要在sql映射文件中添加一行代碼就可以實現(xiàn),糾結(jié)是什么代碼呢,這么神奇,帶著這樣問題一起通過本文學習吧
    2016-08-08
  • 使用位運算、值交換等方式反轉(zhuǎn)java字符串的多種方法(四種方法)

    使用位運算、值交換等方式反轉(zhuǎn)java字符串的多種方法(四種方法)

    這篇文章主要介紹了使用位運算、值交換等方式反轉(zhuǎn)java字符串,本文通過四種方式給大家講解,給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • SpringMVC日期類型參數(shù)傳遞實現(xiàn)步驟講解

    SpringMVC日期類型參數(shù)傳遞實現(xiàn)步驟講解

    這篇文章主要介紹了SpringMVC日期類型參數(shù)傳遞實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-02-02
  • SpringBoot bean的多種加載方式示例詳解

    SpringBoot bean的多種加載方式示例詳解

    本文詳細介紹了在SpringBoot中加載Bean的多種方式,包括通過xml配置文件、注解定義、特殊方式如FactoryBean、@ImportResource、ApplicationContext以及使用@Import注解導入bean的方法,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • SpringBoot整合log4j2日志的實現(xiàn)

    SpringBoot整合log4j2日志的實現(xiàn)

    在項目推進中,如果說第一件事是搭Spring框架的話,那么第二件事情就是在Sring基礎(chǔ)上搭建日志框架,大家都知道日志對于一個項目的重要性,尤其是線上Web項目,因為日志可能是我們了解應用如何執(zhí)行的唯一方式。此篇文章是博主在實踐中用Springboot整合log4j2日志的總結(jié)
    2021-06-06
  • Java中easypoi導入excel文件列名相同的處理方案

    Java中easypoi導入excel文件列名相同的處理方案

    這篇文章主要介紹了Java中easypoi導入excel文件列名相同的處理方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Java常用的八種排序算法與代碼實現(xiàn)

    Java常用的八種排序算法與代碼實現(xiàn)

    這篇文章主要給給大家分享Java常用的八種排序算法與代碼實現(xiàn),下面文章將詳細介紹整個實現(xiàn)過程,感興趣的小伙伙伴可以跟著小編一起來學習,希望對你有所幫助
    2021-10-10

最新評論

巍山| 游戏| 斗六市| 衢州市| 明光市| 修武县| 禹城市| 龙游县| 五河县| 四平市| 黔西| 璧山县| 乌兰察布市| 会泽县| 林西县| 景洪市| 吴忠市| 汝南县| 平泉县| 化州市| 普格县| 土默特左旗| 女性| 电白县| 宜宾市| 航空| 界首市| 禄劝| 行唐县| 宿州市| 洞口县| 普兰店市| 门源| 平泉县| 宁蒗| 堆龙德庆县| 沂源县| 莱州市| 揭东县| 化州市| 家居|