Spring Boot 結(jié)合 MongoDB 簡單使用

1讼稚、什么是MongoDB ?

MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫椭赋。由 C++ 語言編寫。旨在為 WEB 應用提供可擴展的高性能數(shù)據(jù)存儲解決方案雇庙。

MongoDB 是一個介于關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫之間的產(chǎn)品谓形,是非關系數(shù)據(jù)庫當中功能最豐富,最像關系數(shù)據(jù)庫的状共。

MongoDB 是由C++語言編寫的套耕,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)谁帕。

在高負載的情況下峡继,添加更多的節(jié)點,可以保證服務器性能匈挖。

MongoDB 將數(shù)據(jù)存儲為一個文檔碾牌,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對組成。

MongoDB 文檔類似于 JSON 對象儡循。字段值可以包含其他文檔舶吗,數(shù)組及文檔數(shù)組。

MongoDB和關系數(shù)據(jù)庫的對比

mongodb的增刪改查

Spring Boot對各種流行的數(shù)據(jù)源都進行了封裝择膝,當然也包括了mongodb,下面給大家介紹如何在spring boot中使用mongodb:

  • 1誓琼、pom包配置

pom包里面添加spring-boot-starter-data-mongodb包引用

<dependencies>
    <dependency> 
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency> 
</dependencies>
  • 2、在application.properties中添加配置
    pom包里面添加spring-boot-starter-data-mongodb包引用
<dependencies>
    <dependency> 
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency> 
</dependencies>
  • 2肴捉、在application.properties中添加配置
spring.data.mongodb.uri=mongodb://name:password@localhost:27017/admin

2腹侣、創(chuàng)建數(shù)據(jù)實體

@Data
@ToString
public class User implements Serializable {
    private static final long serialVersionUID = -3258839839160856613L;
    @Id
    private Long id;

    private String username;
    private Integer age;

    public User(Long id, String username, Integer age) {
        this.id = id;
        this.username = username;
        this.age = age;
    }
}
  • 實現(xiàn)User的數(shù)據(jù)訪問對象:UserRepository
public interface UserRepository extends MongoRepository<User, Long> {

    User findByUsername(String username);
    
    User findByUsernameAndAge(String username, Integer age);

    User findByAge(Integer age);
}
  • 在單元測試中調(diào)用
@RunWith(SpringRunner.class)
@SpringBootTest
public class MongodbApplicationTests {
    @Autowired
    private UserRepository userRepository;
    
    @Test
    public void test1() throws Exception {
//        User user = userRepository.findByAge(40);
//        System.out.println(user.toString());
        
        User user1 = userRepository.findByUsernameAndAge("mama", 40);
        System.out.println(user1.toString());
    }

    @Test
    public void test() throws Exception {

        // 創(chuàng)建三個User,并驗證User總數(shù)
        userRepository.save(new User(1L, "didi", 30));
        userRepository.save(new User(2L, "mama", 40));
        userRepository.save(new User(3L, "kaka", 50));

        Assert.assertEquals(3, userRepository.findAll().size());

        // 刪除一個User齿穗,再驗證User總數(shù)
        User u = userRepository.findById(1L).get();
        System.out.println(u.toString());
        userRepository.delete(u);
        Assert.assertEquals(2, userRepository.findAll().size());

        // 刪除一個User傲隶,再驗證User總數(shù)
        u = userRepository.findByUsername("mama");
        System.out.println(u.toString());
//        userRepository.delete(u);
        Assert.assertEquals(2, userRepository.findAll().size());
    }
}

使用 MongoTemplate 操作

  • 創(chuàng)建 UserEntity
@Data
public class UserEntity implements Serializable {
        private static final long serialVersionUID = -3258839839160856613L;
        private String userName;
        private String passWord;

}
  • 創(chuàng)建實體dao的增刪改查操作
    dao層實現(xiàn)了 UserEntity 對象的增刪改查
 @Component
public class UserEntityDao implements IUserEntityDao {

    @Autowired
    private MongoTemplate mongoTemplate;

    public void save() {
        UserEntity userEntity = new UserEntity();
        userEntity.setUserName("mengma");
        userEntity.setPassWord("33333");
        mongoTemplate.save(userEntity);
    }


    public UserEntity findByUserName(String username) {
        //  使用 query 對象 聲明查詢 條件
        Query query = new Query(Criteria.where("userName").is(username));
        UserEntity userEntity = mongoTemplate.findOne(query, UserEntity.class);
        return userEntity;
    }

