1. 程式人生 > >MongoDb學習(四)--Repository

MongoDb學習(四)--Repository

在學習這個的時候。關於Repository的對映。在備註xml的時候出現了錯誤。

錯誤有點坑。以後寫的時候注意一點,在學習的時候。用的mongo的jar包版本比較低。

然而本機操作的時候,用的是最新版。其xml的配置發生的變化。

關於配置的資訊。在配置的時候去官網查一下當前版本的使用方法。

這裡記錄一下spring-data-mongodb 的使用方法。增刪改查。語法使用等。

通過學習這個。發現spring的好處。降低了開發門檻。而且可以提高開發的速度。還是不錯的。

在前面幾次學習中。都是使用的原生方法進行查詢。這次換一種全新的方法。

基本操作就是建立一個自定義Repository的介面。讓他繼承與CrudRepository。

然後裡面有附帶的一些增刪改查的方法。

這個最大的好處就是我們只用關注業務邏輯和介面的定義即可。

開發的時候,可以直接寫介面。然後不用去寫實現類,除非有複雜的方法有實現。

當然,這個接口裡面的方法不是隨便寫的。而是有標準與規範的。具體寫法,可以去官網查詢api文件

當前版本

      <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>2.1.3.RELEASE</version>
  </dependency>

配置檔案,版本不同,配置檔案不同

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:context="http://www.springframework.org/schema/context"
          xmlns:mongo="http://www.springframework.org/schema/data/mongo"
          xsi:schemaLocation
= "http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- Default bean name is 'mongo' --> <mongo:mongo-client host="localhost" port="27017"/> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg ref="mongoClient"/> <constructor-arg name="databaseName" value="chaoba"/> </bean> <mongo:repositories base-package="SpringMogo.mongo" /> </beans>

 

    List<Chaoba> findByName(String name);//根據條件查詢
    List<Chaoba> findByNameAndSex(String name,String sex);//and查詢
    List<Chaoba> findByNameAndSexAndAge(String name,String sex,String age);//多個and查詢
    List<Chaoba> findByNameOrSex(String name,String sex);//or查詢
    List<Chaoba> findByName(String name,Pageable page);//分頁查詢
    List<Chaoba> findByName(String name,Sort sort);//排序查詢
    
    List<Chaoba> findTop2ByName(String name);//查詢前幾條

本次學習程式碼如下

ChaobaRepository類
package SpringMogo.mongo;

import java.util.List;

import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository("ChaobaRepository")
public interface ChaobaRepository extends CrudRepository<Chaoba, String> {

    List<Chaoba> findByName(String name);// 根據條件查詢

    List<Chaoba> findByNameAndSex(String name, String sex);// and查詢

    List<Chaoba> findByNameAndSexAndAge(String name, String sex, String age);// 多個and查詢

    List<Chaoba> findByNameOrSex(String name, String sex);// or查詢

    List<Chaoba> findByName(String name, Pageable page);// 分頁查詢

    List<Chaoba> findByName(String name, Sort sort);// 排序查詢

    List<Chaoba> findTop2ByName(String name);// 查詢前幾條

}
實體類
package SpringMogo.mongo;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

@Document(collection = "chaoba1")
public class Chaoba {
    @Id
    private String id;
    @Field("name")
    private String name;
    @Field("sex")
    private String sex;
    @Field("age")
    private String age;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

}
測試類
package SpringMogo.mongo;

import java.util.List;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Order;

/**
 * Hello world!
 *
 */
public class App {

    private static ChaobaRepository chaobaRepository;

    static {
        chaobaRepository = (ChaobaRepository) new ClassPathXmlApplicationContext("classpath:spring.xml")
                .getBean("ChaobaRepository");
    }

    public static void main(String[] args) {
        System.out.println(chaobaRepository.count());

        // List<Chaoba> result= chaobaRepository.findByName("暮雪超霸");
        // And查詢
        // List<Chaoba> result=
        // chaobaRepository.findByNameAndSexAndAge("chaoba4565","男","20");
        // Or查詢
        // List<Chaoba> result= chaobaRepository.findByNameOrSex("chaoba4565","女");
        // 分頁查詢
        // List<Chaoba> result= chaobaRepository.findByName("暮雪超霸",new PageRequest(1,
        // 5));
        // 排序查詢
        // List<Chaoba> result= chaobaRepository.findByName("暮雪超霸",new
        // Sort(Order.asc("title")));

        // Top查詢
        List<Chaoba> result = chaobaRepository.findTop2ByName("暮雪超霸");

        for (Chaoba chaoba : result) {
            System.out.println(chaoba.getName());
        }
    }
}