Neo4j-OGM (Object Graph Mapping) ile java örnek
Merhaba arkadaşlar ,
Neo4j bildiğiniz üzere açık kaynak kodlu graph database’dir. Bugün yazımızda neo4j geliştiricilerinin yayınladığı Neo4j-ogm( Object Graph Mapper) kütüphanesi ile örnek yapacağız. Bu kütüphane neden gerekli diye sorarsanız java veritabanı işlemleri yaptıpımızda çuğunun bildiği ORM (Object Relation Mapping – JPA buna bir örnektir.) yapısının bu kütüphanede kurulmasıdır. Örneğimiz ile daha iyi anlaşılacağını düşünüyorum.
İlk olarak Neo4j indirip kuralım bilgisayarımıza
Link : https://neo4j.com/download/other-releases/
ben 2.3.6 versiyonunu indirip kurdum . Kurulum Sonrasında çalıştırdığınızda neo4j sunucusunu şöyle bir pencere açılacaktır.
Çıkan ekranda start dediğimizde http://localhost:7474 adresinden neo4j yönetim panelimize ulaşabiliriz. İlk giriş yaptığınızda default olarak username:neo4j , password:neo4j olarak girş yaptığınızda şifrenizi değiştirmenizi isteyecektir.
Şimdi ise uygulamamıza başlayalım . Uygulamamız maven projesi olacaktır . Kullanacağımız kütphane bağımlılıklarımız aşşağıdaki gibidir.
1 2 3 4 5 |
<dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-ogm</artifactId> <version>1.1.6</version> </dependency> |
Şimdi örneğimizi yapalım. Öğrenci ve dersler adında iki tane sınıfımız olsun Veritabanımızda görmek istediğimiz ise her bir öğrencinin hangi dersler’e girdğini ve ders notlarını öğrenelim ve bunu adından da anlaşılacağı gibi neo4j ‘nin kendi arayüzünde grafik olarak çıktısına bakalım.
Yani bir maven projesi açtık ve projemizde kullanacağımız kütüphaneyi pom.xml dosyamıza ekledikten sonra
Student ve Course isminde iki tane sınıf ekledik .
Student.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
import java.util.HashSet; import java.util.Set; import org.neo4j.ogm.annotation.GraphId; import org.neo4j.ogm.annotation.NodeEntity; import org.neo4j.ogm.annotation.Relationship; //Bu notasyon ile Veritabanı objesi //olduğunu söylemiş oluyoruz @NodeEntity public class Student { //Neo4j id isminde Long tipinde bir parametre // olmasını şart koşuyor bize // id 'yi siz vermezseniz kendi içinde // oluşan sequence ile kendi otomatik atıyor. @GraphId private Long id; private String name; //Burada ise iki obje arasındaki düğümün ismi //Yani birazdan göreceğiz Öğrenci ile Dersler arasında //Obje iilişkilendirilirken oklar ile gösteriliyor //Biz ilişkinin ismini "courses" koyuyoruz. //Relationship ise : OUTGOING olarak ekledik. Dışa doğru yayılır. @Relationship(type = "courses", direction = Relationship.OUTGOING) private Set<Course> courses = new HashSet<Course>(); public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Course> getCourses() { return courses; } public void setCourses(Set<Course> courses) { this.courses = courses; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } |
Şimdi ise
Course.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import org.neo4j.ogm.annotation.GraphId; import org.neo4j.ogm.annotation.NodeEntity; @NodeEntity public class Course { @GraphId private Long id; private String name; private float point; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getPoint() { return point; } public void setPoint(float point) { this.point = point; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Course other = (Course) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } |
Şimdi ise Neo4j ile connection kuracağımız sınıfımızı yazalım.
Neo4jSessionFactory.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import org.neo4j.ogm.session.Session; import org.neo4j.ogm.session.SessionFactory; public class Neo4jSessionFactory { //Jpa'dan hatırlarsını persistence.xml de entity sınıflarımızı belirtirdik //Burada da paket smi vererek bunun altındaki sınıflarda entitylerimizi ara diyoruz. private final static SessionFactory sessionFactory = new SessionFactory("com.neo.modal"); private static Neo4jSessionFactory factory = new Neo4jSessionFactory(); public static Neo4jSessionFactory getInstance() { return factory; } private Neo4jSessionFactory() { } public Session getNeo4jSession() { //Veritabanı il bağlantıyı bu satırda kuruyoruz gerekli referansları aldıktan sonra //Burada iki şekilde bağlantı kurabiliriz. İsteiğinize göre yapabilirsiniz. //sessionFactory.openSession(url, username, password); return sessionFactory.openSession("http://neo4j:root@localhost:7474"); } } |
Bundan sonra ise main methodumuzu yazalım ve çalıştıralım.
App.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import org.neo4j.ogm.session.Session; import com.neo.modal.Course; import com.neo.modal.Student; /** * mkilic * www.turkishh.com */ public class App { public static void main(String[] args) { Session session = Neo4jSessionFactory.getInstance().getNeo4jSession(); Course yazilim = new Course(); yazilim.setName("Yazilim Muhendisligi"); yazilim.setPoint(5.0f); Course vertabani = new Course(); vertabani.setName("Veri Tabani Yonetim Sistemleri"); vertabani.setPoint(4.0f); Course algoritma = new Course(); algoritma.setName("Programlamaya Giris ve Algoritmalar"); algoritma.setPoint(2.0f); Course yapayzeka = new Course(); yapayzeka.setName("Bulanik Mantik"); yapayzeka.setPoint(2.0f); Student eymen = new Student(); eymen.setName("Eymen"); eymen.getCourses().add(yazilim); eymen.getCourses().add(vertabani); eymen.getCourses().add(algoritma); eymen.getCourses().add(yapayzeka); Student tan = new Student(); tan.setName("Tan"); tan.getCourses().add(yazilim); tan.getCourses().add(vertabani); tan.getCourses().add(algoritma); Student noyan = new Student(); noyan.setName("Noyan"); noyan.getCourses().add(yazilim); noyan.getCourses().add(algoritma); noyan.getCourses().add(yapayzeka); Student mert = new Student(); mert.setName("Mert"); mert.getCourses().add(yazilim); mert.getCourses().add(vertabani); Student metin = new Student(); metin.setName("Metin"); metin.getCourses().add(yazilim); session.save(eymen); session.save(tan); session.save(noyan); session.save(mert); session.save(metin); } } |
Gerekli kod açıklamaları verilmiştir yorum satırlarında
Çıktısı:
ne04j old version : http://www.turkishh.com/programlama/graph-database-java-ile-neo4j-kullanimi/
Umarım yaararlı olmuştur 🙂
İyi Çalışmalar
1 Response
[…] neo4j-ogm kütüphanesini kullanarak yapılan örnek : http://www.turkishh.com/programlama/neo4j-ogm-graph-mapping-object-ile-java-ornek/ […]