Spring-Boot-Turkish-Notes

image

Kütüphane ve Framework

  • Frameworkler ve kütüphaneler, bazı genel görevleri daha az ayrıntılı bir şekilde gerçekleştirmenize yardımcı olan başkası tarafından yazılmış kodlardır. Framework programın kontrolünü terse çevirir. Kütüphane bununla ilgilenmez. Programcılar kütüphaneleri ihtiyaç duyduklarında çağırırlar.
  • Her bir framework bir kütüphanedir ancak her bir kütüphane framework değildir.
  • Frameworklerde bir yazılım mimarisi bulunmaktadır ve içerisinden bir fonksiyonu ya da bir metodu kullanırken uymanız gereken standartlar vardır. Frameworklerde kodu çağıran kendisi olur
  • Framework uygulama çatısıdır. Uygulama o çatıda geliştirilir. Örn ASP.NET MVC
  • Kütüphane bir çatının altında yardımcı yapılardır. Kütüphane basitleştirilmiş kod fonksiyonlar topluluğudur. Framework bir uygulama çatısıdır uygulama o yapıya göre inşa edilir. image

image

image

Spring Nedir?

  • Spring popüler bir Java frameworküdür.

image

-Spring ile manuel spring boot ile otomatik bir şekilde

Spring Kütüphanesi

  • web uygulaması geliştirmek için en yaygın olarak kullanılan Java EE (Java Enterprise Edition) kütüphanelerinden biridir
  • Spring en önemli özelliği Dependency Injection dır.
  • Spring kütüphanesi bize esneklik uygulamaya odaklanırken, Spring Boot kod uzunluğunu kısaltmayı ve bir web uygulaması geliştirmenin en kolay yolunu bize sunmayı amaçlamaktadır.

image

All in all, Spring Boot is a project initializer based on Spring. It prevents you from writing long code with features such as auto-configuration and lets you avoid excessive configuration. The Spring Framework is really a solid option for developers, with the many enhancements listed above. However, when used with Spring Boot, it is highly advantageous.

The above example well illustrates the plot that I explained in the above sense. Spring framework is something that we need to manually change almost all configurations, while Spring Boot already provides us with zero or limited configuration standalone applications. The following diagram is a fairly clear example that illustrates these two frameworks.

Bu resim için linkteki videoya bak https://www.fusion-reactor.com/blog/the-difference-between-spring-framework-vs-spring-boot/

image

image

Spring Boot

Spring Boot is an open source Java-based framework used to create a micro Service.

image

image

image

Tomcat Nedir?

  • Web sunucusudur.

IoC(Inversion of Control)

  • Bir yazılım tasarım prensibidir.
  • Ioc ile Uygulama içerisindeki obje instance’larının yönetimi sağlanarak, bağımlılıklarını en aza indirgemek amaçlanmaktadır.
  • Yazdığımız kod bloğu çalışacağı zaman, framework bizim kodumuzu çağırır ve çalıştırır daha sonra kontrol yeniden framework’e geçmesi olayının tümüne Inversion Of Control adı verilmektedir.

image

Spring Bean nedir?

  • Java objesidir.

NOT : Önceden XML ile her şeyi yani beanleri teker teker yazılıyormuş.

Dependency Injection

  • Mesela ben araba almak istiyorum benim gerçektende bir araba yapmama gerek yok. Dependency Injection ise bu işlemi yapıyor.
  • dependency = helper objects
  • Injection Types : En yaygın olan ikisi şunlardır: Constructor Injection ve Setter Injection.
  • Dependency Injection'ı ise @Autowiring ile sağlıyoruz.

Java Annotations

  • @ kullanarak gerçekleştirilir.
  • Mesela @Autowiring ile dependency injection yaparız , ya @Id diyerek id olduğunu belirtiriz.

Autowiring Injection Types

  • Constructor Injection
  • Setter Injection
  • Field Injections

@Component nedir?

  • Bir sınıfı “Bean” olarak işaretler. (spring tarafından yönetilen bean)
  • Örnek olarak da @ComponentScan("package ismini buraya yazarız")

@Configuration nedir?

  • @Bean tanımlaması içeren fonksiyonlar içerir.
  • Tanımlandığı fonksiyon her neyi return ediyorsa, onun context içine ekleneceğini belirtir.
  • @Bean, genelde 3rd parti sınıflar context içine eklenmek istediğinde kullanılır.
  • Dosya içerisinden birden çok bean tanımı olabileceğini belirtir.

Spring MVC

  • Spring MVC Java da web projeleri için kullanılanılır.
  • Model View Controller, Design Pattern'a dayalıdır

image

Controller

  • Kodlar geliştiriciler tarafındna oluşturulur
  • Uygun view templateları gönderir

Model

  • Model: data'yı içerir

View

  • Spring Mvc flexibledır,bir çok template i içerir. En yaygın olanları JSP(Java Server Pages) Vve JSTL(JSP Standart Tag)'dır.
  • Diğer destekledikleri ise Thymeleaf, Groovy etc

@RequestMapping("/.....")

  • Template de "..." bu kısım bizim
  • form action=" ....." karşılık gelen kısımdır.
  • form action=" ....." method="GET"> ---
  • Ya da class bilgisinden öncede kullanabiliyoruz. Bunada "parent mapping" deniliyor.

@RequestParam()

  • Attribute ismini yazarız

Data Binding

image

Form Validation

  • Validation Annotations : @NotNull, @Min, @Max, @Size etc

Binding Result

  • Verilerin gönderimi sırasında oluşan hata ve bilgilere erişim BindingResult ve Errors arayüzünde yer alan metotlar ile yapılır.