    /**
     * 通過 userName 更新  passWord
     *
     * @param:
     * @return:
     * @auther: Tangzhiqiang
     * @date: 2019/1/14 9:21
     */
    public void updateUser(String userName, String password) {

        // 通過 query 對象 聲明更新的條件
        Query query = new Query(Criteria.where("userName").is(userName));

        // 通過 update 對象 聲明更新字段 值
        Update update = new Update().set("passWord", password);

        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, UserEntity.class);
    }

    public void delByUsername(String username) {
        Query query = new Query(Criteria.where("userName").is(username));
        mongoTemplate.remove(query, UserEntity.class);
    }

    /**
     * 查詢分頁
     *
     * @param:
     * @return:
     * @auther: Tangzhiqiang
     * @date: 2019/1/14 10:42
     */
    public void findPage(int size, int page, String username) {
        // 通過 pageable 對象設置 分頁條件
        Pageable pageable = new PageRequest(page - 1, size);

        // 分頁具體邏輯條件
        Query query = new Query(Criteria.where("userName").is(username));
        List<UserEntity> userEntityList = mongoTemplate.find(query.with(pageable), UserEntity.class);
        System.out.println(userEntityList.toString());
    }

}

  • 測試類
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserEntityDaoTest {

    @Autowired
    private UserEntityDao userEntityDao;

    @Test
    public void save() {
        userEntityDao.save();
    }

    @Test
    public void findByUserName() {
        UserEntity userEntity = userEntityDao.findByUserName("mengma");
        System.out.println(userEntity.toString());
    }

    @Test
    public void updateUser() {
        userEntityDao.updateUser("mengma", "99999999");
    }

    @Test
    public void delByUserName() {
        userEntityDao.delByUsername("mengma");
    }

    @Test
    public void findPage() {
        userEntityDao.findPage(2, 1, "mengma");
    }

}
  • 分頁查詢
public void findPage(int size, int page, String username) {
        // 通過 pageable 對象設置 分頁條件
        Pageable pageable = new PageRequest(page - 1, size);

        // 分頁具體邏輯條件
        Query query = new Query(Criteria.where("userName").is(username));
        List<UserEntity> userEntityList = mongoTemplate.find(query.with(pageable), UserEntity.class);
        System.out.println(userEntityList.toString());
    }
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市窃页,隨后出現(xiàn)的幾起案子跺株,更是在濱河造成了極大的恐慌,老刑警劉巖脖卖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乒省,死亡現(xiàn)場離奇詭異,居然都是意外死亡畦木,警方通過查閱死者的電腦和手機作儿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馋劈,“玉大人攻锰,你說我怎么就攤上這事〖宋恚” “怎么了娶吞?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長械姻。 經(jīng)常有香客問我妒蛇,道長机断,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任绣夺,我火速辦了婚禮吏奸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘陶耍。我一直安慰自己奋蔚,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布烈钞。 她就那樣靜靜地躺著泊碑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毯欣。 梳的紋絲不亂的頭發(fā)上馒过,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音酗钞,去河邊找鬼腹忽。 笑死,一個胖子當著我的面吹牛砚作,可吹牛的內(nèi)容都是我干的窘奏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼偎巢,長吁一口氣:“原來是場噩夢啊……” “哼蔼夜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起压昼,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤求冷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后窍霞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匠题,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年但金,在試婚紗的時候發(fā)現(xiàn)自己被綠了韭山。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡冷溃,死狀恐怖钱磅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情似枕,我是刑警寧澤盖淡,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站凿歼,受9級特大地震影響褪迟,放射性物質(zhì)發(fā)生泄漏冗恨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一味赃、第九天 我趴在偏房一處隱蔽的房頂上張望掀抹。 院中可真熱鬧,春花似錦心俗、人聲如沸傲武。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谱轨。三九已至戒幔,卻和暖如春吠谢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诗茎。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工工坊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敢订。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓王污,卻偏偏與公主長得像,于是被迫代替她去往敵國和親楚午。 傳聞我的和親對象是個殘疾皇子昭齐,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 瞎忙,周末兩場筆試兩場面試矾柜,單位啟用新的第三方平臺阱驾,這星期抓緊上手,再準備一個presentation怪蔑。自習準備考...
    夏齁咸閱讀 130評論 0 0
  • 月簡月單閱讀 213評論 0 0
  • “從長遠來看里覆,你的組織唯一可持續(xù)的競爭優(yōu)勢,就是比對手更好更快的學習能力”缆瓣⌒希《第五項修煉》一書提出這個觀點。反觀現(xiàn)...
    云棫閱讀 293評論 4 7