من حسین کورائی در این مقاله قصد دارم به اختصار به نحوه‌ی پیاده‌سازی Neo4j و استفاده از GraphQl در پروژه خود بپردازم. در صورتی‌که با مفاهیم نام برده آشنا نیستید پیشنهاد می‌کنم پیش از خواندن این مثال، حتماً مقاله‌های Neo4j  و GraphQl را مشاهده نمایید.

 

 

مقدمه Neo4j

ما در این مقاله از زبان جاوا و فریم ورک spring برای پیاده‌سازی استفاده می‌کنیم. راهنمایی‌های لازم جهت دانلود، نصب و کانفیگ Neo4j را می‌توانید از سایت آن بگیرید. همچنین از نرم‌افزار Neo4j Browser که برای ساده‌سازی کار با دیتا استفاده می‌شود، بهره بردیم. شما می‌توانید نسخه‌های متناسب با نیاز خود را از لینک دانلود نمایید.

 

شرح مثال

در این مثال می‌خواهیم نشان دهیم هر شرکت خودروسازی چه خودروهایی تولید نموده و هر خودرو چه اسپانسری دارد. همچنین هر اسپانسر جداگانه می‌تواند مالک یک خودرو باشد.

 

مرحله اول Neo4j

ابتدا وابستگی‌های مورد نیاز را به پروژه خود اضافه می‌کنیم.

  spring-boot-starter-data-neo4j
  neo4j-ogm-test
  neo4j-ogm-embedded-driver
  neo4j-java-driver-spring-boot-starter

 

مرحله دوم Neo4j

کلاس‌های خود را مشخص کرده و با @Node آن‌ها را به عنوان Node در نظر می‌گیریم.

کلاس Company :

@Node
public class Company {

    @Id
    private long id;
    private String name;

    @Relationship(type = "OWN_IN", direction = Relationship.Direction.OUTGOING)
    private List<Car> carList;

    public Company(long id, String name, List<Car> carList) {
        this.id = id;
        this.name = name;
        this.carList = carList;
    }

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public List<Car> getCarList() {
        return carList;
    }
}

 

کلاس Car :

@Node
public class Car {

    @Id
    private long id;
    private String name;
    private int year;

    @Relationship(type = "OWN_ENGINE", direction = Relationship.Direction.OUTGOING)
    private List<Engine> engines;

    public Car(long id, String name, int year, List<Engine> engines) {
        this.id = id;
        this.name = name;
        this.year = year;
        this.engines = engines;
    }

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getYear() {
        return year;
    }

    public List<Engine> getEngines() {
        return engines;
    }
}

 

و کلاس Sponsor :

@Node
public class Sponsor {

    @Id
    private long id;
    private String name;

    @Relationship(type = "OWN_CAR", direction = Relationship.Direction.OUTGOING)
    private List<Car> carList;

    public Sponsor(long id, String name, List<Car> carList) {
        this.id = id;
        this.name = name;
        this.carList = carList;
    }

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public List<Car> getCarList() {
        return carList;
    }
}

 

مرحله سوم Neo4j

در این مرحله سعی میکنیم با دیتای درون برنامه اعمال CRUD انجام دهیم.

@Repository
public interface CarRepository extends Neo4jRepository<Car, String> {
    
    Car findByName(String name);

    @Query("MATCH(n:Car START WITH {$pattern}) RETURN n")
    List<Car> findByPatternName(@Param("pattern") String pattern);
}

 

همان‌طور که مشاهده می‌کنید برای پیدا کردن یک نود و یا لیستی از نود ها می‌توانید از دو روش استفاده نمایید. روش اول استفاده از امکانی که Neo4j در اختیار ما قرار داده و تنها با درج نام تابع به این صورت findByName نود هدف را با ورودی نام آن می‌یابد. در صورتی‌که دو نود دارای نام یکسانی باشند، اولین نود یافت شده را بازگردانی می‌کند. روش دوم استفاده از @Query  است. در این روش که دقیق‌تر و کامل‌تر است می‌توانیم نود هدف خود را بیابیم. که در مقاله‌های بعد مفصل در خصوص کوئری زدن در Neo4j صحبت خواهیم کرد.

برای پیاده‌سازی سایر اعمال مانند اضافه‌کردن نود و حذف آن، در لایه سرویس از توابع save و delete استفاده می‌کنیم. برای درک بهتر، لطفاً قطعه کد زیر را مشاهده نمایید.

 

@Service
public class CarService {
    
    @Autowired
    private CarRepository carRepository;
    
    private void add(
            long id,
            String name,
            int year,
            List<Sponsor> sponsors
    ){
        Car car = new Car(
                id,
                name,
                year,
                sponsors
        );
        
        carRepository.save(car);
    }

    private void delete(String id){

        carRepository.deleteById(id);
    }
}

 

 

شما می‌توانید پروژه مربوطه را از لینک گیت هاب دریافت نمایید.

 

و در آخر

وبسایت میربزرگی قصد دارد تا با ارائه مقاله ها و تجربه‌های کاربردی شما را در زمینه یادگیری و رفع اشکالاتتان کمک کند. در صورت وجود هرگونه سوالی به من ایمیل بزنید.

ارسال دیدگاه

Captcha 91 − = 85

در صورت نیاز و یا هر گونه مشکل ایمیل بزنید

پیام با موفقیت ثبت شد.
خطایی رخ داده است.