Hibernate Nedir?

  • Hibernate, Java platformunda yazılmış bir ORM aracıdır. ORM, nesne odaklı dillerdeki nesnelerin, ilişkisel veri tabanlarındaki kayıtlara nasıl karşılık geldiğini yürüten bir teknolojidir.

  • Java Code <---> Hibernate <----> Database

  • SQL, JDBC ,ORM(Object To Relational )

  • Hibernate uses JDBC for all database communications.

    Java App <----> Hibernate JDBC <----> Database

Why we are using JPA Annotations instead of Hibernate?

  • Jpa is a standard specification. Hibernate is an implementation of the JPA specification.
  • Hibernate implementations all of JPA annotations.
  • The Hibernate team recommends the use of JPA Annotations as a best practice.

Spring Data JPA ile örnek kodlama

  • Spring Data Jpa ile CRUD operasyonları için herhangi bir implementasyon yazmanıza gerek yoktur.
  • repo.findAll(); Bu kod bloğu ile tablodaki tüm kayıtlar listelenecek.
  • Hibernate ise nesneleri ilişkisel veritabanlarında kalıcı hale getirmenize olanak tanıyan bir nesne-ilişkisel eşleme aracıdır.
  • Jpa sadece bir standart ,hibernate onu implemente ediyor.

ID Generation Strategies

  • GenerationType.AUTO/IDENTIFY/SEQUENCE/TABLE

Hibernate Query Language(HQL)

One-to-One

One-to-Many , Many-to-One

Many-to-Many

Entity Lifecycle

image

@OnetoOne - Cascade Types

image

image

image

Cascade

  • Cascade JPA standartıdır. Java sınıflarımızdaki ilişkilerin davranışlarını cascade niteliğini kullanarak ayarlarız.
  • “İlişki davranışları” kavramını biraz açıklayacak olursak, bir değer silinirse o veri ile ilişkili olan kayıtların etkilenmesini ya da etkilenmemesi işlemlerini Java nesneleri olarak yönetilmesini sağlamaktayız. Bu JPA teknolojisi bu davranışları Java nesneleri üzerinden yöneterek veritabanına ulaşmadan yormadan halleder.

Mapped by


@Entity
@Table(name="instructor_detail")
public class InstructorDetail{
 ...
 @OneToOne(mappedBy="instructorDetail")
 private Instructor instructor;
 }
 ***********************************************
public class  Instructor{
  ...
 @OneToOne(cascade=CascadeType.ALL)
 @JoinColumn(name="instructor_detail_id")
 private InstructorDetail instructorDetail;
 } ```
  • mappedBy tells Hibernate
    • Look at the instructorDetail property in the Instructor class
    • Use information from the Instructor class @JoinColumn
    • To help find associated instructor

Fetch Type

  • Aralarında ilişki bulunan Entity sınıflarından bir tarafın yüklenme durumunda diğer tarafın yüklenme stratejisini belirlememizi sağlar. Hibernate de 2 adet fetch type vardır. Bunlar:

  • 1-)Eager(Ön Yükleme)

  • 2-)Lazy(Tembel/Sonradan Yükleme)

  • Eğer @OneToOne ve @ManyToOne ilişkileri kullanıyorsak FetchType olarak Eager kullanmamız daha doğru olur. Yani bir tane Entity nesnesi üzerinden ilişki kurulduğundan ön yükleme yapmak performans açısından sorun oluşturmaz.

  • Eğer ki @OneToMany ve @ManyToMany ilişki kullanıyorsak FetchType olarak Lazy kullanmamız daha doğru olur. Yani birden fazla ilişkili nesne olduğundan ön yükleme yapmamız performans açısından kayba neden olur. Bunun için ihtiyaç duyulduğunda yüklemek daha doğru olur.

  • Eager will retrieve everything

  • Lazy will retrieve on request

  • Eager yerine Lazy daha çok tercih ediliyor. Neye ihtiyacımız var ise onu kullanmamız daha mantıklı

image

DAO(Data Access Object)

  • bir design patterndır.
  • It's a design pattern in which a data access object (DAO) is an object that provides an abstract interface to some type of database or other persistence mechanisms.
  • image
  • image

HTTP Methods

image

GET POST

GET

  • Good for debugging
  • Bookmark or email URL
  • Limitations on data length

POST

  • Can't bookmark(işaretleme) or email URL
  • No limitations on data length
  • Can also send binary data

From load : Call getters

From submit : Call setters

Save(...) : INSERT new record

update(...) : UPDATE existing record

Application Architecture

Account Controller <---> Account Service <----> Account DAO <----> Database

Aspect Oriented Programming (AOP)

AspectJ, @Before bu işlemlerde pointcutlar ile * , .. gibilerde package ile işlemlerimizi gerçekleştiriyorunu,yani ulaşıyoruz. @After Advice, @Around

  • image

Maven nedir?

  • Maven is a Project management tool
  • Most populer use of Maven is for build management and dependencies
  • When building your Java project,you may need additional JAR files - For example : Spring, Hibernate,Common Logging, JSON etc
  • Manually add the JAR files to your build path/classpath

JAR nedir?

  • JAR dosyası, genellikle birçok Java sınıfı dosyasını ve ilişkili meta verileri ve kaynakları dağıtım için tek bir dosyada toplamak için kullanılan bir paket dosya biçimidir. JAR dosyaları, Java'ya özgü bir bildirim dosyası içeren arşiv dosyalarıdır
  • JAR stands for Java ARchive. It's a file format based on the popular ZIP file format and is used for aggregating many files into one.

POM File

  • Project Object Model file : pom file -Configuration file for your project

image

image

Roadmap

image

Layers

katmannnnn