Bahsedilen her teknolojiye bir giriş burada.
İlkbahar-DAO
Spring-DAO, tam anlamıyla bir yay modülü değil, daha çok DAO yazmanızı ve onları iyi yazmanızı gerektiren kurallardır. Bu nedenle, verilerinize erişmek için arabirimler, uygulamalar veya şablonlar sağlamaz. Bir DAO yazarken @Repository
, temel teknolojiyle bağlantılı istisnaların (JDBC, Hibernate, JPA, vb.) Tutarlı bir şekilde uygun DataAccessException
alt sınıfa çevrilmesi için bunlara açıklama eklemelisiniz .
Örnek olarak, şimdi Hazırda Bekletme kullandığınızı ve hizmet katmanınızın HibernateException
buna tepki vermek için yakaladığını varsayalım . JPA'ya geçerseniz, DAO arayüzleriniz değişmemelidir ve hizmet katmanı yine de yakalanan bloklarla derlenecektir HibernateException
, ancak DAO'larınız artık JPA attığı için bu bloklara asla girmeyeceksiniz PersistenceException
. DAO'nuzda kullanarak @Repository
, temel teknolojiyle bağlantılı istisnalar Spring'e çevrilir DataAccessException
; hizmet katmanınız bu istisnaları yakalar ve kalıcılık teknolojisini değiştirmeye karar verirseniz, aynı BaharDataAccessExceptions
, bahar yerel istisnaları tercüme ettiği için yine de fırlatılacaktır.
Bununla birlikte, aşağıdaki nedenlerden dolayı bunun sınırlı kullanımı olduğunu unutmayın:
- Sağlayıcı işlemi geri almış olabileceğinden (tam istisna alt türüne bağlı olarak) kalıcılık istisnalarını genellikle yakalamamalısınız ve bu nedenle yürütmeye alternatif bir yolla devam etmemelisiniz.
- İstisnalar hiyerarşisi genellikle sağlayıcınızda Spring'in sağladığından daha zengindir ve bir sağlayıcıdan diğerine kesin bir eşleştirme yoktur. Buna güvenmek tehlikelidir. Ancak bu
@Repository
, çekirdekler tarama prosedürü tarafından otomatik olarak ekleneceğinden, DAO'larınıza açıklama eklemek için iyi bir fikirdir . Ayrıca, Bahar ek açıklamaya başka kullanışlı özellikler ekleyebilir.
İlkbahar-JDBC
Spring-JDBC, sıhhi tesisat kodunu kaldıran ve SQL sorgusu ve parametreleri üzerinde konsantre olmanıza yardımcı olan JdbcTemplate sınıfını sağlar. Bunu bir ile yapılandırmanız yeterlidir DataSource
ve ardından şu şekilde kod yazabilirsiniz:
int nbRows = jdbcTemplate.queryForObject("select count(1) from person", Integer.class);
Person p = jdbcTemplate.queryForObject("select first, last from person where id=?",
rs -> new Person(rs.getString(1), rs.getString(2)),
134561351656L);
Spring-JDBC ayrıca DAO'nuzu geliştirmek için genişletebileceğiniz bir Jdbc DaoSupport sağlar. Temel olarak 2 özelliği tanımlar: her ikisi de DAO yöntemlerini uygulamak için kullanılabilen bir DataSource ve bir JdbcTemplate. Ayrıca SQL istisnalarından Spring DataAccessExceptions'a bir istisna çevirmeni sağlar.
Düz jdbc kullanmayı planlıyorsanız, kullanmanız gereken modül budur.
Bahar-ORM
Spring-ORM, JPA, JDO, Hibernate ve iBatis gibi pek çok kalıcı teknolojiyi kapsayan bir şemsiye modüldür. Spring, bu teknolojilerin her biri için entegrasyon sınıfları sağlar, böylece her teknoloji Spring konfigürasyon ilkelerine göre kullanılabilir ve Spring işlem yönetimi ile sorunsuz bir şekilde entegre olur.
Her teknoloji için, konfigürasyon temelde bir DataSource
fasulyenin bir çeşit SessionFactory
veya EntityManagerFactory
vb. Fasulyeye enjekte edilmesinden oluşur . Tam JDBC için, JDBC yalnızca bir DataSource'a dayandığından, bu tür entegrasyon sınıflarına (JdbcTemplate dışında) gerek yoktur.
JPA veya Hibernate gibi bir ORM kullanmayı planlıyorsanız, spring-jdbc'ye değil, yalnızca bu modüle ihtiyacınız olacak.
Bahar Verileri
Spring-Data, hem SQL hem de NOSQL veri kaynaklarını kapsayan, verilere nasıl erişileceğini (DAO + ek açıklamaları) daha genel bir şekilde tanımlamak için ortak bir API sağlayan bir şemsiye projedir.
İlk fikir, geliştiricinin bir DAO için arabirimi (bulucu yöntemleri) ve varlık sınıflarını teknolojiden bağımsız bir şekilde ve yalnızca yapılandırmaya dayalı olarak (DAO'lar ve varlıklar üzerindeki açıklamalar + yay yapılandırması) yazması için bir teknoloji sağlamaktır. xml veya java tabanlı), uygulama teknolojisine karar verir; JPA (SQL) veya redis, hadoop, vb. (NOSQL).
Bulucu yöntem adları için spring tarafından tanımlanan adlandırma kurallarını izlerseniz, en basit durumlar için bulucu yöntemlere karşılık gelen sorgu dizelerini sağlamanız bile gerekmez. Diğer durumlar için, bulucu yöntemlerdeki ek açıklamalar içinde sorgu dizesini sağlamanız gerekir.
Uygulama bağlamı yüklendiğinde, spring veri erişim teknolojisi ile ilgili tüm standart kodu içeren DAO arayüzleri için proxy'ler sağlar ve yapılandırılmış sorguları çağırır.
Spring-Data, SQL dışı teknolojilere odaklanır, ancak yine de JPA (tek SQL teknolojisi) için bir modül sağlar.
Sıradaki ne
Tüm bunları bilerek, şimdi ne seçeceğinize karar vermelisiniz. Buradaki iyi haber şu ki, teknoloji için kesin bir son seçim yapmanız gerekmiyor. Aslında Spring gücünün bulunduğu yer burasıdır: bir geliştirici olarak, kod yazarken işe konsantre olursunuz ve eğer bunu iyi yaparsanız, temel teknolojiyi değiştirmek bir uygulama veya yapılandırma ayrıntısıdır.
- Varlıklar için POJO sınıflarıyla bir veri modeli tanımlayın ve varlık özniteliklerini ve diğer varlıklarla ilişkileri temsil etmek için alma / ayarlama yöntemleri. Teknolojiye dayalı olarak varlık sınıflarına ve alanlarına kesinlikle açıklama eklemeniz gerekecek, ancak şimdilik POJO'lar başlamak için yeterli. Şimdilik sadece iş gereksinimlerine odaklanın.
- DAO'larınız için arayüzler tanımlayın. 1 DAO tam olarak 1 varlığı kapsar, ancak ilişkilerde gezinerek ek varlıkları yükleyebilmeniz gerektiğinden, her biri için kesinlikle bir DAO'ya ihtiyacınız olmayacak. Katı adlandırma kurallarına göre bulucu yöntemlerini tanımlayın.
- Buna dayanarak, başka biri DAO'larınız için taklitlerle hizmetler katmanı üzerinde çalışmaya başlayabilir.
- İhtiyaçlarınıza en uygun olanı bulmak için farklı kalıcılık teknolojilerini (sql, no-sql) öğrenir ve bunlardan birini seçersiniz. Buna dayanarak, varlıklara açıklama eklersiniz ve DAO'ları uygularsınız (veya yay verilerini kullanmayı seçerseniz, Spring'in bunları sizin için uygulamasına izin verirsiniz).
- İş gereksinimleri gelişirse ve veri erişim teknolojiniz bunu desteklemek için yeterli değilse (örneğin, JDBC ve birkaç kuruluşla başladınız, ancak şimdi daha zengin bir veri modeline ihtiyacınız varsa ve JPA daha iyi bir seçimdir), uygulamayı değiştirmeniz gerekecektir. DAO'larınızda, varlıklarınıza birkaç ek açıklama ekleyin ve yay yapılandırmasını değiştirin (bir EntityManagerFactory tanımı ekleyin). İşletme kodunuzun geri kalanı, değişikliğinizin diğer etkilerini görmemelidir.
Not: İşlem Yönetimi
Spring, işlem yönetimi için bir API sağlar. Veri erişimi için yayı kullanmayı planlıyorsanız, işlem yönetimi için yayı da kullanmalısınız, çünkü bunlar birbirlerine gerçekten iyi entegre olurlar. Spring tarafından desteklenen her veri erişim teknolojisi için, yerel işlemler için eşleşen bir işlem yöneticisi vardır veya dağıtılmış işlemlere ihtiyacınız varsa JTA'yı seçebilirsiniz. Hepsi aynı API'yi kullanır, böylece (bir kez daha) teknoloji seçimi, işletme kodu üzerinde daha fazla etki olmaksızın değiştirilebilecek bir konfigürasyon meselesidir.
Not: Yay belgeleri
Bahsettiğiniz Bahar belgelerine bağlantılar oldukça eskidir. İşte en son sürümün belgeleri (4.1.6, tüm konuları kapsar):
Bahar verileri, Bahar çerçevesinin bir parçası değildir. İlkelere alışmak için önce okumanız gereken ortak bir modül var. Belgeler burada bulunabilir: