第十二章 springboot + mongodb(複雜查詢)

來源:互聯網
上載者:User

標籤:base   min   value   val   opened   結果   mongod   import   isp   

  • 簡單查詢:使用自訂的XxxRepository介面即可。(見 第十一章 springboot + mongodb(簡單查詢))
  • 複雜查詢:使用MongoTemplate以及一些查詢條件構建類(BasicDBList、BasicDBObject、Criteria等)

1、application.properties

1 #mongodb note:mongo3.x will not use host and port,only use uri2 #spring.data.mongodb.host=192.168.22.1103 #spring.data.mongodb.port=270174 #spring.data.mongodb.database=myfirstMongodb5 spring.data.mongodb.uri=mongodb://192.168.22.110:27017/myfirstMongodb

說明:

  • mongo2.x支援以上兩種配置方式
  • mongo3.x僅支援uri方式

2、Admin

package com.xxx.firstboot.domain;import org.springframework.data.annotation.Id;/** * 測試複雜的mongo查詢 */public class Admin {    @Id    private String adminId;    private String name;    private Integer sex;    private String address;    public String getAdminId() {        return adminId;    }    public void setAdminId(String adminId) {        this.adminId = adminId;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getSex() {        return sex;    }    public void setSex(Integer sex) {        this.sex = sex;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }}
View Code

注意:

  • @Id必須有

3、AdminRepository

package com.xxx.firstboot.mongo;import org.springframework.data.mongodb.repository.MongoRepository;import com.xxx.firstboot.domain.Admin;public interface AdminRepository extends MongoRepository<Admin, String> {}

說明:該介面用於簡單查詢。這裡是一個空介面,具有CRUD功能。

4、CustomerController

/*********************測試複雜的mongo查詢**********************/    @Autowired    private AdminRepository adminRepository;    @Autowired    private MongoTemplate mongoTemplate;        @ApiOperation("增加一個Admin")    @RequestMapping(value = "/addAdmin", method = RequestMethod.GET)    public Admin addAdmin(@RequestParam("name") String name,                          @RequestParam("sex") Integer sex,                          @RequestParam("address") String address) {        Admin admin = new Admin();        admin.setName(name);        admin.setSex(sex);        admin.setAddress(address);        return adminRepository.save(admin);    }        @ApiOperation("擷取所有的Admin")    @RequestMapping(value = "/getAllAdmin", method = RequestMethod.GET)    public List<Admin> getAllAdmin() {        return adminRepository.findAll();    }        @ApiOperation("複雜的admin查詢")    @RequestMapping(value = "/getAdminByNameAndSexOrAddress", method = RequestMethod.GET)    public Admin getAdminByNameAndSexOrAddress(@RequestParam("name") String name,                                                 @RequestParam(value="sex",required=false) Integer sex,                                                 @RequestParam(value="address",required=false) String address) {        /**         * OR         */        BasicDBList orList = new BasicDBList(); //用於記錄        if (sex != null) {            orList.add(new BasicDBObject("sex", sex));        }        if (StringUtils.isNotBlank(address)) {            orList.add(new BasicDBObject("address", address));        }        BasicDBObject orDBObject = new BasicDBObject("$or", orList);                /**         * and         */        BasicDBList andList = new BasicDBList();        andList.add(new BasicDBObject("name", name));        andList.add(orDBObject);        BasicDBObject andDBObject = new BasicDBObject("$and", andList);                return mongoTemplate.findOne(new BasicQuery(andDBObject), Admin.class);    }
View Code

說明:

  • getAdminByNameAndSexOrAddress要實現select * from admin where name = ? and (sex = ? or address = ?)
  • 通過BasicDBList、BasicDBObject構建查詢參數
  • findOne返回第一個合格結果、find返回合格結果清單
  • 以上查詢的collection是admin(VO的簡單類名),也可以指定從某一個collection中查詢(查看find、findOne等方法)

注意:mongodb的查詢欄位必須是小寫

測試:

啟動mongo,啟動應用,開啟swagger,訪問即可。

 

參考:

http://blog.csdn.net/congcong68/article/details/47183209

第十二章 springboot + mongodb(複雜查詢)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.