Sunday, 7 November 2021

Spring Data: ArangoDB: Sort by multiple keys

You can sort the documents in a collection on multiple properties.

 

For example, below snippet Sort the documents in the ascending order of employee age and descending order of their firstName.

Iterable<Employee> empIterable = employeeRepo.findAll(Sort.by(Arrays.asList(Sort.Order.asc("age"), Sort.Order.desc("firstName"))));

Follow below step-by-step procedure to build complete working application.

 

Step 1: Create new maven project ‘sort-by-doc-properties-demo’.

 

Step 2: Update pom.xml with below dependencies.

 

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.sample.app</groupId>
  <artifactId>sort-by-doc-properties-demo</artifactId>
  <version>1</version>

  <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.5</version>
  </parent>


  <dependencies>
    <dependency>
      <groupId>com.arangodb</groupId>
      <artifactId>arangodb-spring-boot-starter</artifactId>
      <version>2.3.3.RELEASE</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>


Step 3: Define Employee entity class.

 

Employee.java

package com.sample.app.entity;

import com.arangodb.springframework.annotation.ArangoId;
import com.arangodb.springframework.annotation.Document;
import org.springframework.data.annotation.Id;

@Document("employees")
public class Employee {

  @Id // db document field: _key
  private String key;

  @ArangoId // db document field: _id
  private String arangoId;

  private Integer id;
  private String firstName;
  private String lastName;
  private Integer age;

  public Employee(Integer id, String firstName, String lastName, Integer age) {
    super();
    this.id = id;
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
  }

  public String getKey() {
    return key;
  }

  public void setKey(String key) {
    this.key = key;
  }

  public String getArangoId() {
    return arangoId;
  }

  public void setArangoId(String arangoId) {
    this.arangoId = arangoId;
  }

  public Integer getId() {
    return id;
  }

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

  public String getFirstName() {
    return firstName;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public Integer getAge() {
    return age;
  }

  public void setAge(Integer age) {
    this.age = age;
  }

  @Override
  public String toString() {
    return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", age=" + age + "]";
  }

}


Step 4: Define EmployeeRepository interface.

 

EmployeeRepository.java

package com.sample.app.repository;

import com.arangodb.springframework.repository.ArangoRepository;
import com.sample.app.entity.Employee;

public interface EmployeeRepository extends ArangoRepository<Employee, String> {

}


Step 5: Define Arango db configuration class.

 

ArangoConfig.java

package com.sample.app.config;

import com.arangodb.ArangoDB;
import com.arangodb.springframework.annotation.EnableArangoRepositories;
import com.arangodb.springframework.config.ArangoConfiguration;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableArangoRepositories(basePackages = { "com.sample.app" })
public class ArangoConfig implements ArangoConfiguration {

  @Override
  public ArangoDB.Builder arango() {
    return new ArangoDB.Builder().host("localhost", 8529).user("root").password("tiger");
  }

  @Override
  public String database() {
    return "abc_org";
  }
}

 

Step 6: Define main application class.

 

App.java

 

package com.sample.app;

import java.util.Arrays;
import java.util.List;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.domain.Sort;

import com.sample.app.entity.Employee;
import com.sample.app.repository.EmployeeRepository;

@SpringBootApplication
public class App {
  public static void main(String args[]) {
    SpringApplication.run(App.class, args);
  }

  @Bean
  public CommandLineRunner demo(EmployeeRepository employeeRepo) {
    return (args) -> {
      List<Employee> emps = Arrays.asList(new Employee(1, "Ram", "Gurram", 31),
          new Employee(2, "Sundar", "Deavanagari", 32), new Employee(3, "Srinuvasa rao", "Guma", 43),
          new Employee(4, "Madhavi Latha", "Gumma", 41), new Employee(5, "Gopi", "Battu", 33),
          new Employee(6, "Sailu", "PTR", 33), new Employee(7, "Venkat", "PTR", 32));

      employeeRepo.saveAll(emps);

      Iterable<Employee> empIterable = employeeRepo
          .findAll(Sort.by(Arrays.asList(Sort.Order.asc("age"), Sort.Order.desc("firstName"))));

      for (Employee emp : empIterable) {
        System.out.println(emp);
      }
    };
  }
}

 

Total project structure looks like below.

 


 

 

Run App.java, you will see below messages in console.

Employee [id=1, firstName=Ram, lastName=Gurram, age=31]
Employee [id=7, firstName=Venkat, lastName=PTR, age=32]
Employee [id=2, firstName=Sundar, lastName=Deavanagari, age=32]
Employee [id=6, firstName=Sailu, lastName=PTR, age=33]
Employee [id=5, firstName=Gopi, lastName=Battu, age=33]
Employee [id=4, firstName=Madhavi Latha, lastName=Gumma, age=41]
Employee [id=3, firstName=Srinuvasa rao, lastName=Guma, age=43]


You can download complete working application below link.

https://github.com/harikrishna553/springboot/tree/master/arangodb/sort-by-doc-properties-demo

 

 

Previous                                                    Next                                                    Home

No comments:

Post a Comment