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

 

 

مقدمه

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

 

شرح مثال

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

 

مرحله اول

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

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

 

مرحله دوم

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

کلاس Company :

@Node
public class Company {

    @Id
    private long id;
    private String name;

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

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

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public List 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 engines;

    public Car(long id, String name, int year, List 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 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 carList;

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

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public List getCarList() {
        return carList;
    }
}

 

مرحله سوم

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

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

    @Query("MATCH(n:Car START WITH {$pattern}) RETURN n")
    List 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 sponsors
    ){
        Car car = new Car(
                id,
                name,
                year,
                sponsors
        );
        
        carRepository.save(car);
    }

    private void delete(String id){

        carRepository.deleteById(id);
    }
}

 

 

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

 

و در آخر

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

ارسال دیدگاه

Captcha 18 − 14 =

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

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